exploitation
Fuzzy Security 第三部分教學,主要就是如何利用 SEH 機制來 exploit
2020-2-19 :從頭再看過後發現網路上的說法不太一致,我覺得還是要看具體狀況再覺得怎麼覆蓋…,光是 fuzzy security 、 aaaddr 大大、 CSDN 上的說明都有些出入。
SEH 簡單來講就是 ms 為 exception 狀況時可以撰寫處理程序的機制,因為 exception 情況有不少種,所以針對每個 function 內不同的 exception handler 用 linked list 串連,如果遇到 overwrite return address 會觸發 SEH 則再覆蓋掉 SEH address ,此時程式就會執行已經被我們覆蓋掉的 fake SEH ,這就是 SEH基本原理。
基本上跟第一篇差不多,但這次用 DVD X Player 5.5 Pro 來當 target ,我就不贅述
因為這次不是 remote target ,需要 victim 去手動打開文件來 exploit ,操作上比較麻煩一點:
這邊跟以前差不多,就是放 cyclic 當 payload 交由程式去計算長度,但是有一點非常重要,要用 metasploit 的 pattern create 去弄出一個 cyclic 不能直接用 pwntools 的,我猜這跟 mona 的 code 有關
但是很不幸的,我的 pattern_create.rb 卡在一個奇怪的問題生不出 cyclic ,所以上網找了 online 版的:
Overflow Exploit Pattern Generator - Online Tool
1. 首先透過上面的網址(或 pattern_create ) 來生出個 100 bytes 的 payload
2. 用 python 生出帶有 cyclic 的 plf 檔案:
!mona findmsp
主要關注的就是 offset ,代表幾個 byte 後會蓋到 nseh
這邊我發現教學和實際跑出來的結果不大一樣,我的出來是 nSEH 教學的則是 SEH ,反正這邊要自己注意
到這邊基本可以確定 SEH 的位置
把上面的 payload 改下, 前 608 照樣塞 padding ,後面開始就是 nseh, seh ,首先 exception handling 會先給 seh , 如果 seh 無法 handle 再交由 nseh ,所以第一個執行的是 seh
seh 可以被我們蓋到要好好利用,考慮到進入 exception 階段有些 register 會清空為 0 無法利用 jmp esp ,這樣無法確定 shellcode 地址讓我們跳過去,但是我們可以利用 nseh 地址在 esp + 8 這個特性,利用 pop; pop; ret
gadget 放在 seh 並且在 nseh 填上一小段 jmp code 跳到 shellcode 上
找 pop pop ret 的方法:
!mona seh
就會出現一堆藏在各種 dll 內的 gadget ,挑個能用不會 ASLR 的即可
nseh 的 \xeb\x06\x90\x90
前兩個是 jmp 到 6byte 之後, \x90 則是 padding
前面補上大概 20 bytes 的 nop 後面就 shellcode
照舊:
msfvenom -a x86 --platform -p windows/exec CMD='calc.ece' -b '\x00\x09\x0a\x0d\x1a\x20' --format python
如此這次的利用就算結束了~