Intigriti的2020年5月XSS挑战
字数 1274 2025-08-20 18:18:23

Intigriti 2020年5月XSS挑战解析与利用

挑战概述

Intigriti的2020年5月XSS挑战是一个专门针对Firefox浏览器的跨站脚本攻击挑战。挑战要求参赛者在特定页面上执行XSS攻击,利用了Firefox浏览器在处理URL路径时的特殊行为。

关键发现

1. 路径覆盖漏洞

访问https://challenge.intigriti.io/a/时,浏览器会将a/视为目录,并尝试从该目录加载相对子资源:

  • 原本应加载/style.css/widgets.js
  • 现在尝试加载/a/style.css/a/widgets.js

2. 开放重定向漏洞

https://challenge.intigriti.io//<location>是一个开放重定向端点:

  • 例如:https://challenge.intigriti.io//physuru.github.io会重定向到https://physuru.github.io
  • 访问https://challenge.intigriti.io//(双斜杠后无内容)则加载默认页面

3. Firefox特有的路径遍历行为

Firefox在处理路径遍历时有两个特殊行为:

  1. 当点(.)位于路径末尾时,不会删除两个点(..)和先前的路径组件
  2. 这些点中至少有一个必须是百分比编码的

例如:https://challenge.intigriti.io/abc/.%2E在Firefox中会保留尾随点和前一路径组件

漏洞利用技术

组合利用方案

结合上述发现,可以构造以下攻击URL:

https://challenge.intigriti.io//physuru.github.io%252fintigriti_may_2020_solution/.%2E

技术原理

  1. 双重编码:使用%252f(双重编码的斜杠/),因为URL会被解码两次

    • 第一次解码:%252f%2f
    • 第二次解码:%2f/
  2. 路径解析

    • 服务器端:将a/.%2E解析为..,相当于忽略这部分路径,返回默认页面
    • 浏览器端:仍从//a目录加载相对子资源,请求https://a/widgets.js并被重定向
  3. 恶意JS加载

    • 攻击者控制https://physuru.github.io/intigriti_may_2020_solution/目录
    • 在该目录下放置恶意widgets.js文件
    • 通过上述URL构造使页面加载恶意JS文件

关键注意事项

  1. HTTPS要求:重定向URL必须使用HTTPS,HTTP测试不会成功
  2. GitHub限制:不能直接使用GitHub Gists作为重定向目标
  3. Firefox专属:此漏洞利用依赖于Firefox的特定路径处理行为

防御建议

  1. 服务器端

    • 严格验证和清理URL路径
    • 避免开放重定向
    • 实施内容安全策略(CSP)
  2. 客户端

    • 保持浏览器更新
    • 注意异常URL结构
    • 使用现代XSS防护机制

总结

这个挑战展示了如何组合多个看似无害的漏洞(路径覆盖、开放重定向)和浏览器特定行为来实施XSS攻击。它强调了全面安全评估的重要性,包括考虑不同浏览器的解析差异和URL编码的复杂性。

Intigriti 2020年5月XSS挑战解析与利用 挑战概述 Intigriti的2020年5月XSS挑战是一个专门针对Firefox浏览器的跨站脚本攻击挑战。挑战要求参赛者在特定页面上执行XSS攻击,利用了Firefox浏览器在处理URL路径时的特殊行为。 关键发现 1. 路径覆盖漏洞 访问 https://challenge.intigriti.io/a/ 时,浏览器会将 a/ 视为目录,并尝试从该目录加载相对子资源: 原本应加载 /style.css 和 /widgets.js 现在尝试加载 /a/style.css 和 /a/widgets.js 2. 开放重定向漏洞 https://challenge.intigriti.io//<location> 是一个开放重定向端点: 例如: https://challenge.intigriti.io//physuru.github.io 会重定向到 https://physuru.github.io 访问 https://challenge.intigriti.io// (双斜杠后无内容)则加载默认页面 3. Firefox特有的路径遍历行为 Firefox在处理路径遍历时有两个特殊行为: 当点(.)位于路径末尾时,不会删除两个点(..)和先前的路径组件 这些点中至少有一个必须是百分比编码的 例如: https://challenge.intigriti.io/abc/.%2E 在Firefox中会保留尾随点和前一路径组件 漏洞利用技术 组合利用方案 结合上述发现,可以构造以下攻击URL: 技术原理 双重编码 :使用 %252f (双重编码的斜杠/),因为URL会被解码两次 第一次解码: %252f → %2f 第二次解码: %2f → / 路径解析 : 服务器端:将 a/.%2E 解析为 .. ,相当于忽略这部分路径,返回默认页面 浏览器端:仍从 //a 目录加载相对子资源,请求 https://a/widgets.js 并被重定向 恶意JS加载 : 攻击者控制 https://physuru.github.io/intigriti_may_2020_solution/ 目录 在该目录下放置恶意 widgets.js 文件 通过上述URL构造使页面加载恶意JS文件 关键注意事项 HTTPS要求 :重定向URL必须使用HTTPS,HTTP测试不会成功 GitHub限制 :不能直接使用GitHub Gists作为重定向目标 Firefox专属 :此漏洞利用依赖于Firefox的特定路径处理行为 防御建议 服务器端 : 严格验证和清理URL路径 避免开放重定向 实施内容安全策略(CSP) 客户端 : 保持浏览器更新 注意异常URL结构 使用现代XSS防护机制 总结 这个挑战展示了如何组合多个看似无害的漏洞(路径覆盖、开放重定向)和浏览器特定行为来实施XSS攻击。它强调了全面安全评估的重要性,包括考虑不同浏览器的解析差异和URL编码的复杂性。