當前位置:
首頁 > 新聞 > Windows本地提權工具Juicy Potato測試分析

Windows本地提權工具Juicy Potato測試分析

0x00 前言

Juicy Potato是一款Windows系統的本地提權工具,是在工具RottenPotatoNG的基礎上做了擴展,適用條件更廣。

利用的前提是獲得了SeImpersonate或者SeAssignPrimaryToken許可權,通常在webshell下使用。

那麼,Juicy Potato的使用方法有哪些,有哪些限制條件呢?本文將對其進行測試,根據原理分析限制條件。

Juicy Potato的下載地址:

https://github.com/ohpe/juicy-potato

0x01 簡介

本將要介紹以下內容:

·實現原理

·對RottenPotatoNG的擴展

·枚舉可用COM對象的方法

·使用方法

·限制條件

·防禦思路

0x02 實現原理

參考資料:

https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/

根據個人理解介紹實現原理

需要理解的幾個知識:

·使用DCOM時,如果以服務的方式遠程連接,那麼許可權為System,例如BITS服務

·使用DCOM可以通過TCP連接到本機的一個埠,發起NTLM認證,該認證可以被重放

·LocalService用戶默認具有SeImpersonate和SeAssignPrimaryToken許可權

·開啟SeImpersonate許可權後,能夠在調用CreateProcessWithToken時,傳入新的Token創建新的進程

·開啟SeAssignPrimaryToken許可權後,能夠在調用CreateProcessAsUser時,傳入新的Token創建新的進程

Juicy Potato的實現流程如下:

1、載入COM,發出請求,許可權為System

在指定ip和埠的位置嘗試載入一個COM對象。

RottenPotatoNG使用的COM對象為BITS,CLSID為

可供選擇的COM對象不唯一,Juicy Potato提供了多個,詳細列表可參考如下地址:

https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md

2、回應步驟1的請求,發起NTLM認證

正常情況下,由於許可權不足,當前許可權不是System,無法認證成功。

3、針對本地埠,同樣發起NTLM認證,許可權為當前用戶

由於許可權為當前用戶,所以NTLM認證能夠成功完成。

RottenPotatoNG使用的135埠。

Juicy Potato支持指定任意本地埠,但是RPC一般默認為135埠,很少被修改。

4、分別攔截兩個NTLM認證的數據包,替換數據,通過NTLM重放使得步驟1(許可權為System)的NTLM認證通過,獲得System許可權的Token

重放時需要注意NTLM認證的NTLM Server Challenge不同,需要修正。

5、利用System許可權的Token創建新進程

如果開啟SeImpersonate許可權,調用CreateProcessWithToken,傳入System許可權的Token,創建的進程為System許可權。或者,如果開啟SeAssignPrimaryToken許可權,調用CreateProcessAsUser,傳入System許可權的Token,創建的進程為System許可權

註:詳細說明可參考之前的文章《滲透技巧——Windows Token九種許可權的利用》

利用的關鍵:

當前用戶支持SeImpersonate或者SeAssignPrimaryToken許可權

以下用戶具有該許可權:

·本地管理員組成員和本地服務帳戶

·由服務控制管理器啟動的服務

·由組件對象模型 (COM) 基礎結構啟動的並配置為在特定帳戶下運行的COM伺服器

針對提權的話,主要是第三類用戶,常見的為LocalService用戶,例如IIS和者sqlserver的用戶

0x03 枚舉可用COM對象的方法

Juicy Potato提供了枚舉可用COM對象的方法,步驟如下:

1、獲得可用CLSID的列表

使用GetCLSID.ps1,地址如下:

https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1

註:使用時同級目錄下需要包含支持文件.utilsJoin-Object.ps1

執行成功後生成文件CLSID.list和CLSID.csv

2、使用批處理調用juicypotato.exe逐個測試CLSID

批處理地址如下:

https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat

juicypotato.exe的參數如下:

juicypotato.exe -z -l !port! -c %%i >> result.log

·-z表示測試模式,只驗證Token,不使用Token創建進程

·-l為埠,起始為1000,每次循環加1

·-c為從文件CLSID.list獲得的CLSID

Juicy Potato已經測試了如下Windows系統:

·Windows 7 Enterprise

·Windows 8.1 Enterprise

·Windows 10 Enterprise

·Windows 10 Professional

·Windows Server 2008 R2 Enterprise

·Windows Server 2012 Datacenter

·Windows Server 2016 Standard

我在測試的過程中,在Server2012下執行GetCLSID.ps1時會報錯,如下圖

出錯在位置在.utilsJoin-Object.ps1

這裡給出一種修改方法:

1、枚舉所有滿足條件的CLSID

powershell代碼如下:

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | Out-Null

$CLSID = Get-ItemProperty HKCR:clsid* | select-object AppID,@} | where-object {$_.appid -ne $null}

foreach($a in $CLSID)

{

Write-Host $a.CLSID

}

可以選擇將結果保存為CLSID.list

2、使用批處理調用juicypotato.exe逐個驗證

地址如下:

https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat

bat腳本不需要做修改

0x04 使用方法

1、查看當前用戶許可權,是否符合要求

whoami /priv

如果開啟SeImpersonate許可權,juicypotato的參數可以使用-t t

如果開啟SeAssignPrimaryToken許可權,juicypotato的參數可以使用-t u

如果均開啟,可以選擇-t *

如果均未開啟,那麼無法提權。

2、查看RPC默認埠是否為135

如果被修改(例如為111),juicypotato的參數可以使用-n 111

如果系統禁用了RPC,並不是一定無法提權,需要滿足如下條件:

找到另一系統,能夠以當前用戶的許可權進行遠程RPC登錄,此時juicypotato的參數可以使用-k

例如Win7、WIn8系統,默認配置下,允許135埠的入站規則即可進行遠程RPC登錄。

添加防火牆規則允許135埠入站的命令如下:

netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow

也可以選擇將防火牆關閉,可參考繞過UAC關閉防火牆的代碼:

https://github.com/3gstudent/Use-COM-objects-to-bypass-UAC/blob/master/DisableFirewall.cpp

3、根據操作系統選擇可用的CLSID

參考列表

https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md

例如測試系統Server2012,選擇CLSID為

4、選擇一個系統未佔用的埠作為監聽埠

例如,最終參數如下:

JuicyPotato.exe -t t -p c:windowssystem32cmd.exe -l 1111 -c

表示開啟SeImpersonate許可權創建進程,監聽埠1111,使用的CLSID為

0x05 限制條件

經過以上的分析,Juicy Potato的限制條件如下:

·需要支持SeImpersonate或者SeAssignPrimaryToken許可權

·開啟DCOM

·本地支持RPC或者遠程伺服器支持PRC並能成功登錄

·能夠找到可用的COM對象

0x06 防禦思路

站在防禦的角度,伺服器禁用DCOM,禁用RPC,或者為每一個COM對象配置屬性均不現實。

針對Juicy Potato的關鍵在於許可權的控制,阻止攻擊者獲得SeImpersonate或者SeAssignPrimaryToken許可權。

0x07 補充

更多學習資料:

https://bugs.chromium.org/p/project-zero/issues/detail?id=325&redir=1

0x08 小結

本文對Juicy Potato進行測試,總結使用方法,同RottenPotatoNG進行比較,分析原理,找到限制條件和防禦思路。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

淡出視線不意味威脅消除:針對主流漏洞利用工具包的分析
Linux內核exp提權實戰

TAG:嘶吼RoarTalk |