墨西哥同学周末很郁闷的在宾馆上网,发现youtube被ban了,于是写个了tool解决这个问题。顺带想到了一种利用 google 统计的漏洞,写在这里了
这个问题实际上是由于 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 字节,具体可以参考这里:
茄子下午测试了一下,发现在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了一下:
运行这个脚本后,会在当前域下植入3个cookie,总长度超过8192字节, 之后再请求该域就会无法访问了。
因为是 stored cookie, 所以会导致该用户在清理cookie前一直都无法访问该网站。
阅读(416) | 评论(0) | 转发(0) |