Windows核心 (7)呼叫門提權 無參

2022-07-02 13:48:08 字數 1696 閱讀 1539

對呼叫門的呼叫可以訪問與當前**特權相同或者特權更高的**段中的過程。

指令格式:call cs:eip(eip是廢棄的)

執行步驟:

根據cs的值 查gdt表,找到對應的段描述符 這個描述符是乙個呼叫門.

在呼叫門描述符中儲存另乙個**段段的選擇子.

選擇子指向的段 段.base + 偏移位址 就是真正要執行的位址.

p=1 s=0 type = 1100 是乙個可用的門描述符

offset存的是eip

segment selector是另乙個**段的段選擇子

查gdt表內容

看到8003f048處是一串0 我們要把門描述符寫在這個位址

為了使用呼叫門提權 我們需要建立乙個門描述符

該呼叫門描述符的偏移字段指向我們定義的函式,提權後該函式的執行許可權就能變成0環

該呼叫門描述符的段選擇子要指向某個系統**段,這裡選擇8003f008

則該選擇子要設定為00001000 = 0x8

該呼叫門的描述符中dpl設為3 p位為1 s位為0 type固定為0xe 這兒是無參呼叫 所有高4位元組的低8位設定為0

除偏移欄位外 呼叫門描述符暫時為0000ec00 00080000

接下來確定函式的位址

進入反彙編 檢視函式位址

構造完整的呼叫門描述符0040ec00 00081020並寫入8003f048

回到程式 開始除錯

我們可以看到呼叫前esp = 0012ff28 cs = 001b ss = 0023

繼續執行 程式斷在了int 3

可以看到此時的eip已經成了401020 說明確實跳轉到了我們定義的函式裡

cs = 0x8是我們選擇的**段的段選擇子 ss = 0x10和之前看到的0x23不同 確實導致了堆疊切換

至此 我們成功的通過了呼叫門,呼叫了我們定義的函式

現在 開啟記憶體視窗,驗證一下與之前畫的跨段並提權的堆疊圖是否正確

[esp]儲存的是返回位址 [esp-4]是呼叫者的cs也就是1b [esp-8]是三環的esp [esp-c]是 0x23是原來的ss與堆疊圖相同

27 通過呼叫門實現提權

參考資料 9 呼叫門 無參 在之前的學習中,jmp far指令實現 跨段的本質是修改cs段暫存器,並不會改變程式的特權級別 即修改cpl的值 如果我們即想要實現 跨段和提權的話,就需要用到呼叫門。呼叫門是cpu提供的乙個功能,它允許乙個3環 cpl 3 的程式通過這扇 門 來修改cs段暫存器並實現提...

windows基礎提權

提到system許可權 甚至讓他變成你的肉雞 我們了解一下windows下面有那些使用者 guests是使用者最低的許可權 而且一般是被禁用的 user許可權也很低 連關機都不行 還有window系統內建使用者組 只對本站的主目錄有讀寫修改的許可權 net user 顯示你當前系統有那些使用者賬號 ...

Windows令牌竊取提權

令牌 token 是系統的臨時秘鑰,相當於賬號和密碼,用來決定是否允許這次請求和判斷這次請求是屬於哪乙個使用者的。它允許你在不提供密碼或其他憑證的前提下,訪問網路和系統資源,這些令牌將持續存在於系統中,除非系統重新啟動。令牌最大的特點就是隨機性,不可 黑客或軟體無法猜測出令牌。假冒令牌可以假冒乙個網...