#描述:
在对我们最喜欢的目标进行侦察和端口扫描时,我们发现了一个带有
***8443***
,的子域名***http://admin.target.com:8443***
。虽然响应是***404***
,但不幸的是,大多数猎人会忽略任何返回 的子域名****404***
。但我不会!***
模糊测试***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**````**/download/**````**/admin/Download**````**200**
因此,从端点名称,您可以推断出它的功能!但是,我们缺少正确的参数,我们需要100% 有效的文件和路径。由于端点位于下**/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**
,我能够访问一些有用的信息。
请注意,我们发现了三个 URL:**/download/**
(**/faces/**
我们已经知道了),以及一个新的:**/incident-report**
。访问**http://admin.target:8443/admin/incident-report**
触发了一些意想不到的事情:它开始下载一个名为 的巨大日志文件**incident-report-xxxxxx.zip**
。这个文件原来是一个实时日志文件!
日志文件就像
每次访问时**http://admin.target:8443/admin/incident-report**
,都会下载一个新的日志文件,因为日志是实时生成的。
我应该在这里停下来报告吗?很多猎人可能到这个时候就结束了他们的探索!
不!。
#扩大影响:
检查日志文件,我发现一个包含管理员密码的文件
**21232f297a57a5a743894a0e4a801fc3:admin (md5)**`它不起作用,正如你在文件上看到的,**这是旧密码**,下一个是`**2a92e4f4ecc321db24c8f389a287d793:Glglgl123**
所以我再次登录,**/admin/faces/jsf/login.xhtml,**
尝试过**admin:Glglgl123**
并且它与以管理员身份完全访问面板!
登录后,我发现了一个名为**export_step2.xhtml**
which have 的**groovy console**
函数,所以我在这里停下来并报告了它,然后我要求程序所有者尝试使用 RCE,回复是
我提到了潜在的 RCE,
所以问我是否能进一步研究一下,看看我是否能利用这一点
在深入探讨之前,让我们先了解**Groovy Console**
一下
Groovy 控制台是一个开发和调试工具,它提供了一个用于执行 Groovy 脚本的界面。开发者经常使用它来测试代码片段、探索 API 以及直接在受控环境中构建功能原型。由于它允许任意代码执行,因此通常只有内部系统上的受信任用户才能访问它。
未经适当身份验证即可访问的安全问题:
任意代码执行:如果未经授权的人员获得 Groovy 控制台的访问权限,他们就可以在服务器上运行任何 Groovy 或 Java 代码。这可能导致远程代码执行 (RCE),从而可能允许攻击者窃取数据、入侵其他应用程序或完全控制服务器。
敏感信息泄露:攻击者可以执行命令读取服务器上存储的配置文件、环境变量甚至凭证。这将为漏洞利用和横向移动提供更多机会。
权限提升:如果 Groovy 控制台以提升的权限运行,攻击者可能会执行普通应用程序用户无法执行的操作。这可能包括创建或删除文件、修改应用程序逻辑或安装恶意软件。
简而言之,未经授权访问 Groovy 控制台可以有效地将其变成攻击者的后门,为他们提供破坏整个系统的强大工具。
所以现在,我已获得批准!是时候为这趟狂野之旅做好准备了!!
RCE漏洞:
回到**export_step2.xhtml**
其中有**groovy console**
;我使用了这个有效载荷
但正如您所见,命令已执行但没有输出!
我尝试了不同的命令
打印“id”.execute()。文本 打印“sudo cat /etc/passwd”.execute()。文本
不幸的是,同样的问题仍然存在:命令已执行,但没有返回任何输出
(致读者):有人猜猜这个命令输出可能隐藏在哪里吗?如果你猜对了,你不仅会感觉自己像个摇滚明星,而且还离获得巨额赏金更近了一步!
#链接漏洞以实现完整的RCE:
等一下,你还记得这个功能吗**http://admin.target:8443/admin/incident-report**
?
正如前面提到的……
访问
**http://admin.target:8443/admin/incident-report**
触发了意想不到的事情:它开始下载一个名为的巨大日志文件**incident-report-xxxxxx.zip**
。这个文件竟然是一个实时日志文件!
是的!这竟然是获取 RCE 输出的关键。通过访问**http://admin.target:8443/admin/incident-report**
,我可以下载最新的日志——猜猜我在里面发现了什么?RCE 输出!
#现在的漏洞很简单:
- 使用我们发现的凭据登录。
- 转到 Groovy 控制台。
- 运行类似的命令
**print "sudo cat /etc/passwd".execute().text**
(或尝试任何其他命令)。 - 现在,导航至 处的日志端点
**http://admin.target:8443/admin/incident-report**
。 - 下载最新的日志文件,它就在那里——RCE 输出!
为什么我没有尝试OOB-RCE,或者尝试在服务器上创建一个文件来绕过所有这些步骤?我知道这可能是你心中的疑问!答案很简单
原因有二:
- OOB-RCE 是不可能的:有某种形式的 WAF 可以阻止任何到我的 IP 或任何外部 IP 的出站连接。
- 赏金更低: OOB-RCE 的赏金通常比直接 RCE 的赏金要低。相信我——我在这个领域深耕多年,深有体会!
该项目要求我们提交另外两份报告:一份是关于远程代码执行(RCE)的报告,另一份是关于我们发现的凭证的报告。总赏金:4万美元。
#经验教训&总结:
1_像游戏一样对待漏洞赏金:把它当作一项任务——在达到最终目标之前,不要停止在子域名上进行探索。就我而言,最终目标是实现远程代码执行 (RCE) 并获得 4 万美元的赏金。许多漏洞猎人可能会在发现第一个漏洞后就停下来并立即报告。正如你所见,我并没有满足于仅仅下载日志的终端,甚至没有满足于路径遍历。我不断探索,直到发现巨额赏金。这种方法一直为我带来丰厚的回报!
原文始发于微信公众号(红云谈安全):有限路径遍历 RCE 之旅,赏金 40,000 美元!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论