【安全漏洞】ProxyShell利用分析2——CVE-2021-34523
前言
本文將要介紹ProxyShell中第二個漏洞的細節,分析利用思路。
簡介
本文將要介紹以下內容:
?CommonAccessToken
?Exchange PowerShell Remoting
?利用分析
CommonAccessToken
在上篇文章《ProxyShell利用分析1——CVE-2021-34473》提到,我沒有找到通過參數指定EWS認證用戶的方法,但是對于Exchange PowerShell Remoting,可以通過傳入CommonAccessToken指定認證用戶,訪問Exchange PowerShell Remoting
【安全資料】
1.定位參數傳入方法
使用dnsSpy打開文件C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Configuration.RemotePowershellBackendCmdletProxyModule.dll
依次定位到Microsoft.Exchange.Configuration.RemotePowershellBackendCmdletProxy -> RemotePowershellBackendCmdletProxyModule -> CommonAccessToken CommonAccessTokenFromUrl(string user, Uri requestURI, out Exception ex)
如下圖
可以看到,通過X-Rps-CAT作為參數傳入CommonAccessToken
傳遞參數的方式可以參考下圖
2.CommonAccessToken的生成
使用dnsSpy打開文件C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Net.dll
依次定位到Microsoft.Exchange.Security.Authorization -> CommonAccessToken -> Deserialize(Stream stream)【安全資料】
如下圖
在起始位置下斷點
執行命令:
找到applicationPool:MSExchangePowerShellAppPool對應的進程pid
附加到該進程上,等待一段時間,能夠捕獲到正確的格式
此時,選中Locals中的binaryReader,依次按鼠標右鍵 -> 選擇Show in Memory Window -> Memory 1,如下圖【安全資料】
查看該內存區域附近的內容,捕獲到了正確的格式,如下圖
對于認證類型長度,長度為1字節,字節序為little endian,內容為認證類型的字符串長度,例如認證類型為basic,那么認證類型長度為\x05【安全資料】
在Python代碼實現上,計算認證類型長度可以使用如下代碼:
經過實際測試,構造CommonAccessToken時,有以下技巧:
?用戶名只要是合法用戶即可,可以使用默認郵箱
?sid為關鍵內容,代表認證用戶的權限,如果需要認證為管理員用戶Administrator,這里的格式為S-1-5-domain-500
?如果域環境禁用了管理員用戶administrator,仍然能夠認證成功
?group sid只要是可用的即可,例如隨便指定一個S-1-1-0
關于sid的格式可以參考:
https://docs.microsoft.com/en-US/windows/security/identity-protection/access-control/security-identifiers
3.CommonAccessToken的驗證
在以正確的方式傳入參數X-Rps-CAT,如果CommonAccessToken也有效,那么在訪問/Powershell時會返回狀態碼200【安全資料】
Exchange PowerShell Remoting
1.默認設置下,所有域用戶都可以連接remote PowerShell
常用命令:
查看用戶是否具有訪問remote PowerShell的權限:
列出所有用戶是否具有訪問remote PowerShell的權限:
列出具有訪問remote PowerShell權限的用戶:
刪除指定用戶的remote PowerShell訪問權限:
開啟指定用戶的remote PowerShell訪問權限:
如果想要執行管理Exchange服務器的命令,用戶需要成為Organization Management組的成員
查看Organization Management組成員的命令如下:
2.連接remote PowerShell的內置方法
Powershell示例命令如下:【安全資料】
該方法默認只能從域內主機發起連接,不支持從域外連接
利用分析
1.CommonAccessToken的格式
用戶sid需要設置成Administrator,默認為S-1-5-domain-500
這里可以選擇其他用戶的sid,但需要滿足用戶位于"Organization Management"組中
2.使用PyPSRP連接remote PowerShell的一個問題
使用PyPSRP執行Powershell命令時,無法執行添加用戶的操作
這是因為傳遞Password的值時需要執行Powershell命令convertto-securestring,而convertto-securestring不是Exchange PowerShell Remoting支持的命令【安全資料】
如果選擇執行Powershell腳本,由于默認Powershell策略的限制,會提示無法執行Powershell腳本
小結
對于ProxyShell中的第二個漏洞CVE-2021-34523,結合利用思路,不難猜出最簡單粗暴的防御方法:將"Organization Management"組內的用戶清空,就可以防止攻擊者執行高權限的Exchange Powershell命令。
有學網安的朋友可以關注私信我哦!!!
總結
以上是生活随笔為你收集整理的【安全漏洞】ProxyShell利用分析2——CVE-2021-34523的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CTF大赛】2021 DASCTF J
- 下一篇: 【安全漏洞】简要分析复现了最近的Prox