Potato家族本地提權分析

SecIN社群發表於2020-12-01

在實際滲透中,我們用到最多的就是Potato家族的提權。本文著重研究Potato家族的提權原理以及本地提權細節

1.利用Potato提權的是前提是擁有SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege許可權,以下使用者擁有SeImpersonatePrivilege許可權(而只有更高許可權的賬戶比如SYSTEM才有SeAssignPrimaryTokenPrivilege許可權):

本地管理員賬戶(不包括管理員組普通賬戶)和本地服務賬戶

由SCM啟動的服務
PS:本機測試時即使在本地策略中授予管理員組普通使用者SeImpersonatePrivilege特權,在cmd.exe中whoami /priv也不顯示該特權,且無法利用;而SeAssignPrimaryTokenPrivilege特權則可以正常授予普通使用者
2.Windows服務的登陸賬戶

Local System(NT AUTHORITY\SySTEM)

Network Service(NT AUTHORITY\Network Service)

Local Service(NT AUTHORITY\Local Service)
也就是說該提權是

Administrator——>SYSTEM

Service——>SYSTEM
服務賬戶在windows許可權模型中本身就擁有很高的許可權
在實際滲透過程中,拿到webshell下,使用者許可權是IIS或者apache,或通過SQLi執行xp_cmdshell,此時手裡的服務賬戶在進行操作時是低許可權賬戶,而使用該提權手法可以直接獲取SYSTEM許可權
3.windows token
windows token是描述安全上下文的物件,使用者登陸後系統就會生成token,建立新程式或新執行緒時這個token會不斷口碑
Token成員

使用者賬戶的(SID)
使用者所屬的組的SID
用於標識當前登陸會話的登陸SID
使用者或使用者組所擁有的許可權列表
所有者SID
所有者組的SID
訪問控制列表
訪問令牌的來源
主令牌/模擬令牌
限制SID的可選列表
模擬等級:
     Anonymous: server無法模擬或識別client
     Identification: 可識別client的身份和特權,不能模擬
     Impersonation: 可在本地系統模擬
     Delegation: 可在遠端系統上模擬
C:\WINDOWS\system32>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                  Description                                 State  
=============================== =========================================== =======
SeAssignPrimaryTokenPrivilege   Replace a process level token               Enabled
SeImpersonatePrivilege          Impersonate a client after authentication   Enabled

當使用者具有SeImpersonatePrivilege特權,則可以呼叫CreateProcessWithTokenW以某個Token的許可權啟動新程式
當使用者具有SeAssignPrimaryTokenPrivilege特權,則可以呼叫CreateProcessAsUserW以hToken許可權啟動新程式

1.HOT Potato(需要等待windows update)
repo: https://github.com/foxglovesec/Potato
DBNS欺騙,WPAD和Windows update服務
原理:
(1)通過HOST-DNS使UDP埠耗盡——NBNS
(2)通過fake WPAD prxy Server(劫持http)
IE –http://Wpad/Wpaddat 重新整理WPAD檔案可能需要30-60分鐘
(3)HTTP>SMB NTML Relay(302-http://127.0.0.1/GETHASHSxxxx& #8221;-響應401是NTML身份驗證請求,當是Windows Update服務請求時候,此命令將以“NT AUTHORITY \ SYSTEM”特權執行)

2.Rotten Potato
repo: https://github.com/foxglovesec/RottenPotato
它是通過DCOM call來使服務向攻擊者監聽的埠發起連線並進行NTLM認證,需要SelmpersonatePrivilege許可權

3.Jucy Potato(Rotten Potato的加強版)
repo: https://github.com/ohpe/juicy-potato
需要Selmpersonate、SeAssignPrimaryToken 兩個許可權

本地支援RPC或遠端伺服器支援RPC並能成功登陸
使用者支援Selmpersonate或SeAssignPrimaryToken許可權
開啟DCOM
可用的COM物件
常用:
JuicyPotato -p "whoami /priv"
4.Ghost Potato
repo: https://github.com/Ridter/GhostPotato
利用CVE-2019-1384(Ghost Potato) Bypass MS-08068
原理:
(1)主機A向主機B(訪問|\B)進行SMB認證的時候,將pszTargetName設定為cifs/B,然後在type 2拿到主機B傳送Challenge之後,在lsass裡面快取(Challenge,cifs/B).

(2)然後主機B在拿到主機A的type 3之後,會去lsass裡面有沒有快取(Challenge,cifs/b),如果存在快取,那麼認證失敗。

(3)這種情況底下,如果主機B和主機A是不同的主機的話,那Isass裡面就不會快取 (Challenge,cifs/B).如果是同- -臺主機的話,那Isass裡面肯定有快取,這個時候就會認證失敗。
(4)繞過了快取的限制,因為lsass中的快取,在300s後會自動消失,315s後在傳送Type3

5.Pipe Potato
攻擊者通過pipeserver.exe註冊一個名為pipexpipespoolss的惡意的命名管道等待高許可權使用者來連線以模擬高許可權使用者許可權,然後通過spoolssClient.exe迫使system使用者來訪問攻擊者構建的惡意命名管道,從而模擬system使用者執行任意應用程式
原理:
(1)呼叫CreateN amedPipe()建立一個命名管道
(2)呼叫ConnectNamedPipe() 接受該命名請求連線
(3)迫使高許可權程式連線該命名管道並寫入資料
(4)呼叫ImpersonateNamedPipeClient()派生 一個高許可權程式的客戶端

衍生版本:
PrintSpoofer
repo:
https://github.com/itm4n/PrintSpoofer
利用spoolsv.exe程式的RPC伺服器強制Windows主機向其他計算機進行身份證驗證
需要SelmpersonatePrivilege 、SeAssignPrimaryToken許可權

6.Sweet Potato(Juicy土豆的重寫)
repo: https://github.com/CCob/SweetPotato
COM/WinRM/Spoolsv的集合版,也就是Juicy/PrintSpoofer
從Windows 7到windows10/windows server2019的本地服務到system特權升級

Potato提權原理簡單來說就是如下三條:
(1)誘使 “SYSTEM” 賬戶通過NTLM向控制的TCP節點進行身份驗證
(2)以本地協商 “NT AUTHORITY \ SYSTEM” 賬戶的安全令牌進行NTLM Relay
(3)模擬剛剛協商的令牌,達到提權的目的

https://www.anquanke.com/post/id/204510
https://www.t00ls.net/articles-56281.html
https://docs.ioin.in/writeup/tools.pwn.ren/_2016_01_17_potato_windows_html/index.html
https://foxglovesecurity.com/2016/01/16/hot-potato/

相關文章