一、漏洞介绍
1.1 什么是Shiro
Shiro是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。Shiro旨在简化身份验证和授权的编程,使得开发人员可以容易地保护任何应用程序——从最小的移动应用到最大的网络和企业应用。
1.2 什么是序列化
序列化(Serialization)是将对象状态信息转换为可以存储或传输的形式(例如,字节流)的过程。这样,以后可以在相同或不同的计算机环境中重新创建该对象。
1.3 什么是反序列化
反序列化(Deserialization)是序列化的逆过程,它将之前序列化过程中生成的数据(通常是字节流)转换回原始对象的过程。在反序列化过程中,系统会根据序列化数据中的信息重新创建对象,并恢复对象在序列化时的状态。
1.4 漏洞原理
Shiro550反序列化漏洞,也称为Shiro RememberMe 1.2.4反序列化漏洞(CVE-2016-4437),是一个在Apache Shiro 1.2.4及以前版本中存在的安全漏洞。这个漏洞主要影响Shiro框架的RememberMe功能,该功能允许用户在浏览器关闭后再次打开时保持登录状态。总的来说就是,在执行身份验证时提供了一个记住密码的功能,如果用户在登录时勾选了这个选项。用户的请求数据包中将会在cookie字段中多一段数据,这一段数据包含了用户身份信息,且是经过加密的。加密过程:用户信息-->序列化-->AES加密(这一步需要用到密钥key)-->base64编码-->添加到RememberMe Cookie字段。勾选记住密码之后下次登录时,服务端会根据客户请求中的cookie值进行身份验证,无需登录即可访问。服务端对cookie进行验证的步骤:取出请求包中RememberMe的cookie值-->base64解码-->AES解密(用到密钥key)-->反序列化。
1.5 漏洞利用思路
既然能进行序列化,那我们可以对自己的攻击代码进行相同的AES加密,base64编码后产生RememberMe字段发送给服务端,服务端反向进行解密得到我们攻击代码并会运行,进而使得攻击成功。
二、靶场搭建(基于vulhub靶场进行搭建)
2.1 简介
VUlhub是一个面向大众的开源漏洞靶场,无需Docker知识,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
- 物理机:Windows11
- 虚拟机:Centos7.6 192.168.1.130,网卡设置为NAT模式
2.2 环境安装
2.2.1 安装docker
安装docker官方建议内核3.10以上
本次操作使用root权限登录执行,不是root需在所有命令前加sudo
1. 查看当前内核版本
uname -r
2. 使用root权限更新yum包(可选择性执行)
yum -y update
注:yum -y update:升级所有包的同时也升级软件和系统内核
yum -y upgrade:只升级所有包,不升级软件和系统内核
(这个命令不是必须执行,看情况,后面如果出现不兼容的情况就必须执行)
3.卸载旧版本(如果以前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
4. 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper
5. 设置yum源(以下二选一)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库) yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)6.查看版本并安装
(1)查看当前可用版本
yum list docker-ce --showduplicates | sort -r
(2)yum install docker-ce-版本号
yum install -y docker-ce 最新版
yum -y install docker-ce-版本号y
出现以下结果代表安装成功
7. 启动docker并设置开机自启
systemctl start docker
systemctl enable docker
8. 检验安装
检验版本号
docker version
拉取镜像检验成功
docker pull hello-world
启动容器
docker run hello-world
启动容器后,出现以下输出代表安装成功
9. 换源(可选)
(1)编辑docker配置文件
vi /etc/docker/daemo.json
(2)添加国内镜像源
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}(3)重启docker服务
systemctl daemon-reload
systemctl restart docker
2.2.2 安装docker-Compose
以下两种安装方式二选一
1. 离线安装。
在Docker-Compose下载最先版本的docker-compose-Linux-x86_64并上传到虚拟机
将docker-compose上传,并移动至任意目录下,这里我上传至/usr/local/bin/
添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
检验版本号
docker -compose version
2. pip安装
安装docker-compose
pip install docker-compose
如果没有pip需要先安装
yum -y install epel-release
yum -y install python-pip
pip --version 查看pip版本
2.2.3安装Vulhub
同上,方法二选一
1. 离线安装
下载Vulhub压缩包,并上传至任意目录,这里放在/root/目录下
创建vulhub目录将压缩包放进去
mkdir culhub && mv master.zip vulhub/ && cd vulhub/
解压
unzip master.zip
2. git安装
git clone https://github.com/vulhub/vulhub.git
如果没有git需要先安装
yum install -y git
三、环境的使用
cd /vulhub/shiro/CVE-2016-4437
运行靶场(稍微等那么一大会)
docker-compose up -d
查看容器列表
docker ps
浏览器访问,发现已经可以运行
随便输入个用户名密码bp进行抓包,放入repeater模块中,点击发送,回包可以看到rememberMe=deleteMe字段,判断可能存在Shiro550反序列化漏洞
打开狐狸工具箱找到Shiro反序列化工具进行检测!