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參考
相關文章
相關標籤/搜索