標籤:

如何濫用 Exchange Web Service API?

0x00 前言

一直以來,Outlook Web Access (OWA) 一直是一個為滲透測試人員產生攻擊向量的源頭。最常見的就是攻擊者利用針對暴露在互聯網的 OWA 網站進行爆破,以便能獲取到有效的登錄憑證。一旦攻擊者獲得了有效的登錄憑證,他就可以通過一些使用單因子進行身份驗證的網站訪問目標的網路,例如,(Citrix, VPN, RDP)等。

在使用多個爆破工具之後,我發現有很多不足的地方,因此我決定編寫我自己的 OWA 爆破工具。我發現很多已安裝的 Exchange 通過 Exchange Web Service (EWS) 提供了一個 API 並且編寫了一系列高級的模塊。

0x01 編寫自己的 OWA 爆破工具

EWS 是一個暴露出來的非常方便的 API,其可以允許編程式的訪問他人的郵箱以及一些 Exchange 的功能。在利用這些模塊之前,你必須安裝 Exchange Web Service 的 API 。安裝之後,可以從這拷貝一份 OWA-Toolkit 。之後將這些模塊導入,如下:

Import-module C:pathtoOWA-Toolkit.psm1

導入模塊之後你可以看到它所包含的 PS cmdlets,如下:

獲取 OWA 版本的方法說明:

此函數用於獲取目標 Exchange 伺服器上運行的 Exchange 版本,訪問 http(s)://目標地址/owa/auth/logon.aspx,在響應頭裡的 X-OWA-VERSION 的值就是 Exchange 的版本號。常見的值有 OWA2007,OWA2010。

針對 OWA 2013 版此方法無效,不過可以在響應的 body 中查找 owa/auth/15. 或 owa/15. 關鍵字,這些關鍵字是 OWA 2013 版的標誌。

在使用 OWA-Toolkit 時,如果出現如下錯誤提示,

"You need to install the Exchange Web Service API or check your Microsoft.Exchange.WebServices.dll path"

請修改 dll 文件路徑進行嘗試。

$dllPath = "C:Program Files (x86)MicrosoftExchangeWeb Services2.1Microsoft.Exchange.WebServices.dll"

如果你想使用用戶的 ID 或者是完整的emial地址來進行爆破的話,需要準備一個目標的列表。這個列表是一個一行一條數據的 txt 文件。之後你就可以調用 Brute-EWS 進行爆破。可以使用 -Domain 參數指定要爆破的域名,如下:

Brute-EWS -TargetList .userids.txt -ExchangeVersion 2007_SP1 -ewsPath "https://webmail.yourdomain.com/EWS/Exchange.asmx" -Password "omg123" -Domain "yourdomain.com"

可以使用 UserAsPass 參數嘗試使用用戶名作為密碼進行身份驗證,一旦爆破出了有效的憑證,此憑證會加入到全局地址列表(GAL)以便進行其他一些爆破嘗試或者是社工。當我使用 Burp 作為代理對所有郵箱地址進行爆破時,這個過程有點痛苦。因此,我決定利用 EWS 編寫一個可以獲取 GAL 的腳本。使用 Steal-GAL 這個cmdlet 就可以調用,如下:

Steal-GAL -Password "littlejohnny" -User "dbetty" -domain "yourdomain.com" -ExchangeVersion 2007_SP1

你也可以使用管道符將一個 Exchange Web Service對象傳遞給這個 cmdlet ,如下:

OTK-Init -Password "littlejohnny" -User "dbetty" -Domain "yourdomain.com" -ExchangeVersion 2007_SP1 | Steal-GAL

同樣可以使用管道符將輸出定向到一個輸出方法中,最簡單的方式是在命令中添加 "| export-csv -Path .gal.csv"。

0x02 Exchange Web Service API 介紹

EWS 的全稱是 Microsoft Exchange Web service, 它是 Exchange 2007 以後推出的一個基於SOAP (Simple Object Access Protocol) 協議的 web service, 提供了訪問 Exchange 資源的介面。微軟的 Exchange 團隊後續又推出了 Microsoft Exchange Web Service(EWS) Managed API。這個全新的介面提供了很多操作郵箱的功能。

在安裝了 Microsoft Exchange Web Service(EWS) Managed API 之後,打開安裝目錄。如下圖:

可以看到下面有一個 GettingStarted.doc, 此說明文檔介紹了有關於 Exchange Web Service(EWS) Managed 的常用操作,並給出了代碼示例,建議閱讀英文版的說明文檔,有更詳細的說明。

編寫工具注意事項

此 API 是基於 .NET Framework 開發的,所以除了可以使用 PowerShell 直接調用也可以使用 C# 編寫自己的 OWA 利用工具。在需有使用這個 API 的項目中添加 Microsoft.Exchange.WebServices.dll 引用, 然後使用Microsoft.Exchange.WebServices.Data 這個命名空間。

在這個命名空間里提供了數十個操作郵箱的方法,如,郵箱登錄,郵件獲取,郵件收發等等。如下圖:

可以在這裡看到完整的列表。

具體每一個方法的使用實例代碼可以參考微軟官方的說明。

另外,Microsoft Exchange Web Service(EWS) Managed API 有 32 位和 64 位的版本,在安裝時要注意安裝的路徑,如果你安裝的是 EWS API 2.0,需要設置工程屬性的 .NET Framework 版本為 .NET Framework 4。EWS API 的其他版本可能需要使用不同版本的.NET Framework。

本文參考來源於shellntel,如若轉載,請註明來源於嘶吼: 如何濫用 Exchange Web Service API? 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

如何看待「機器學習不需要數學,很多演算法封裝好了,調個包就行」這種說法?
微前端 - 將微服務理念延伸到前端開發中
介紹幾款常用的在線API管理工具
邀請你共同開發WeChat API
做 2D 俄羅斯方塊用什麼繪圖 API 比較好?

TAG:信息安全 | API |