JBoss未授权访问漏洞Getshell过程复现
Posted Tr0e
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JBoss未授权访问漏洞Getshell过程复现相关的知识,希望对你有一定的参考价值。
前言
在 2021 年第五届强网杯全国网络安全挑战赛的 EasyWeb 赛题中遇到了 JBoss 未授权访问漏洞 GetShell 的漏洞场景(2021强网杯全国网络安全挑战赛Writeup),当时一脸懵圈,故在此进行学习记录下。
漏洞复现
JBoss 是一个管理 EJB 的容器和服务器,支持 EJB 1.1、EJB 2.0 和 EJB3 的规范。但 JBoss 核心服务不包括支持 servlet/JSP 的 WEB 容器,一般与 Tomcat 或 Jetty 绑定使用。JBoss 默认在 8080 端口监听。
漏洞描述
在低版本的 JBoss 中,默认可以访问 JBoss Web 控制台(http://IP:8080/jmx-console
),无需用户名和密码。通过 JBoss 未授权访问管理控制台的漏洞,可以进行后台服务管理,可以通过脚本命令执行系统命令,如反弹 shell、wget 写 Webshell 文件。
说白了,这个未授权漏洞就是不需要用户名和密码就进入控制台,然后利用应用部署来部署 war 包,war 包里有个 jsp 的马,然后真香!!!
靶场搭建
主机 | 作用 |
---|---|
192.168.0.102 | Kali 虚拟机,启用Apache服务,提供 War 文件访问 |
192.168.0.104 | Ubuntu 虚拟机,搭建 JBoss 靶场 |
192.168.0.106 | Win10 物理机,访问靶场,部署 War |
1、利用利用 Vulhub 的 CVE-2017-7504 环境(实际上该漏洞环境是一个 JBoss 的反序列化漏洞,详情参见 JBoss 4.x JBossMQ JMS 反序列化漏洞):
2、虚拟机启动靶场环境后,物理机进行访问,发现 JBoss 默认页面,点击进入控制页:
3、假设是未授权访问的话,点击 JMX-Console 不会提示输入用户名、密码,而这个地方用的是别的漏洞的环境,用户名密码都是 admin、admin,所以就假装是不用输入用户名密码的:
4、进入 JBoss 管理控制台,如下图所示:
漏洞利用
1、往下找 jboss.deployment 进入应用部署页面:
2、进入应用部署页面后,下滑找到 void addURL()
,这里 ParamValue 部分填写远程服务器上的木马的地址:
3、在这里先看看如何制造包含 JSP 木马的 War 包,利用冰蝎的 JSP 木马,直接执行命令jar cvf shell.war shell.jsp
获得 shell.war 文件:
4、接着将制作好的 shell.war 文件放在 Kali 虚拟机的 Apache 服务的网站根目录下:
5、回到 JBoss 控制台 void addURL()
输入木马地址后,点击 Invoke 按钮:
点击后会跳转到如下页面:
6、输入 http://JBOSS服务器IP:8080/shell/
查看 shell.war 包成功部署:
7、最后,使用冰蝎连接 shell 地址:
防御手段
1、对 JMX 控制页面访问添加访问验证。
2、进行JMX Console 安全配置。
Jexboss脚本
Jexboss 是一个使用 Python 编写的 Jboss 漏洞检测利用工具,通过它可以检测并利用 Web-console、Jmx-console、JMXInvokerServlet 这三个漏洞,并且可以获得一个 Shell,项目 Github 地址:jexboss。
用途和用法的话官方介绍得很详细了:
来看看使用 Jexboss 脚本工具对上述靶场环境进行一键利用并获得 Shell。
1、下载脚本并执行检测命令python jexboss.py -u http://192.168.0.104:8080/
,如下图:
2、执行命令后出现下面的界面就说明存在漏洞:
3、等执行完后会弹出个选择 yes or no,选择 yes,则创建连接,反弹 Shell,如下图所示:
以上是关于JBoss未授权访问漏洞Getshell过程复现的主要内容,如果未能解决你的问题,请参考以下文章