冒充用户

时间:2012-08-02 18:52:46

标签: c# .net active-directory

我正在尝试冒充用户从我的网站进入需要广告凭据的网站。我知道用户ID已经不是密码了。我想知道在代码中是否有一种方法可以连接到广告,并仅使用用户ID模拟用户。

目的是允许代理登录服务。

2 个答案:

答案 0 :(得分:4)

以-5票回答问题我有点紧张。我想指出存在这样一个特征。它被称为Protocol Transistion extension。它也被称为S4USelf

Microsoft发明协议转换,因为Active Directory主要使用Kerberos进行身份验证。但是,在许多情况下,Kerberos端口在Internet环境中被阻止。因此,应用程序无法使用Kerberos进行身份验证。对于Web应用程序尤其如此,通常只打开端口80。为了解决这个问题,Microsoft允许通过其他一些机制完成身份验证,例如,使用基于ASP.NET表单的身份验证。然后,代理服务器可以使用它自己的机制为刚刚验证的任何用户获取Kerberos票证。在此过程中,不需要Active Directory密码。但请注意,Microsoft确实希望使用此方法的应用程序获取Kerberos票证将对用户进行自己的身份验证。例如,您可能有一个存储一组用户名和密码的SQL Server数据库。您的应用程序使用存储在SQL Server数据库中的用户名和密码进行身份验证,然后获取指定用户的Kerberos票证。

正如你们许多人所指出的,如果真的发生这种情况,这看起来就像是一个很大的安全漏洞。这是精美的印刷品。要使用协议转换方法获取Kerberos票证,您的流程必须具有作为操作系统权限的一部分。这是系统中的一项非常高的权限。简单一点。如果您刚刚以普通AD用户帐户登录并尝试使用协议转换方法运行程序以获取域管理员票证,那么它无法正常工作,因为您没有行动操作系统特权的一部分。默认情况下,您的NT Authority\LocalSystem帐户将拥有此权限。因此,为了做到这一点,在许多情况下,您只需编写服务并将服务帐户设置为使用NT Authority\LocalSystem。该服务将能够从Active Directory获取您需要的任何Kerberos S4USelf票证。

等一下。你们中的许多人会说这仍然是一个安全漏洞,因为我可能是特定工作站机器上的本地管理员。然后,我可以安装我喜欢的任何服务。我可以自己创建一个服务,并使用S4USelf获取域管理员票证并访问企业环境中的一些重要信息。嗯......这不是真的。 Microsoft使S4USelf Kerberos票证如此特殊,以至于它只能在请求票证的计算机上使用。换句话说,您无法使用网络上的S4USelf票证来请求任何其他服务。这听起来更合理,对吧?访问仅限于该特定机器。是的,我知道仍然很难接受这样一个事实,即一个人可以在不知道密码的情况下冒充另一个用户帐户,但该功能就在那里。

沿着这条线,还有一个叫做Constraint Delegation的疯狂事物。它也被称为S4UProxy。它基本上将此模拟功能扩展到网络资源。这意味着使用S4USelf票,您可以获得S4UProxy票。使用S4UProxy票证,您可以使用模拟身份访问所选网络资源,而无需为Active Directory提供任何密码。再次,这看起来非常疯狂,但这里是细节。首先,默认情况下,加入Active Directory的所有计算机都无法请求S4UProxy票证。域管理员必须打开计算机对象上的标志才能有意识地发生这种情况。域管理员应该明白,授予此权限基本上就像是说我将此计算机视为域中的域控制器。它掌握着王国的钥匙。其次,并非所有服务都可以通过S4UProxy方法获得。域管理员可以通过在计算机对象上指定SPN来选择允许显式使用S4UProxy的服务。这就是为什么它得到了Constraint代表团的名字。它看起来很疯狂,但实际上并没有那么糟糕。

答案 1 :(得分:0)

不是我知道的。 AD中的安全性(通常)设置为防止未经授权的访问,因此您不得不

  • 从用户那里获取密码。
  • 创建一个“假”用户进行测试。
  • 强行输入密码。

当然,暴力破解密码/帐户并不是一个很好的方法,除非它是你自己的网络并且对你自己没有法律后果。

理想情况下,我建议创建一个虚假用户进行测试。

希望有所帮助。