Jump to content

0x00 前言Exchange Powershell基於PowerShell Remoting,通常需要在域內主機上訪問Exchange Server的80端口,限制較多。本文介紹一種不依賴域內主機發起連接的實現方法,增加適用範圍。

注:

該方法在CVE-2022–41040中被修復,修復位置:C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.HttpProxy.Common.dll中的RemoveExplicitLogonFromUrlAbsoluteUri(string absoluteUri, string explicitLogonAddress),如下圖

1.png

0x01 簡介本文將要介紹以下內容:

實現思路

實現細節

0x02 實現思路常規用法下,使用Exchange Powershell需要注意以下問題:

所有域用戶都可以連接Exchange PowerShell

需要在域內主機上發起連接

連接地址需要使用FQDN,不支持IP

常規用法無法在域外發起連接,而我們知道,通過ProxyShell可以從域外發起連接,利用SSRF執行Exchange Powershell

更進一步,在打了ProxyShell的補丁後,支持NTLM認證的SSRF沒有取消,我們可以通過NTLM認證再次訪問Exchange Powershell

0x03 實現細節在代碼實現上,我們可以加入NTLM認證傳入憑據,示例代碼:

3.png

在執行Exchange Powershell命令時,我們可以選擇pypsrp或者Flask,具體細節可參考之前的文章《ProxyShell利用分析2——CVE-2021-34523》 和《ProxyShell利用分析3——添加用户和文件写入》

pypsrp或者Flask都是通過建立一個web代理,過濾修改通信數據實現命令執行

為了增加代碼的適用範圍,這裡選擇另外一種實現方法:模擬Exchange Powershell的正常通信數據,實現命令執行

可供參考的代碼:https://gist.github.com/rskvp93/4e353e709c340cb18185f82dbec30e58

代碼使用了Python2,實現了ProxyShell的利用

基於這個代碼,改寫成支持Python3,功能為通過NTLM認證訪問Exchange Powershell執行命令,具體需要注意的細節如下:

1.Python2和Python3在格式化字符存在差異(1)

Python2下可用的代碼:

4.png

以上代碼在Python3下使用時,需要將Str轉為bytes,並且為了避免不可見字符解析的問題,代碼結構做了重新設計,Python3可用的代碼:

11.png

(2)

Python2下可用的代碼:

12.png以上代碼在Python3下使用時,需要將Str轉為bytes,Python3可用的示例代碼:

13.png

(3)

Python2下可用的代碼:

15.png 16.png

以上代碼在Python3下使用時,需要將Str轉為bytes,為了避免不可見字符解析的問題,這裡不能使用.decode('utf-8'),改為使用.decode('ISO-8859-1')

Python3可用的示例代碼:

17.png

2.支持Exchange Powershell命令的XML文件格式XML文件格式示例1:

20.png

對應執行的命令為:Get-RoleGroupMember 'Organization Management'

XML文件格式示例2:

21.png

對應執行的命令為:Get-Mailbox -Identity administrator

通過格式分析,可得出以下結論:

(1)屬性Cmd對應命令名稱例如:

22.png

(2)傳入的命令參數需要注意格式如果只傳入1個參數,對應的格式為:

23.png如果傳入2個參數,對應的格式為:

24.png

如果傳入4個參數,對應的格式為:

25.png為此,我們可以使用以下代碼實現參數填充:

26.png構造XML文件格式的實現代碼:

27.png 28.png 29.png結合以上細節後,我們可以得出最終的實現代碼,代碼執行結果如下圖

Unknown.png

0x04 小結本文介紹了遠程訪問Exchange Powershell的實現方法,優點是不依賴於域內主機上發起連接,該方法在CVE-2022–41040中被修復。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...