后漏洞时代,大话IE 0day揭秘

这个时代,IE远程“溢出”,已经是不能叫“溢出”的时代

一个Crash,就能崩溃IE,地址高的话,就能Execute any code!

今年2月份,出的ms9002,实际在2006年12月的时候,已经有人发现。而触发漏洞的人,只是一个写

javascript的程序员,但是他并没有对漏洞做任何的利用。


大家可以看看他当年的脚本吧:
我使用任务管理器,打开一个弹出窗口,ie内存就增加1-3m,然后关闭窗口,有时内存并不释放,有时才释放几十k。看来问题出在了内存释放上面。

      接着按内存释放这个思路,进行搜索查找方法,来进行解决这个问题。我找到一个javascript未公开的函数CollectGarbage,这个函数是用来进行内存释放的。我在所有的弹出窗口结束之前把所有的自己定义的javasctip的变量设置为null,并调用CollectGarbage函数。

      javascript中把变量设为null,javascript并不会把内存释放,当下次再次定义变量时,就会覆盖此变量所在的内存。如果不设为null,javascript再次定义变量时,会开辟一个新的内存空间。

      在使用以上处理之后,再次打开窗口,ie的内存每次还是增加1-3m,但是在关闭窗口之后,则ie会释放一定数量的内存在500k至2m。起到了一定的作用。
       由于我在页面中使用了第三方的控件,第三方的控件中的javascript中的内存是如何管理,就不是由我来控制的了。
      


1.javascript内存释放的方法示例


  把所有上级函数的参数即使设为null,并使用CollectGarbage来释放内存。  


示例
  <script>  
    
  //32M  
  function   AllocMem()  
  {  
  var   str="12345678";  
  for(var   i=3;i<24;i++)  
  str+=str;  
  return   str;  
  }  
    
  function   A(a)  
  {  
  a=null;  
  return   r;  
  function   r()  
  {  
  }  
  }  
    
    
  var   f=A(AllocMem());  
  alert(1);  
  CollectGarbage();  
  //明显,已经释放了。  
  r=null;  
  alert(2);  
  CollectGarbage();  
    
  </script>  
    
  ----------  
  里面对于内存释放的规则(脚本层)已经理解得很透了。  
  (每一层菜单分配?M的内存.对着任务管理器才看到情况)  


注:
CollectGarbage()通常会在核心推出内存,因就是IE或NS程序结束的时候才会调用.这样才是安全的  



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 1 | 引用: 0 | 查看次数: 1565
回复回复fly[2009-10-31 05:26 PM | del]
www.abysssec.com/blog/2009/08/how-to-write-browser-fuzzer/

能够fuz到很多crash的,能利用的很少
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭