AngelBoy Windows Binary Exploitation ret2lib Writeup
Exploitation
這題要練習的事 windows 的 ret2lib,首先看一下 source code:
1 | //g++ -g -o ret2lib.exe ret2lib.cpp |
首先一開始一樣會先印出 main 的位置,我們可以透過 windbg 將 main 的位置減掉 binary base 得到 offset,之後就可以透過一開始印出的 main 減掉 offset 來得到 binary base 了,如下:
這邊得到 offset 是 0x1485
IAT 的 offset 可以透過把我們的 exe 丟進去 PE-bear 中的 Optional Header 的最底下會看到:
IAT 的 offset 在這邊可以看到是 0x8268,拿到 IAT 的 offset 後,我們就可以在 windbg 看一下 IAT 上面有什麼,我們用 dqs 來搭配 symbol 解讀 function name:
我們這邊隨便挑一個順眼的來用例如說 GetLastErrorStub 這邊是 IAT + 0x10,然後我們接著打開 DLL Export Viewer 來看他的 offset 是多少,結果做到這邊之後我發現我 dqs 出來之後的好像都是跳板函數居多,沒辦法在 DLL Export Viewer 裡面搜尋到,於是查了資料後發現可以用 lm vm kernel32
的指令看到 kernel32 當前的 base 然後我們就可以減出 offset 了,操作如下:
到這邊也可以在 exploit 先把 kernel32 的 base 印出來檢查對不對。
接著我們就可以透過 DLL Explort Viewer 去查 WinExec 的 offset 了,不過這邊要提醒的一點是跟剛剛一樣我們需要注意對齊的問題,因為如果這邊直接去執行,會發現程式死在 xmmword 的地方,這時我們可以補一個 ret gadget 來補齊這個 8 bytes。
最後我們會發現 WinExec 的參數還沒有設定,如果我們去執行後就會發現 WinExec 的參數 rcx 會是我們剛剛的 name,因為程式最後用 getname
把參數設定成 name 了,所以我們這邊就在 name 填上 cmd.exe\00
就行了。
Exploit
1 | from pwn import * |
執行結果:
- Title: AngelBoy Windows Binary Exploitation ret2lib Writeup
- Author: kazma
- Created at : 2024-11-19 00:29:07
- Updated at : 2024-11-19 01:45:56
- Link: https://kazma.tw/2024/11/19/AngelBoy-Windows-Binary-Exploitation-ret2lib-Writeup/
- License: This work is licensed under CC BY-NC-SA 4.0.