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