當前位置:
首頁 > 新聞 > 滲透技巧——Windows Token九種許可權的利用

滲透技巧——Windows Token九種許可權的利用

0x00 前言

在之前的文章《滲透技巧——從Admin許可權切換到System許可權》和《滲透技巧——Token竊取與利用》分別介紹了從admin許可權切換到system許可權和TrustedInstaller許可權的方法,其中的主要方法是利用token切換許可權。

那麼,普通用戶(或者LocalService用戶)的特殊Token有哪些可利用方法呢?能否提權?如何判斷?

本文將要結合自己的經驗,參考多個開源工具和資料,嘗試對這個技巧做總結,分享學習心得。

參考的開源工具和資料:

·Hot Potato: https://github.com/foxglovesec/Potato

·powershell版本Hot Potato: https://github.com/Kevin-Robertson/Tater

·Rotten Potato: https://github.com/breenmachine/RottenPotatoNG

·lonelypotato: https://github.com/decoder-it/lonelypotato

·Juicy Potato: https://github.com/ohpe/juicy-potato

·https://github.com/hatRiot/token-priv

·https://foxglovesecurity.com/2017/08/25/abusing-token-privileges-for-windows-local-privilege-escalation/

·https://foxglovesecurity.com/2016/01/16/hot-potato/

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

·https://foxglovesecurity.com/2017/08/25/abusing-token-privileges-for-windows-local-privilege-escalation/

0x01 簡介

本文將要介紹以下內容:

·簡要利用思路

·SeImpersonatePrivilege許可權對應的利用思路和開源代碼

·SeAssignPrimaryPrivilege許可權對應的利用思路和開源代碼

·SeTcbPrivilege許可權對應的利用思路和開源代碼

·SeBackupPrivilege許可權對應的利用思路和開源代碼

·SeRestorePrivilege許可權對應的利用思路和開源代碼

·SeCreateTokenPrivilege許可權對應的利用思路和開源代碼

·SeLoadDriverPrivilege許可權對應的利用思路和開源代碼

·SeTakeOwnershipPrivilege許可權對應的利用思路和開源代碼

·SeDebugPrivilege許可權對應的利用思路和開源代碼

0x02 簡要利用思路

1、取得了目標的訪問許可權後,查看可用許可權

whoami /priv

例如,普通用戶具有的許可權如下圖。

管理員用戶具有的許可權如下圖。

iis用戶具有的許可權如下圖。

Privilege Name項表示具有的許可權,State表示許可權的狀態,我們可以通過WinAPI AdjustTokenPrivileges將許可權設置為Disabled或者Enabled

可供參考的實現代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnablePrivilegeandGetTokenInformation.cpp

代碼實現了開啟指定許可權(SeDebugPrivilege),並且查看當前用戶名稱和具有的許可權

2、如果包含以下九個許可權,我們就可以對其進一步利用

·SeImpersonatePrivilege

·SeAssignPrimaryPrivilege

·SeTcbPrivilege

·SeBackupPrivilege

·SeRestorePrivilege

·SeCreateTokenPrivilege

·SeLoadDriverPrivilege

·SeTakeOwnershipPrivilege

·SeDebugPrivilege

註:

·iis或者sqlserver的用戶通常具有SeImpersonatePrivilege和SeAssignPrimaryPrivilege許可權

·Backup service用戶通常具有SeBackupPrivilege和SeRestorePrivilege許可權

0x03 SeImpersonatePrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L327

SeImpersonatePrivilege

身份驗證後模擬客戶端(Impersonatea client after authentication)

擁有該許可權的進程能夠模擬已有的token,但不能創建新的token

以下用戶具有該許可權:

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

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

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

通常,iis或者sqlserver用戶具有該許可權

利用思路

·利用NTLM Relay to Local Negotiation獲得System用戶的Token 可使用開源工具Rotten Potato、lonelypotato或者Juicy Potato

·通過WinAPI CreateProcessWithToken創建新進程,傳入System用戶的Token 具有SeImpersonatePrivilege許可權才能創建成功

·該Token具有System許可權

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeImpersonatePrivilege.cpp

代碼實現了開啟當前進程的SeImpersonatePrivilege許可權,調用CreateProcessWithToken,傳入當前進程的Token,創建一個進程,配合RottenPotato,可用來從LocalService提權至System許可權。

0x04 SeAssignPrimaryPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L359

SeAssignPrimaryPrivilege

向進程(新創建或者掛起的進程)分配token

通常,iis或者sqlserver用戶具有該許可權

利用思路1

·利用NTLM Relay to Local Negotiation獲得System用戶的Token

·通過WinAPI CreateProcessAsUser創建新進程,傳入System用戶的Token

·該Token具有System許可權

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeAssignPrimaryTokenPrivilege.cpp

代碼實現了開啟當前進程的SeAssignPrimaryTokenPrivilege許可權,調用CreateProcessAsUser,傳入當前進程的Token,創建一個進程,配合RottenPotato,可用來從LocalService提權至System許可權。

利用思路2

·利用NTLM Relay to Local Negotiation獲得System用戶的Token

·通過WinAPI CreateProcess創建一個掛起的新進程,參數設置為CREATE_SUSPENDED

·通過WinAPI NtSetInformationProcess將新進程的Token替換為System用戶的Token

·該Token具有System許可權

0x05 SeTcbPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L418

SeTcbPrivilege

等同於獲得了系統的最高許可權

利用思路

·調用LsaLogonUser獲得Token

·將該Token添加至Local System account組

·該Token具有System許可權

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeTcbPrivilege.cpp

代碼實現了開啟當前進程的SeTcbPrivilege許可權,登錄用戶test1,將其添加至Local System account組,獲得System許可權,創建註冊表項HKEY_LOCAL_MACHINESOFTWARE esttcb

0x06 SeBackupPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L495

SeBackupPrivilege

用來實現備份操作,對當前系統任意文件具有讀許可權

利用思路

·讀取註冊表HKEY_LOCAL_MACHINESAM、HKEY_LOCAL_MACHINESECURITY和HKEY_LOCAL_MACHINESYSTEM

·導出當前系統的所有用戶hash mimikatz的命令如下:

lsadump::sam /sam:SamBkup.hiv /system:SystemBkup.hiv

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeBackupPrivilege.cpp

代碼實現了開啟當前進程的SeBackupPrivilege許可權,讀取註冊表,將其保存成文件C:\test\SAM、C:\test\SECURITY和C:\test\SYSTEM

0x07 SeRestorePrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L528

SeRestorePrivilege

用來實現恢復操作,對當前系統任意文件具有寫許可權

利用思路1

·獲得SeRestorePrivilege許可權,修改註冊表HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options

·劫持exe文件的啟動

·實現提權或是作為後門

利用思路2

·獲得SeRestorePrivilege許可權,向任意路徑寫入dll文件

·實現dll劫持

·實現提權或是作為後門

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeRestorePrivilege.cpp

代碼實現了開啟當前進程的SeRestorePrivilege許可權,創建註冊表項HKEY_LOCAL_MACHINESOFTWARE estrestore

0x08 SeCreateTokenPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L577

SeCreateTokenPrivilege

用來創建Primary Token

利用思路

·通過WinAPI ZwCreateToken創建Primary Token

·將Token添加至local administrator組

·該Token具有System許可權

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeCreateTokenPrivilege.cpp

代碼實現了開啟當前進程的SeCreateTokenPrivilege許可權,創建Primary Token,將其添加至local administrator組,開啟SeDebugPrivilege和SeTcbPrivilege許可權

0x09 SeLoadDriverPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L626

SeLoadDriverPrivilege

用來載入驅動文件

利用思路

·創建驅動文件的註冊表

reg add hkcuSystemCurrentControlSetCAPCOM /v ImagePath /t REG_SZ /d "??C: estCapcom.sys"

reg add hkcuSystemCurrentControlSetCAPCOM /v Type /t REG_DWORD /d 1

·載入驅動文件Capcom.sys

·Capcom.sys存在漏洞,系統載入後,可從普通用戶許可權提升至System許可權,利用代碼可參考:https://github.com/tandasat/ExploitCapcom

·獲得System許可權

可供參考的測試代碼: https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeLoadDriverPrivilege.cpp

代碼實現了開啟當前進程的SeLoadDriverPrivilege許可權,讀取註冊表項hkcuSystemCurrentControlSetCAPCOM,載入驅動文件Capcom.sys

0x0A SeTakeOwnershipPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L688

SeTakeOwnershipPrivilege

同SeRestorePrivilege類似,對當前系統任意文件具有寫許可權

利用思路1

·獲得SeTakeOwnershipPrivilege許可權,修改註冊表HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options

·劫持exe文件的啟動

·實現提權或是作為後門

利用思路2

·獲得SeTakeOwnershipPrivilege許可權,向任意路徑寫入dll文件

·實現dll劫持

·實現提權或是作為後門

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeTakeOwnershipPrivilege.cpp

代碼實現了開啟當前進程的SeTakeOwnershipPrivilege許可權,修改註冊表項hklmSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options的許可權,普通用戶許可權對其具有完整操作許可權

後續的寫操作:

reg add "hklmSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options" /v takeownership /t REG_SZ /d "C:\Windows\System32\calc.exe"

0x0B SeDebugPrivilege許可權的利用思路

參考資料:

https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L736

SeDebugPrivilege

用來調試指定進程,包括讀寫內存,常用作實現dll注入

利用思路

·找到System許可權的進程

·dll注入

·獲得System許可權

可供參考的測試代碼:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnableSeDebugPrivilege.cpp

代碼實現了開啟當前進程的SeDebugPrivilege許可權,向指定進程注入dll

0x0C 小結

本文總結了普通用戶(或者LocalService用戶)Token中九種許可權的利用方法,分析利用思路,完善實現代碼。


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

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


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

不斷演變的廣告軟體——PBot
惡意宏劫持桌面快捷方式傳播後門

TAG:嘶吼RoarTalk |