扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
描述
在对目标进行侦察和端口扫描时,我们发现了一个使用端口 8443
的子域名:http://admin.target.com:8443
。虽然响应返回了一个 404
状态码,但大多数猎人可能会忽略任何返回 404
的子域名,而我不会!
通过对 http://admin.target.com:8443/FUZZ
进行模糊测试(Fuzzing),我发现了一个路径 /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.com: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
的功能,其中包含一个 Groovy Console
。于是,我在这里暂停并报告了漏洞,然后请求项目负责人允许我尝试一下RCE。对方的回应是:
我提到存在潜在的RCE漏洞,并询问是否可以进一步探索并尝试利用它。
在深入研究之前,先了解一下什么是 Groovy Console
:
Groovy Console 是一个开发和调试工具,提供了一个界面来执行 Groovy 脚本。开发人员通常使用它来测试代码片段、探索 API,以及直接在受控环境中原型化功能。它通常仅对内部系统中的受信任用户可访问,因为它允许执行任意代码。
如果未经适当身份验证访问,会产生的安全问题:
任意代码执行: 如果未经授权的用户获得 Groovy Console 的访问权限,他们可以在服务器上运行任何 Groovy 或 Java 代码。这可能导致远程代码执行(RCE),使攻击者能够窃取数据、危害其他应用程序,甚至完全控制服务器。
敏感信息泄露: 攻击者可以执行命令来读取配置文件、环境变量,甚至是存储在服务器上的凭据。这会为进一步的漏洞利用和横向移动提供机会。
权限提升: 如果 Groovy Console 以高权限运行,攻击者可能执行普通应用用户无法完成的操作,包括创建或删除文件、修改应用逻辑或安装恶意软件。
简而言之,未经授权访问 Groovy Console 会使其成为攻击者的后门工具,为他们提供强大的手段来破坏整个系统。
RCE:
回到 export_step2.xhtml
页面,其中包含 Groovy Console
。我使用了以下 payload:
但是正如你所看到的,命令执行成功,但没有输出结果!
我尝试了不同的命令。
print "id".execute().text
print "sudo cat /etc/passwd".execute().text
不幸的是,同样的问题仍然存在:命令被成功执行,但没有返回任何输出。
链接漏洞以实现完整的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 输出!
漏洞利用变得非常简单:
print "sudo cat /etc/passwd".execute().text
的命令(或者尝试其他命令)。http://admin.target:8443/admin/incident-report
。原因有两个:
最终结果:
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。