漏洞详情
在本文中,为了可以冒充任意用户身份,需要结合SSRF漏洞与其他漏洞。Exchange允许任何用户把订阅推送到指定的URL,服务器将向此URL发送通知。 Exchange服务器使用了CredentialCache.DefaultCredentials
进行连接导致出现以下问题:
在Exchange Web服务中,CredentialCache.DefaultCredentials
以NT AUTHORITY \ SYSTEM
权限运行。导致Exchange Server会将NTLM Hash发送到攻击者的服务器。Exchange服务器在默认情况下还设置了以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck = 1
我们可以使用这些NTLM Hash进行HTTP身份验证。 例如,利用这些哈希来访问Exchange Web服务(EWS)。因为它以NT AUTHORITY \ SYSTEM
权限运行,攻击者可以利用令牌来建立“特权”会话,然后利用SOAP头冒充任意用户。
下面是利用管理员SID来伪造管理员身份的SOAP头:
漏洞利用
本次演示会使用到两个python脚本。
serverHTTP_relayNTLM.py - 从连接请求获取NTLM哈希值并将其用于EWS身份验证。
Exch_EWS_pushSubscribe.py – 导致推送订阅的Exchange Web服务器调用到serverHTTP_relayNTLM.py的URL。
你可以在该链接(https://github.com/thezdi/PoC/tree/master/CVE-2018-8581)下载这些脚本。 需要安装python-ntlm模块。
第一步需要获取我们想要冒充的人的SID。 可以使用以下方法:
1、以任意授权用户身份登录OWA。如下所示,我们以“攻击者”身份登录:
2、接下来,创建一个新文件夹。 比如“tempFold”。 单击下图菜单中的“Permissions…”选项:
3、然后添加需要冒充的用户的邮箱地址。 我使用“victim@contoso.local”这个邮箱地址进行伪造:
4、然后按F12并选择“网络”。 之后,在新文件夹的菜单中选择“Permissions…”选项:
5、按照以下步骤查看“service.svc?action=GetFolder”请求的响应内容:
Body->ResponseMessages->Items->0->Folders->0->PermissionSet->Permissions->N->UserId->SID
N – 在这次演示中它是第二个请求的响应(最新的一个),也可以检查所有响应包来找到正确的。 PrimarySmtpAddress是受害者的邮箱地址。 如果响应中不包含PermissionSet项,我们需要查看其他“service.svc?action=GetFolder”请求的响应内容。
6、接下来在serverHTTP_relayNTLM.py中使用此SID来冒充受害用户。 此外,我们需要在攻击者所控制的机器上选择一个不会被安全软件阻止的TCP端口,并可以连接Exchange服务器。可以选择8080端口。
在 serverHTTP_relayNTLM.py 中按照实际情况更改下图中所标记的变量值:
修改完成后,执行该脚本:
7、下一步在Exch_EWS_pushSubscribe.py脚本中设置正确的变量:
设置完成,执行该脚本:
8、最后一步。 我们需要有一些事件来触发推送通知。 如果想更加隐蔽一些,我们可以等待一段时间。也可以执行一些操作,例如创建并发送新电子邮件或删除文件夹:
如果成功的话,在 serverHTTP_relayNTLM.py 里面,我们会收到来自Exchange服务器的连接请求:
如果攻击成功,可以最后一个响应中看到UpdateInboxRulesResponse ResponseClass =“Success”。 这意味着规则已经添加到受害者邮箱,并且所有电子邮件都将转发给攻击者。
现在准备的差不多了,可以测试新的规则。 我们可以冒充任何帐户向受害者发送电子邮件,但不能新规则中的目标地址(在此示例中为attacker@contoso.local)相同,因为如果源地址和目标地址是相同,不会转发电子邮件。 尝试以管理员身份登录并向受害者发送一些“敏感”信息:
检查攻击者的收件箱,我们看到邮件已成功转发:
可以看到,电子邮件将已经转发给攻击者。 也可以通过其他EWS API(如AddDelegate)或为目标文件夹分配编辑权限,来实现类似的效果。
补丁
Microsoft在11月发布的版本中为该漏洞分配了CVE编号(CVE-2018-8581)并修复了它。 实际上没有补丁来修复这个漏洞。 相反,Microsoft觉得应删除注册表项。 这么做会导致循环检查。 根据上文得知,Exchange服务器默认设置了以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck = 1
如果删除HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ DisableLoopbackCheck键,该漏洞将不可被利用。 如果要删除注册表项,需要以管理员权限运行CMD并输入以下命令:
删除该注册表项后,无需重新启动操作系统或Exchange Server。 该公告指出,未来Exchange更新后将不再默认启用注册表项。
参考链接:
本文由白帽汇整理并翻译,转载请注明 来自白帽汇Nosec:https://nosec.org/home/detail/2117.html
查看详细内容请阅读原文,查看更多安全动态,请访问nosec.org