MIPS架构下缓冲区溢出实战(IDA版)

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MIPS架构下缓冲区溢出实战(IDA版)相关的知识,希望对你有一定的参考价值。

我们先分析源代码大概掌握程序流程,之后通过IDA调试找到具体偏移,最后配合MIPSROP插件组合有用的指令进行利用。
学习了《mips基础》实验后,我们来进行缓冲区溢出实战吧。
源码在vuln_system.c里
在这里插入图片描述

通读后,可以知道逻辑很简单,就是从文件paswd中读取密码,如果密码为adminpwd则调用system执行系统命令ls –l,否则提示报错后退出
编译
在这里插入图片描述

注意到源程序里main中的buf大小为256字节,我们这里直接写600个A到passwd,看能否溢出,能否劫持pc
在这里插入图片描述

尝试执行,报错了
在这里插入图片描述

配合ida动态调试
在这里插入图片描述

f9执行,报错
在这里插入图片描述

点击ok后可以看到崩溃现场
在这里插入图片描述

接下来我们需要确定偏移,使用随机生成字符的脚本生成600字节到passwd
在这里插入图片描述

再次附加调试

在这里插入图片描述在这里插入图片描述

可以看到pc值为6e37416e,即字符串n7An
根据字符串找到偏移
在这里插入图片描述

也就说填充412字节后可以劫持pc,412对应16进制为0x19c,我们先用BBBB测试
在这里插入图片描述

ida进行动态调试
在这里插入图片描述在这里插入图片描述

可以看到我们成功使pc指向了0x42424242,也就是BBBB

在任务三里我们将会使用到ROP技术,具体技术可以学习实验室开设的课程《
高级栈溢出技术—ROP实战》(http://www.hetianlab.com/cour.do?w=1&c=CCID31b0-fe03-4277-8e2f-504c4960d33f)
接下里进入攻击阶段了。我们这里通过构造合适的ROP chain来利用。关于ROP的具体技术可以去学习实验室相关课程。
先要明确,我们最后的目的是什么,我们最终的目的是跳到do_system_0函数,执行命令。
之前在源码中看到:
在这里插入图片描述在这里插入图片描述

传入两个参数,执行的ls –l作为第二个参数传入。正常情况下,buf内容校验正确则执行。我们站在攻击者的角度来思考,是否能够控制第二个参数,这样就能达到任意命令执行的效果了。
根据mips的传参约定,第二个参数使用 a 1 进 行 传 递 , 所 以 只 要 将 a1进行传递,所以只要将 a1a1传入命令字符串地址即可。
接下来使用misprop插件
在这里插入图片描述

如果不熟悉用法可以使用下图的命令进行查看
在这里插入图片描述

我们这里直接找到合适的指令

在这里插入图片描述
在这里插入图片描述

找到了一个可以构造的地址0x401f80
由var_40=-0x40,var_4=-4,可得实际上图中的两句汇编等价于
addiu a 1 , a1, a1,sp,0x18
lw $ra,0x54
接下来再找到要跳转的do_system_0的地址为0x400370
在这里插入图片描述

综上,可以构造passwd了。
填充A一直到0x19C(412字节),然后填入0x401f80(gadget起始地址,pc会被劫持为该地址),填充0x18个A,然后填入命令字符串(根据addiu a 1 , a1, a1,sp,0x18),再经过0x54的填充,写入do_system的地址0x400370,然后就可以实现任意命令执行了
完整的脚本在exp.py
注意需要把下图两个地址改为gadget起始地址和do_system地址
在这里插入图片描述

填充passwd
在这里插入图片描述

执行,成功利用了该漏洞达到了命令执行的效果
在这里插入图片描述

参考:

  1. MIPS Instruction Reference
    http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html
  2. 《揭秘家用路由器0day漏洞挖掘技术》

以上是关于MIPS架构下缓冲区溢出实战(IDA版)的主要内容,如果未能解决你的问题,请参考以下文章

kali实战-缓冲区溢出

Modbus Slave缓冲区溢出漏洞CVE-2022-1068分析与复现

《黑客攻防技术-系统实战》--利用缓冲区溢出执行任意代码

缓冲区溢出 是啥意思?原理性讲解下

--栈溢出2

计算机高手大神来啊啊啊!啥是溢出,它对二进制有何影响呢?谢谢啦!详细点哦!