MIPS缓冲区溢出利用实践

9 篇文章 0 订阅
6 篇文章 0 订阅

概要

这里写图片描述

漏洞利用开发过程

由上图可以知道,漏洞利用开发过程需要遵循以下步骤:
1.劫持PC
2.计算偏移
3.确定攻击途径
4.构建漏洞攻击途径

劫持PC

输入命令等待调试:
这里写图片描述
打开IDA附加远程进程,按F9键执行程序,程序立即崩溃,可以看出缓冲区已经溢出,此时,我们已经劫持PC.
这里写图片描述
这里写图片描述

计算偏移

在劫持PC之后,我们需要计算使用多少个字节可以使PC指向我们所期望的地址,这里使用两种方法确定偏移,其他方法大同小异:

大型字符串脚本

建立大型字符串脚本,在这些字符中任意取连续4位,这4个 字符在字符集中是唯一的,找出覆盖 到PC的4个字符在字符集中的偏移,就可以实现精确定位:
这里写图片描述
(注:貌似按照书上所说的利用patternLocOffset.py脚本生成不了==!,可能作者笔误写错了吧~~)
而后利用IDA进行附加调试,崩溃现场如图所示:
这里写图片描述
这里写图片描述
由图可以知道,劫持PC的位置在0x6E37416E,即字符串“n7An”,继续使用下面的指令搜索该 劫持PC的字符串的精确 偏移;
这里写图片描述
可以看到,填充412(0x19C)字节后可以精确劫持PC;
为类验证该值是否正确,可以构造 一个偏移数据进行测试,如下:
这里写图片描述

毫无悬念,我们成功地劫持了pc,使其指向0x42424242(BBBB)处,崩溃现场如下所示:
这里写图片描述

栈帧分析

在了解了MIPS的体系 结构堆栈布局的情况下,可以通过调用栈布局结合动态调试来确定偏移.
从buf到$ra的偏移计算如下:

offset = save_ra - buf_addr =-0x4 + 0x1A0 = 0x19c

一般漏洞攻击的途径有两种:一是命令执行,另外一种方法是执行shellcode;
这里只谈命令执行的方法:
在源程序里面有一个函数do_system_0.虽然从代码里面可以看出,do_system_0函数只能执行“ls -l”命令,但是我们可以构造一条ROP链,通过溢出漏洞调用这个函数,使得这个函数能够执行任意命令.想要构造出ROP链,首先构造出do_system_0这个函数的两个参数,将两个参数分别 装入寄存器
a0和a1,这里只需要控制寄存器$a1即可,该参数是命令的字符串地址,如下所示:
这里写图片描述
这里使用mipsrop.py搜索构造 合适的ROP链,使用如下命令:
这里写图片描述
这里写图片描述

测试

这里写图片描述
这里我使用了三个命令进行测试,发现通过漏洞溢出控制程序以后,是可以执行刚才那三个命令的!发现可以成功的利用漏洞!(后来笔者发现上面这幅图是有问题的)

这里写图片描述
上面这幅图是正确的利用结果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值