這是[信安成長計劃]的第 21 篇文章
0x00 目錄
0x01 介紹
0x02 結構分析
0x03 程式注入測試
0x04 參考文章
0x01 介紹
在 Token 當中還存在一個特別重要的內容——Privileges,它也是許可權檢查中的一個,當使用者去執行一些特權操作的時候,會檢查這個位置,看是否有執行的許可權。
通過濫用一些特權指令,可以達到許可權提升等目的,最常見的一個特權就是 SeDebugPrivilege,除此之外,還有很多的特權
這些許可權都可以通過 AdjustTokenPrivileges 來提升許可權,程式碼可以參考微軟給的例子
https://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.https://docs.microsoft.com/en-us/windows/win32/secbp/changing-privileges-in-a-token
2.https://docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants
3.https://docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--
4.https://docs.microsoft.com/en-us/windows/win32/secauthz/privileges
6.https://github.com/gtworek/Priv2Admin
7.http://showlinkroom.me/2020/05/02/Windows-Via-C-C-note-4-2/