Windows原理深入學習系列-特權
- 2022 年 3 月 11 日
- 筆記
- Windows原理深入學習系列
這是[信安成長計劃]的第 21 篇文章
0x00 目錄
0x01 介紹
0x02 結構分析
0x03 進程注入測試
0x04 參考文章
0x01 介紹
在 Token 當中還存在一個特別重要的內容——Privileges,它也是許可權檢查中的一個,當用戶去執行一些特權操作的時候,會檢查這個位置,看是否有執行的許可權。
通過濫用一些特權指令,可以達到許可權提升等目的,最常見的一個特權就是 SeDebugPrivilege,除此之外,還有很多的特權

這些許可權都可以通過 AdjustTokenPrivileges 來提升許可權,程式碼可以參考微軟給的例子
//docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--
可以在命令行中查看當前所擁有的特權

其中 SeChangeNotifyPrivilege 是默認會啟用的一個特權,即使是 Low 完整性等級的也會有這個特權

0x02 結構分析
可以在 Windbg 當中查看到一下,就用剛剛啟動的 cmd-low.exe 來進行
查看它的 TOKEN 結構

可以看到在 0x40 的位置就是 Privileges,繼續看它的結構

這三個值的每一位都代表著一個許可權,我們重點要看的是 Present 和 Enabled,Present 決定了哪些位是當前可以用,Enabled 則決定了是否啟用
可以看到當前是有五個許可權位的,在根據上面的 Enabled 可以知道,只有一個許可權位是打開的

那這每一位到底代表著什麼特權,我沒有在微軟的文檔中找到描述,但是在 Windbg 中找到了另外的方案
我們使用 !token 命令讓 Windbg 自己解析一下,可以看到有五個許可權位,並且只有一個是啟用的,數位數也剛好與上面所解析到的一致

既然通過這樣的方法可以知道位置和對應的許可權,那麼就可以通過全部啟用,然後再讓 Windbg 來進行解析,就可以得到所有的許可權位了

然後就可以看到所有的許可權位和對應的許可權了

在查資料的時候,還發現了一個情況,在 AdjustTokenPrivileges 的時候,會進行額外的檢查,所能啟用的許可權與進程的完整性掛鉤了

文章我貼到最後的參考鏈接當中
0x03 進程注入測試
在正常情況下,我們當前作為低完整性等級是不能夠注入高完整性等級的進程的,在之前的文章中也已經測試過了

在 OpenProcess 的時候就直接出問題了,這是符合我們的預期的

但是在 OpenProcess 當中還有這樣的一句話,如果給了 SeDebugPrivilege 許可權,那麼就會直接授予

這裡為了方便起見,直接使用 Windbg 來進行修改

可以看到確實啟用了

然後再進行注入,可以發現成功了

如果將其注入到 winlogon 進程當中,再創建一個 cmd,因為繼承關係,我們也就擁有了 system 許可權

0x04 參考文章
1.//docs.microsoft.com/en-us/windows/win32/secbp/changing-privileges-in-a-token
2.//docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants
3.//docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--
4.//docs.microsoft.com/en-us/windows/win32/secauthz/privileges
5.//book.hacktricks.xyz/windows/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
6.//github.com/gtworek/Priv2Admin
7.//showlinkroom.me/2020/05/02/Windows-Via-C-C-note-4-2/
9.//docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess

