免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: converse
打印 上一主题 下一主题

【好玩】缓冲区溢出攻击实验 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2006-09-10 11:56 |显示全部楼层
---------[ 0x110 - execshield介绍 ]
  Redhat在Fedora Core 2以及Enterprise Linux 3 Update 3加入了exec-shield的内核补丁。该补丁的官方地址为http://redhat.com/~mingo/exec-shield/

  Execshield的目的是最大程度的防止溢出,所以他将内存中尽可能多的地方标记为不可执行的。同时他还保留了函数的返回地址,这样如果覆盖了EIP后,将探测到返回地址改变,将会出错。具体exec-shield做了什么,以及是如何实现的,请参考官方文档
  http://people.redhat.com/mingo/e ... 06US_Execshield.pdf
  http://people.redhat.com/mingo/exec-shield/docs/nonselsec.pdf

由于execshield的汗马功劳,传统的buffer overflow已经彻底失效了,因为他把shellcode放在stack中执行,而stack是不可执行的。

return into libc的方法为我们提供了一定思路,但execshield把函数的地址变成了类似
(gdb) p printf
$1 = {<text variable, no debug info>} 0x61db70 <printf>

也就是0x0061db70,而像strcpy这类函数,一遇到0字节就判断为终止,大大增加了难度

同时,因为栈不可执行,所以直接覆盖EIP为函数地址的方法也失效了。

如果利用frame faking,则可以在函数返回前跳转到另外一个地方去执行,但由于execshield禁止了内存中大多数地址的执行权限,所以.bss不行,heap也不行,stack当然更不行,那么如何找到这个合适的地方就成为了难点。同时还不能让函数返回,因为一返回就会被execshield检测到返回地址改变,会出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP