适用条件:程序text段具备rwx权限或者能用修改权限的函数修改对应权限
一般要是程序开启了pie,如果不泄漏地址的情况下就算text段是rwx,但是没有会造成缓冲区溢出的漏洞函数,怎么劫持程序执行流呢?下面举个例子,先看程序:
main函数:
首先scanf返回的是正确格式化输入的个数,如果v3等于3只需要参数中三个数都是整数,但是v6明显是int64类型可以发生数组越界,result是bss上的内容,最后是显式调用exit(call exit)
我们可以通过result加上v6偏移去覆盖任意位置(但是程序开启了pie)
为了达到劫持程序执行流预留后门函数
现在我们要做的就是不泄漏地址,不爆破的情况下劫持执行流。先看exp:
最终拿到flag
然后我们来分析一下exp
首先通过pwntools的API接口把加载到内存中的exit地址里面的call exit改成call win
然后我们读取elf的exit地址(相对地址,因为有pie)填充成8字节,再转成整数
然后通过整数溢出计算相对地址
这样是不是就很巧妙的绕过了pie的随机化了,接下来发送数据就可达到劫持程序执行流,而且不用泄漏地址,靠相对地址攻击即可达成。
原文始发于微信公众号(由由学习吧):篡改内存elf文件getshell
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论