【漏洞复现】Shiro550反序列漏洞复现和利用(含docker+vulhub环境安装)

一、漏洞介绍

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反序列化工具进行检测!

  • 38
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值