如何利用SSRF伪造Microsoft Exchange任意用户

Track-SSG   ·   发表于 2018-12-29 10:55:25   ·   漏洞文章

图片.png


漏洞详情

在本文中,为了可以冒充任意用户身份,需要结合SSRF漏洞与其他漏洞。Exchange允许任何用户把订阅推送到指定的URL,服务器将向此URL发送通知。 Exchange服务器使用了CredentialCache.DefaultCredentials进行连接导致出现以下问题:

图片.png

在Exchange Web服务中,CredentialCache.DefaultCredentialsNT 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头:

图片.png

漏洞利用

本次演示会使用到两个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。如下所示,我们以“攻击者”身份登录:

15459.png

2、接下来,创建一个新文件夹。 比如“tempFold”。 单击下图菜单中的“Permissions…”选项:

图片.png

3、然后添加需要冒充的用户的邮箱地址。 我使用“victim@contoso.local”这个邮箱地址进行伪造:

图片.png

4、然后按F12并选择“网络”。 之后,在新文件夹的菜单中选择“Permissions…”选项:

图片.png

5、按照以下步骤查看“service.svc?action=GetFolder”请求的响应内容:

Body->ResponseMessages->Items->0->Folders->0->PermissionSet->Permissions->N->UserId->SID

N 在这次演示中它是第二个请求的响应(最新的一个),也可以检查所有响应包来找到正确的。 PrimarySmtpAddress是受害者的邮箱地址。 如果响应中不包含PermissionSet项,我们需要查看其他“service.svc?action=GetFolder”请求的响应内容。

Picture7.png

6、接下来在serverHTTP_relayNTLM.py中使用此SID来冒充受害用户。 此外,我们需要在攻击者所控制的机器上选择一个不会被安全软件阻止的TCP端口,并可以连接Exchange服务器。可以选择8080端口。

在 serverHTTP_relayNTLM.py 中按照实际情况更改下图中所标记的变量值:

Picture8.png

修改完成后,执行该脚本:

Picture9.png

7、下一步在Exch_EWS_pushSubscribe.py脚本中设置正确的变量:

Picture10.png

设置完成,执行该脚本:

Picture11.png

8、最后一步。 我们需要有一些事件来触发推送通知。 如果想更加隐蔽一些,我们可以等待一段时间。也可以执行一些操作,例如创建并发送新电子邮件或删除文件夹:

Picture12.png

如果成功的话,在 serverHTTP_relayNTLM.py 里面,我们会收到来自Exchange服务器的连接请求:

Picture13.png

如果攻击成功,可以最后一个响应中看到UpdateInboxRulesResponse ResponseClass =“Success”。 这意味着规则已经添加到受害者邮箱,并且所有电子邮件都将转发给攻击者。

现在准备的差不多了,可以测试新的规则。 我们可以冒充任何帐户向受害者发送电子邮件,但不能新规则中的目标地址(在此示例中为attacker@contoso.local)相同,因为如果源地址和目标地址是相同,不会转发电子邮件。 尝试以管理员身份登录并向受害者发送一些“敏感”信息:

Picture14.png

检查攻击者的收件箱,我们看到邮件已成功转发:

Picture15.png

可以看到,电子邮件将已经转发给攻击者。 也可以通过其他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并输入以下命令:

Picture16.png

删除该注册表项后,无需重新启动操作系统或Exchange Server。 该公告指出,未来Exchange更新后将不再默认启用注册表项。

参考链接:

https://www.zerodayinitiative.com/blog/2018/12/19/an-insincere-form-of-flattery-impersonating-users-on-microsoft-exchange


本文由白帽汇整理并翻译,转载来自白帽汇Nosec:https://nosec.org/home/detail/2117.html


打赏我,让我更有动力~

0 条回复   |  直到 2018-12-29 | 1680 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.