搞定LINUX内核栈溢出

上一篇 / 下一篇  2007-08-12 14:04:56 / 个人分类:安全

   在昨天的测试过程中,我网上下载的代码能在SLACKWARE10(2.6.7内核)下成功溢出.但到了我的ubuntu7.04下面(2.6.20内核)却不能成功. 今天才发现不同版本的2.6内核在溢出利用方面也存在差别.2.6.7下用户态堆栈的起始地址都是固定而2.6.20内核的用户态堆栈的起始地址是随机的.每次都不一样.而且在前面故意设置了空洞.所以同样的溢出利用代码在2.6.7下成功了,在2.6.20下却失败了.并发现其实利用代码是在进入用户空间后才出错的.用户空间出错,就可以用GDB调试了.昨天没搞定的事今天接着来.
 
    为解决用户态堆栈地址随机化的问题.通过在代码中动态获取esp的值.填入利用代码中.现在可以返回到用户空间,并能够使用堆栈了.测试后发现还是不能成功得到SHELL.想了很久,后用GDB调试发现.程序在execve的时候出错了.引用了gs的值.而此时GS的值为空.导致程序出错.找到原因后.在溢出返回用户态的代码中先修复gs的值.然后才调用execve函数.总算成功溢出了.
      下次有空的时候再搞一下2.4下的溢出;2.4下没有堆栈地址随机化的问题.应该要容易一些.

TAG:

引用 删除 korzilla   /   2008-03-11 23:12:26
我在2.6.21内核上也遇到了这种情况。但我还是没看明白你的意思:(
GS寄存器要在什么时候修改呢,改成什么值?
还有,在exploit中获取的esp值到了漏洞程序中还能用吗?
请楼主指教,我的email:
korzilla@163.com
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 7491
  • 日志数: 42
  • 建立时间: 2006-09-09
  • 更新时间: 2007-11-25

RSS订阅

Open Toolbar