首先将qemu-mipsel-static
复制到squashfs的根目录,让我们可以正常运行程序
通过IDA的简单分析大致可以得出程序需要添加参数运行,如上图所示
而漏洞点就出现在程序调用strcpy
函数复制用户传入的参数时,造成了栈溢出的情况
而具体的溢出点,从静态的反汇编代码中看并不是很直观,所以我们可以用cyclic配合gdb 动态调试来确认。
使用下面命令来运行程序到1234端口,并加上python的cyclic
函数来生成300个有序的字符
接下来使用gdb-multiarch
来连接程序
并在gdb开始时输入
set architecture mips | 设置程序的架构为mips |
---|---|
set endian little | 设置字节序为小端序 |
target remote :1234 | 连接远程的主机端口 |
输入c运行程序可以看到程序直接断到了0x63616162
处也就是我们填充的字符串“baac”
最后使用cyclic命令可自动计算出溢出位为204
,便可以控制程序的pc寄存器
可以控制pc寄存器,便意味至我们可以让其直接运行到程序中的dat_shell
函数上并getshell
但是并不能控制pc直接跳转到0x400950
处,因为会让直接报错,出现内存错误
所以控制程序到0x400958
即可,继续运行程序,修改payload如下
❯ sudo chroot . ./qemu-mipsel-static ./pwnable/Intro/stack_bof_01 "$(python -c "from pwn import *;print 'A'*204 + p32(0x40095c)")"
至此完成该程序的栈溢出漏洞利用