CVE-2018-8581(利用SSRF伪造Microsoft Exchange任意用户)

0x01背景
    近日,安全研究人员发现微软Microsoft Exchange SSRF漏洞,该漏洞它容许任何通过身份验证的用户冒充Exchange Server上的其余用户,从而获得被冒充用户的权限。
    漏洞的提交时间在2018年11月14日。
    漏洞的影响版本为 Microsoft Exchange Server 20十、201三、201六、2019。
 
0x02漏洞详情
    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头:
 
0x03漏洞利用
    为了冒充用户身份,须要结合SSRF和其余漏洞。
     须要安装python-ntlm模块。
    且须要一个受权用户的帐号。
第一步是获取他人的SID。
    1.首先用本身的帐户登陆OWA,并任意建立一个文件夹。
2.接下来在文件夹上右键-〉权限,添加被攻击的用户地址。
 
 
    
3.再次点击文件->权限。并对这一操做抓包。
4.在响应正文里找到对应用户的SID。
具体位置为:
Body->ResponseMessages->Items->0->Folders->0->PermissionSet->Permissions->N->UserId->SID
(N在本例中是3)
5.接下来修改脚本:serverHTTP_relayNTLM.py并在vps上启动监听。
 
6.接下来配置Exch_EWS_pushSubscribe.py并执行该脚本。
 
7.一段时间后,vps上收到推送。
7.收到success表明攻击已经成功。新的规则已经被添加到受害者邮箱,受害者收到的全部电子邮件都会转发给攻击者。
 
0x04攻击中可能遇到的问题
    1.在配置Exch_EWS_pushSubscribe.py时,须要配置domain,它的获取可能不是那么容易。
    2.我在运行github给出的Exch_EWS_pushSubscribe.py时,返回值是500没有成功,且返回的response.msg是乱码,无法肯定问题。
    这时,修改脚本按照utf8编码:
#sending request and receiving response
            conn.request("POST", URL, body, headers)
            response = conn.getresponse()
            resp_data = response.read().decode('utf-8')
    获得返回报错。
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmls
oap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.mi
crosoft.com/exchange/services/2006/types">a:ErrorSchemaValidation</faultcode><
faultstring xml:lang="zh-CN">该请求未经过架构验证: 元素 命名空间“http://schem
as.microsoft.com/exchange/services/2006/messages”中的“PushSubscriptionReques
t”。 的子元素 命名空间“http://schemas.microsoft.com/exchange/services/2006/t
ypes”中的“CallerData”。 无效。应为可能元素的列表: 命名空间“http://schemas.
microsoft.com/exchange/services/2006/types”中的“URL”。。</faultstring><deta
il><e:ResponseCode xmlns:e="http://schemas.microsoft.com/exchange/services/200
6/errors">ErrorSchemaValidation</e:ResponseCode><e:Message xmlns:e="http://sch
emas.microsoft.com/exchange/services/2006/errors">请求未经过架构验证。</e:Mess
age><t:MessageXml xmlns:t="http://schemas.microsoft.com/exchange/services/2006
/types"><t:LineNumber>18</t:LineNumber><t:LinePosition>17</t:LinePosition><t:V
iolation>元素 命名空间“http://schemas.microsoft.com/exchange/services/2006/me
ssages”中的“PushSubscriptionRequest”。 的子元素 命名空间“http://schemas.mi
crosoft.com/exchange/services/2006/types”中的“CallerData”。 无效。应为可能
元素的列表: 命名空间“http://schemas.microsoft.com/exchange/services/2006/type
s”中的“URL”。。</t:Violation></t:MessageXml></detail></s:Fault></s:Body></s
:Envelope>
    发现是某个子元素无效。我对该命名空间缺少了解,只能暴力一点,在body里删除无效的元素。(后发现并不影响执行效果)
    3.在vps上执行的serverHTTP_relayNTLM.py须要注意请求的owa版本。脚本里默认是2016,若是版本不对应会返回500错误,改为正确版本便可,个人话改为2013。
 
0x05修补方案
    Microsoft在11月发布的更新里发布了此漏洞的环节措施,经过删除注册表项开启回环检测。
    具体方法是开启管理员权限的cmd并输入命令:
reg delete HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa / v DisableLoopbackCheck / f
    删除后无需重启系统或Exchange Server。公告指出,将来Exchange更新后将再也不默认启用注册表项。
 
0x06参考
相关文章
相关标签/搜索