日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

10-调用门(有参)实验

發布時間:2023/12/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10-调用门(有参)实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇重點講解了沒有參數的調用門實驗,本節講解有參數的調用門實驗。

1. 編寫R0函數

int g_a, g_b, g_c; __declspec(naked) void getParam(int a, int b, int c) {__asm {// int 3 // 取消注釋可以在WinDbg中看R0棧數據pushad // 0x20 Bpushfd // 0x04 B// .- 8 個通用寄存器和標志寄存器占用大小// | .- cs 和 eip 占用大小// | |mov eax, [esp+0x24+0x08+0x08] // 參數 amov g_a, eaxmov eax, [esp+0x24+0x08+0x04] // 參數 bmov g_b, eaxmov eax, [esp+0x24+0x08+0x00] // 參數 cmov g_c, eaxpopfdpopadretf 0x0c} } int main(int argc, char* argv[]) {// 構造cs:eipchar cs_eip[6] = {0, 0, 0, 0, 0x48, 0};__asm {push 1push 2push 3call fword ptr [cs_eip];}printf("g_a = %d\ng_b = %d\ng_c = %d\n", g_a, g_b, g_c);return 0; }

2. 記錄getParam函數地址

可以看到地址為 0x00401020

3. 構造帶3個參數的調用門描述符

調用門描述符結構:| 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的位置。

4. 執行結果

5. 查看R0棧數據

這里需要取消 int 3那行注釋,這樣會在 WinDbg 下中斷??梢钥吹紺S/SS都已經是R0的段了,esp也指向了高2G的地址。(為什么會這樣?CPU需要始終保持 cs 中的 CPL 和 ss 中的 CPL 一致)

可以看到這時候 esp 的值為 0xb2391dc4,去看一下棧內存數據

6. 總結

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

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

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

總結

以上是生活随笔為你收集整理的10-调用门(有参)实验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。