在解释这个 bug 之前,我想解释一下应用程序的易受攻击部分。
此应用程序用于使用外部数据创建包含图像、视频和动态图形的仪表板。
Dashboard 示例如下所示:
此应用程序的主要流程是:
-
创建控制面板 -
用一些图像、视频和带有数据的图形对其进行编辑。 -
省省吧 -
将其导出为 PDF 或 PNG
Dashboard 功能依赖于 javascript 来检索 Dashboard 的 JSON 结构。
从 /JSONDATA 检索的数据,用于绘制仪表板
{"title":"Hello","items":[{"type":"imageobject","url":"https://brrrr",},{"type":"graphic-type","data":"","row":""},...]}
可以修改此数
据,以相同的数据格式向同一 API 端点发送申请,仪表板数据可以包含具有多个参数的多种数据类型
此仪表板可以导出为 PDF 或 PNG。
检测和利用 Headless 浏览器
将内容导出为 PDF 的一种常见方法是通过 Headless 浏览器
Headless Browser 是一种没有加载网页的用户界面的浏览器,它可用于自动执行一些 Web 任务。
一、什么是无头浏览器?
无头浏览器是一种在无用户界面的情况下运行的浏览器,它具备常规浏览器的所有功能,如解析HTML、渲染CSS、运行JavaScript,但无需显示图形化界面。常见的无头浏览器包括:
-
Chrome Headless:Google Chrome的无头模式。
-
Puppeteer:Node.js库,控制Chrome或Chromium。
-
Playwright:支持多浏览器(如Chrome、Firefox、WebKit)的自动化测试框架。
-
Selenium:支持多种无头浏览器的自动化测试框架。
我将控制面板导出为 PDF 并提取 PDF 的元数据。
PDF 是使用 Chromium 创建的。
这意味着浏览器在后端运行,如果我们注入一些 html,它将被内部浏览器加载,我们可以获得 SSRF。
SSRF 允许攻击者使服务器端应用程序向意外位置发出请求
我尝试了多次注射和 XSS,但没有找到任何东西。一段时间后,我试图理解 Dashboard 的所有部分和数据类型。
前面的 JSON 显示了多种数据类型,如 “imageobject”、“videoobject”、图形和其他类型,所有这些数据类型都可以通过 UI 访问。我想检查所有可能的数据类型,因此我打开了应用程序的 javascript 代码。
延迟加载 javascript 代码的一个好方法是搜索字符串或端点,我搜索了“imageobject”,我找到了一个包含所有可能对象类型的 JSON,包括带有 URL 参数的“imageobject”。
查看代码时,我发现了“iframeobject”,并尝试编辑仪表板以将“iframeobject”包含在我的攻击者 URL 中。
{"title":"Hello","items":[{"type":"iframeobject","url":"https://attacker"},...]}
它在 Iframe 中显示了我的页面!!
之后,我导出了控制面板,并在我的服务器上收到了回电!!那是 SSRF!!
SSRF 将我的页面加载到 PDF 中。
SSRF 到 localhost:9222 泄露的用户令牌
我尝试将 iframe URL 更改为 127.0.0.1 和 localhost,但 URL 参数需要 HTTPS 并且不允许内部 IP。
我尝试了重定向、八进制旁路和许多技术来加载内部资源,但我意识到浏览器正在 iframe 中加载我的 html,为什么不在 iframe 中创建另一个 iframe呢?
我的攻击者的 HTML:
它工作并加载了应用程序登录页面的内部视图。
我扫描了内部网络,发现了一个打开的端口 localhost:9222,该端口是无头浏览器 API 接收请求的地方!.
我搜索了终端节点,发现 /json 列出了所有活动的浏览器选项卡。
我导出了一个新的 PDF 和 booooom:
PDF 包含活动浏览器选项卡的所有 URL,这些 URL 包含用于检索仪表板的用户会话令牌,这意味着我可以接管任何生成 PDF 或 PNG 的用户的帐户。
我报告了漏洞,并且用了不到 48 小时的时间就被分类和奖励。
严重 (9.1) — 2000 欧元
原文始发于微信公众号(迪哥讲事):骚操作-无头浏览器上的 SSRF
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论