10 呼叫門(有參)實驗

2021-09-29 23:29:15 字數 1722 閱讀 5674

可以看到位址為 0x00401020

呼叫門描述符結構:

| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 位元組

|76543210|76543210|7 65 4 3210|765 43210|76543210|76543210|76543210|76543210| 位元

|-----------------|1|--|0|1100|000|-----|--------|--------|--------|--------| 佔位

|offset in segment|p|d |s|type| |param|segment selector |offset in segment| 含義

| 31-16 |p | |nums | | 15-0 |

|l |

注意有些位元位是固定的。

根據呼叫門描述符結構,可以構造出描述符 0040ec03`00081020,然後安裝到gdt表的8003f048的位置。

這裡需要取消 int 3那行注釋,這樣會在 windbg 下中斷。可以看到cs/ss都已經是r0的段了,esp也指向了高2g的位址。(為什麼會這樣?cpu需要始終保持 cs 中的 cpl 和 ss 中的 cpl 一致)

可以看到這時候 esp 的值為 0xb2391dc4,去看一下棧記憶體資料

當使用呼叫門進行提權的時候,程式由3環進入0環,這時候需要切換棧,也就是說要更改 ss 段選擇子和 esp 的值。這時候 cpu 會自動的幫我們把原始 3 環的 ss, esp, 引數(如果有的話), cs 和 eip 複製到這個 0 環棧中去。

一定要注意,這是 cpu 自動幫我們做的事情,和 os 沒有任何關係。

引起注意的地方是,切換棧,需要 0 環 ss 段選擇子和 esp ,這些值 cpu 是如何找到了呢?這個問題先放在這兒,後續文章解決會揭曉答案。這裡,只給出乙個線索——tss.

9 呼叫門(無參)

本篇,將真正的實現提權 當前特權級從 3 變為 0.當然,cpu 不會讓你就這麼簡單的從 3 環跨到 0 環。但是,cpu 又必須提供一套方法,來讓你完成這個功能。前面講過。dpl 0 的非一致 段,是絕對不允許不同特權級的程式跳轉進來。可是,我給以給你開個後門,讓你進來,然後給你最高許可權,允許你...

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

對呼叫門的呼叫可以訪問與當前 特權相同或者特權更高的 段中的過程。指令格式 call cs eip eip是廢棄的 執行步驟 根據cs的值 查gdt表,找到對應的段描述符 這個描述符是乙個呼叫門.在呼叫門描述符中儲存另乙個 段段的選擇子.選擇子指向的段 段.base 偏移位址 就是真正要執行的位址....

C 呼叫有有參有返的儲存過程

1 在sql server中建立如下的儲存過程 set ansi nulls on set quoted identifier on gocreate procedure dbo getnamebyid studentid varchar 8 studentname nvarchar 50 outp...