Juicy Potato提權漏洞原理與實戰剖析!介紹 Windows Potato 系列攻擊手法,說明如何利用 SeImpersonatePrivilege 權限與 Webshell 取得 SYSTEM 最高權限,並提供 Patch 更新與防禦建議。
Potato系列非常龐大,主要用於windows提權,平常常見的有Hot potato, Rotten potato, Juicy potato, Rogue potato, Sweet potato, God Potato, JuicyPotatoNG等等,根據不同時間推出的potato,微軟也有進行相對的patch。
這次要介紹的是Juicy Potato。Juicy Potato是從Rotten potato改進的版本,可以經過特定CLSOD自定義COM listen且可以聽自定義的port上,可以創建新的進程以高權限執行我們想要執行的指令。Juicy Potato需要有SeImpersonatePrivilege或是SeAssignPrimaryToken權限,開啟DCOM以及RPC,並找到有可利用的COM object才能成功執行。
原理
SeImpersonatePrivilege權限代表可以模擬身分驗證後的client端(Impersonatea client),因此可以用特定帳戶權限運行COM服務,並呼叫CreateProcessWithToken,juicy potato可以利用這個方式去取得NT AUTHORITY\SYSTEM權限。
SeAssignPrimaryToken權限代表可以調用CreateProcessAsUser,他允許利用system的token創建新的process。
防禦
目前windows版本為windows server 2019 和 windows 10 build 1809已經被修補漏洞,因此這只針對之前的版本且無上過patch才能利用。
實作
先利用一個有上傳漏洞的網站,上傳webshell之後確認我們有可利用的權限,可以是SeImpersonatePrivilege或是SeAssignPrimaryToken其中一個有權限就代表有條件可以使用juicypotato來進行攻擊。

丟了一個常見的aspx webshell進去,去爬路徑找出可能的上傳位置,鎖定了路徑取得webshell是在image資料夾下,其餘路徑都是網頁的錯誤訊息頁面。


下一步,確認目前權限狀況是否符合juicy potato的可能性,因為含有SeImpersonatePrivileg權限代表可以用juicy potato測試看看。

接著上傳我們需要用到的檔案,其中GetCLSID.ps1和test_clsid.bat是搭配起來使用找到可利用的CLSID值,接著利用JuciyPotato.exe提權,如果提權成功,那麼就可以把nc64.exe拿來利用製作一個reverse shell。

先用nc64.exe跑一次看看,在攻擊機器上會拿到iis apppool權限的shell,而我們的目標是更高權限的system。

在使用GetCLSID.ps1和test_clsid.bat時需要根據自己使用的情境去改寫裡面的指令,需要控制在可寫檔與可執行的位置以及注意產出檔案的位置是否一致,因此我們把它拉去Public資料夾執行。

假使執行test_clsid.bat有結果,就代表有找到可利用的CLSID,可以從result.log裡看到結果知道可以利用那些CLSID。

那麼就可以正式來使用juicypotato的檔案,假如執行之後出現這個結果代表有執行成功,另外也可以不使用特定CLSID,讓juicypotato自己全跑一遍。

接著就可以利用nc64.exe,下指令利用local的cmd.exe帶入參數去帶起nc64.exe並帶上攻擊機器的ip與port,如下圖會接受到彈回來的shell,而且目前的權限是system。

最後,提醒大家務必注意目前手上windows機器是否有上好patch,並養成定期更新的習慣。雖然juicy potato已經是大家熟知的攻擊工具,因此大部分的防毒軟體皆能在執行時擋下,但仍有許多攻擊者一直在利用各種混淆來執行或是先利用其它手段關閉防毒 / 使用其他躲避手段來搭配使用,除此之外,更要提醒大家往後只會有更多新的potato攻擊出現,屆時需要大家提高警覺,小心上當。
有任何資安問題,歡迎隨時與NEITHNET團隊聯繫!
參考資料:
https://github.com/ohpe/juicy-potato