墨西哥同学周末很郁闷的在宾馆上网,发现youtube被ban了,于是写个了tool解决这个问题。顺带想到了一种利用 google 统计的漏洞,写在这里了
http://sirdarckcat.blogspot.com/2009/04/how-to-use-google-analytics-to-dos.html
这个问题实际上是由于 webserver 的 request field limit 造成的。
当 http request header 过长时,webserver 会产生一个400 或者 4xx 错误
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.
如果这些超长数据保存在cookie中,或者能够让用户每次访问的http 头都超长,就会导致用户一直都无法访问该域名,也就是dos了。
sirdarckcat 发现在 google 的统计页面中存在一个 set-cookie 的地方没有控制,类似的地方还有 搜索引擎的参数会导致 referer 过长
这些用户能够控制的地方都会导致 http request field 超长,从而导致服务器返回一个 server limit 的错误.
每个 webserver 之间都有点差异, apache 可能是 8192 字节,具体可以参考这里:
http://apache.active-venture.com/mod/core6.htm
茄子下午测试了一下,发现在IE 8 中可以增加50个 cookie,由于每个cookie的限制是 4k (key, value 对),所以IE8 支持的cookie大小为 204k。 这也是IE 8新增的,以前没这么大。不过这些都远远超过了一般的webserver的默认 server limit 值
btw: apache 对 http request body 的limite 默认是 2G.
值得注意的是,使用XSS,将可以写cookie,从而导致这种 server limit dos 攻击。
我POC了一下:
<script language="javascript"> alert(document.cookie); var metastr = "AAAAAAAAAA"; // 10 A var str = ""; while (str.length < 4000){ str += metastr; } alert(str.length); document.cookie = "evil3=" + "<script>alert(xss)</script>" +";expires=Thu, 18-Apr-2019 08:37:43 GMT;"; // 一些老版本的webserver可能在这里还会存在XSS document.cookie = "evil1=" + str +";expires=Thu, 18-Apr-2019 08:37:43 GMT;"; document.cookie = "evil2=" + str +";expires=Thu, 18-Apr-2019 08:37:43 GMT;"; alert(document.cookie); </script>
运行这个脚本后,会在当前域下植入3个cookie,总长度超过8192字节, 之后再请求该域就会无法访问了。
因为是 stored cookie, 所以会导致该用户在清理cookie前一直都无法访问该网站。
对于互联网网站来说,用户才是最重要和最宝贵的资源,哪怕用户的帐户被盗了,对于互联网公司的的损失可能都及不上用户无法访问网站造成的损失大。
而使用 XSS WORM 或者是 威力比较大的 XSS, 可以轻易的造成数千、数万的用户无法访问网站!
摘自:http://hi.baidu.com/aullik5/blog/item/6947261e7eaeaac0a7866913.html