0x00前言
第四部分是整数溢出 整数溢出在pwn里面也接触过 如果有一定的pwn功底的话 理解起来还是很快的
0x01漏洞原理
整数溢出的定义很好理解 因为有无符号和有符号数两种 有符号数最高位正整数置0 负数置为1 但无符号数没有这种限制 在内存中有一定的取值范围 当存储的数值超过最大值时 就会发生溢出 其实整数溢出很多时候要依赖于其他溢出 例如堆栈溢出
函数分析
TriggerIntegerOverflow
其实函数的注释已经说明的很清楚了 当我们传来的Size为0xFFFFFFFF 加上TerminatorSize的4 而Size和TerminatorSize都是ULONG型 就会造成溢出
1 | __declspec(safebuffers) |
0x02漏洞分析
我们对函数下断点
1 | bp HEVD!TriggerIntegerOverflow |
g运行之后直接断下了 应该是返回地址设置的有问题导致跳转到我们的padding里面了 我去查看了下exp 确实是类似于前面说的那样 类似于我们第一篇所说的栈溢出 将返回地址覆盖为我们shellcode的地址即可
0x03漏洞利用
利用失败了还说啥。。。。。官方的exp也是失败的。。。。分析一下吧
调用
1 | __try { |
0x04补丁分析
安全版本的检查并没有在用户传来的size上进行任何算法 则无法检查失败 不会发生溢出
0x05经验总结
这次算是没有利用成功吧 这么一说 哎挺失败的 难过 其实我还在官方的exp上纠结了很长时间 尝试着更改 是否可以利用成功 还去尝试去github上找其他人的exp 依然是利用失败了。。。。难受 希望日后有人能解决 我也不知哪里出了问题 导致官方的exp都无法利用。。。最后 感谢wjllz和0x2l师傅!!!