Windows原理深入學習系列-特權

信安成長計劃發表於2022-03-11

這是[信安成長計劃]的第 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

5.https://book.hacktricks.xyz/windows/windows-local-privilege-escalation/privilege-escalation-abusing-tokens

6.https://github.com/gtworek/Priv2Admin

7.http://showlinkroom.me/2020/05/02/Windows-Via-C-C-note-4-2/

8.https://paper.seebug.org/1743/

9.https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess

相關文章