从路径遍历到RCE:解锁$40,000赏金的黑客进阶之路

从路径遍历到RCE:解锁$40,000赏金的黑客进阶之路

安全小白团译文 安全小白团 2025-02-14 22:01

forever young

不论昨天如何,都希望新的一天里,我们大家都能成为更好的人,也希望我们都是走向幸福的那些人

01

背景

安全小白团

在这篇文章中,我将详细介绍我和
Orwa Atyat如何成功将一个受限的路径遍历漏洞升级为 RCE,并因此赢得40,000 美元的赏金的故事。

在对我们最喜欢的目标进行侦察和端口扫描时,我们发现了一个子域名http://admin.target.com:8443,虽然响应是404,大多数赏金猎人都会忽略任何返回404的子域名。但我不会!。

02

漏洞挖掘

安全小白团

通过模糊测试
http://admin.target.com:8443/FUZZ,我发现/admin/路径会重定向到登录页面http://admin.target.com:8443/admin/faces/jsf/login.xhtml。

在测试此登录端点并未发现任何漏洞后,我决定继续在/admin/路径下进行模糊测试,比如http://admin.target.com:8443/admin/FUZZ。

我偶然发现了一个位于/admin/Download的端点/download/,它返回了一个“200”状态代码,但却是一个空响应。


从端点名称,您可以推断出它的功能!但是,我们缺少正确的参数,我们需要一个100% 有效的文件和路径。因为端点位于/admin/下,所以我们应该在admin目录中查找起作用的文件。


我通常从 JavaScript 文件开始测试 LFI 和路径遍历,因此我使用名为/admin/js/main.js的文件开始测试。这种方法有助于我们确定存在的 LFI和路径遍历漏洞并识别可访问的路径。此外,因为我们需要确定“/download”所需的正确参数,所以我们必须使用一个已知的有效文件,即/admin/js/main.js。这样可以确保在模糊测试时不会错过正确的参数。模糊测试命令的结构如下:**

通过模糊测试,我们现在知道/admin/download接受一个名为filename的参数。因此访问http://admin.target.com:8443/admin/download?filename=/js/main.js会显示位于http://admin.target.com:8443/admin/js/main.js的文件;

我首先尝试通过读取/etc/passwd来实现完整的路径遍历。不幸的,该/download功能仅适用于/admin/下的文件,任何超出/admin/的外部文件都不起作用。这证实了这里确实有一个受限的路径遍历*漏洞。


由于目标部署在 Java 环境中,我尝试读取/WEB-INF/web.xml,因为此文件通常包含大量有用信息。通过访问到http://admin.target:8443/admin/download?fileName=/WEB-INF/web.xml,我能够获取到了一些有用的信息

在 /WEB-INF/web.xml 中,我们发现了三个 URL:/download/、/faces/(我们已经知道)和一个新的 URL:/incident-report。访问http://admin.target:8443/admin/incident-report触发了一些意想不到的事情:它开始下载一个名为incident-report-xxxxxx.zip的巨大日志文件。这个文件竟然是实时生成的日志文件!

日志文件的内容如下:

每次访问时http://admin.target:8443/admin/incident-report,都会下载一个新的日志文件,因为日志是实时生成的。

****## 我应该在这里停下来并报告吗?很多猎人可能会在这时候结束他们的探索!

不!

03

扩大影响

安全小白团

在检查日志文件时,我发现了一个包含管理员密码的文件:

第一个密码无效,但第二个密码 Glglgl123 有效。

因此我再次尝试用admin:Glglgl123登录/admin/faces/jsf/login.xhtml,竟然可以作为管理员登录访问面板!

登录后,我发现了一个名为 export_step2.xhtml 的功能,其中包含 
Groovy 控制台。我在这里停下来并报告了漏洞,然后询问程序所有者是否可以尝试进一步利用 RCE。他们的回应是:“如果你能进一步利用并证明 RCE,我们将非常感激。”

在深入研究之前,让我们先了解一下Groovy Console。

Groovy 控制台是一个开发和调试工具,允许执行 Groovy 脚本。如果未经授权的用户访问它,可能会导致以下安全问题:


意代码执行:攻击者可以运行任何 Groovy 或 Java 代码,可能导致远程代码执行(RCE)。

敏感信息泄露:攻击者可以读取配置文件、环境变量或服务器上的凭据。

权限提升:如果 Groovy 控制台以高权限运行,攻击者可以执行普通用户无法执行的操作。

04

RCE的实现

安全小白团

回到 export_step2.xhtml 中的 Groovy 控制台,我使用了以下 payload:

但命令执行后没有输出。我尝试了不同的命令:

print "id".execute().textprint "sudo cat /etc/passwd".execute().text

同样的问题依然存在:命令执行了,但没有返回输出。

(读者可以猜猜输出可能隐藏在哪里?如果你猜对了,不仅会感觉自己像个摇滚明星,还会离获得巨额赏金更近一步!)

05

漏洞链的利用

安全小白团

还记得 http://admin.target:8443/admin/incident-report 吗?每次访问它时,都会下载一个实时日志文件。是的,这就是获取 RCE 输出的关键!

通过访问 http://admin.target:8443/admin/incident-report,我可以下载最新的日志文件,并在其中找到 RCE 的输出!

漏洞利用步骤

1.使用我们发现的凭据登录。

2.进入 Groovy 控制台。

3.运行命令,例如 print “sudo cat /etc/passwd”.execute().text。

4.访问日志端点 http://admin.target:8443/admin/incident-report。

5.下载最新的日志文件,RCE 输出就在其中!

经验教训和总结


  1. 将漏洞赏金视为游戏

将漏洞赏金视为一场冒险——不要停留在子域名的初步发现上,直到达成最终目标。在我的案例中,最终目标是实现远程代码执行(RCE)并获得 40,000 美元的赏金。许多猎人可能会在发现第一个漏洞后立即报告。正如你所看到的,我并没有满足于仅仅下载日志的端点,甚至没有止步于路径遍历漏洞。我不断探索,直到发现了巨大的回报。这种方法让我屡次获得高额赏金!

  1. 在子域名上发现漏洞后,彻底完成所有测试

一旦在子域名上发现漏洞,请坚持完成所有测试。正如你所看到的,一个小小的发现——比如通过受限路径遍历访问日志文件——可能会引发连锁反应,最终导致管理员密码泄露,进而升级为 RCE。有时,你甚至需要回到最初的漏洞,以获取拼图的最后一块!

  1. 注重质量而非数量

最初,我们将所有这些发现整合到一个报告中。这种方法不仅显示了对程序所有者团队的尊重,还赢得了更多的信任,并可能获得更高的赏金。事实上,程序所有者要求我们将报告拆分为多个单独的提交。为什么?因为这使他们能够为每个独立的发现提供更高的奖励!

参考及来源:https://medium.com/@HX007/a-journey-of-limited-path-traversal-to-rce-with-40-000-bounty-fc63c89576ea

06

免责&版权声明

安全小白团

安全小白团是帮助用户了解信息安全技术、安全漏洞相关信息的微信公众号。安全小白团提供的程序(方法)可能带有攻击性,仅供安全研究与教学之用,用户
将其信息做其他用途,由用户承担全部法律及连带责任,安全小白团不承担任何法律及连带责任。安全小白团所分享的工具均来自互联网公开资源,我们不对工具的来源进行任何形式的担保或保证。
用户在下载或使用本公众号分享的工具前,应自行评估工具的安全性。我们无法对工具可能存在的病毒、木马或其他恶意软件负责,因此造成的任何损失,安全小白团不承担任何责任。
欢迎大家转载,
转载请注明出处。
如有侵权烦请告知,我们会立即删除并致歉。谢谢!

转发

收藏

点赞

在看