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漏洞挖掘技术》
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值