
该存储库包含一个自动化的漏洞利用工具,以教育和网络安全研究为目的,旨在演示Apache Tomcat(CVE-2025-24813)中潜在的远程代码执行(RCE)漏洞。
⚡ 版本: 1.0 🛡️ CVE ID: CVE-2025-24813 (Apache Tomcat RCE) 🧬 Payload:
ysoserial/Java🌐 模式: 交互式 + 隐身 🔬 用途: 道德、研究、教育
该工具被设计为一套未来主义风格的利用套件,专注于:
🧪 为网络安全专业人士、研究人员、渗透测试人员和红队设计。
✅ 直观的交互式界面
✅ 动态 payload(ysoserial 或编译后的 Java)
✅ 变色龙式反 WAF 请求头
✅ 自动规避 + payload 分片
✅ 后端执行指纹识别
✅ 每个目标详细日志记录
✅ 赛博朋克风格动态横幅(🔮 故障动画)
✅ 控制台实时反馈(使用 Rich & Colorama)
使用以下命令安装所需依赖:
pip install -r requirements.txt
依赖项:
requests
colorama
rich
validators
并确保你有:
Java 和 javac 在 PATH 中ysoserial.jar(如果使用 ysoserial 类型 payload)运行脚本:
python3 POC-Exploit_CVE_2025_24813.py
并完成配置:
🧬 选择 payload 类型 💣 指定命令 🌐 输入目标 URL 🔧 调整规避和 SSL 设置
🔗 [?] 输入目标 URL: https://victima.org
💣 [?] 要执行的命令: whoami
🧬 [?] Payload 类型: ysoserial
📂 [?] Ysoserial.jar 路径: ysoserial.jar
🔧 [?] Gadget: CommonsCollections6
🔐 [?] 验证 SSL?(是/否): 否
🚀 正在执行...
🧬 检测到 WAF... 更换策略
⚙️ 正在上传 payload...
💥 远程执行确认
✅ 结果: 'apache'
┌──────────────────────────────┐
│ 交互模式 │
├──────────────────────────────┤
│ URL 验证 │
│ 会话检测 │
│ WAF 检测 │
│ Payload 生成 │
│ 通过 PUT 进行规避上传 │
│ 执行验证 │
└──────────────────────────────┘
↘ 每个目标的日志
ysoserial 工具,序列化易受攻击的 gadgets 以执行命令。.java 文件,从服务器远程执行命令。CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # 主脚本
ysoserial.jar # 如果使用 'ysoserial' 则需要
logs/ # 每个目标的单独日志文件夹
payload.ser # 临时生成的 payload
Exploit.java / .class # Java 临时文件
此工具的创建仅出于合法和教育目的。
✅ 允许:
🚫 禁止:
作者和贡献者均不对滥用行为负责。您应对自己的行为负责。
ysoserial、Java、Rich、Colorama、requests📄 CVE-2025-24813:Apache Tomcat 远程代码执行 🔗 查看 CVE MITRE 详情
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files...
更多信息请参阅
LICENSE文件。
此 README 和脚本旨在提供沉浸式、视觉化且优雅的体验,与未来主义网络安全的新时代相呼应。
✨ 不仅仅是漏洞利用...这是一曲规避与数字控制的技术交响曲。
推荐版本:Python 3.8+
需要安装的 Python 库:
pip install requests colorama
脚本使用两种 payload 形式:
因此你需要:
Java JDK(不仅仅是 JRE,因为需要编译代码)。 验证方法:
java -version
javac -version
如果两个命令都工作,则已准备就绪。
从此处下载 .jar 👉 https://github.com/frohoff/ysoserial
将其保存在脚本的同一目录中,或提示时指定完整路径。 示例:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe)将打开计算器。gnome-calculator 或 xcalc。安装 Python 3.8+
安装库:
pip install requests colorama etc
安装 Java JDK 8+
java -version
javac -version
将 ysoserial.jar 下载到脚本文件夹中。
👉 完成以上步骤后,您就可以在安全的实验室模式下运行该脚本(仅在受控环境中进行测试)。
版本: 1.0 目的: 本指南解释如何准备一个完全安全的环境来测试您拥有的脚本,而不影响真实系统。包括一个测试服务器(mock)、安全模式(DRY_RUN / SAFE_TEST),以及清晰的步骤来在实验室中运行该工具。
pip 可用。virtualenv 或 venv。安装依赖项:
python3 -m venv .venv
source .venv/bin/activate # Linux / macOS
.\.venv\Scripts\activate # Windows (PowerShell/Command Prompt)
pip install -U pip
pip install requests colorama flask
注意:
flask仅用于本地测试服务器(mock)。
创建一个包含以下内容的 mock_server.py 文件。该服务器模拟脚本预期的端点,并返回受控状态(200、409、500),以便您无需接触真实服务器即可验证脚本逻辑。
# mock_server.py — 安全测试服务器
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# 模拟一个可能返回 JSESSIONID cookie 或包含 "Session ID" 文本的页面
resp = make_response('Index page — Session ID: testsession')
resp.set_cookie('JSESSIONID', 'testsession')
return resp
@app.route('/check.txt', methods=['PUT'])
def check_put():
# 模拟一个可写的资源
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# 模拟上传被接受但返回 409(脚本期望的行为)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# 如果 cookie 匹配且会话已“上传”,则返回 500 以模拟反序列化失败
session = request.cookies.get('JSESSIONID')
if session and uploads.get(session):
return ('Internal Server Error', 500)
return ('Hello from mock server', 200)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8000, debug=True)
如何运行:
python mock_server.py
# mock 将监听 http://127.0.0.1:8000
对于测试,您不需要生成真实的 payload。创建一个简单的文件,供脚本上传:
echo "DUMMY_PAYLOAD" > payload.ser
此文件不包含可执行代码:仅用于验证上传逻辑并查看 mock 服务器的响应。
为防止脚本调用外部工具(Java/ysoserial)或执行危险操作,请在主脚本开头添加此代码块(在任何生成/调用 subprocess 之前):
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
然后修改(或包装)生成/上传函数,使其在 SAFE_TEST 为 True 时以安全方式运行。
generate_ysoserial_payload 和 generate_java_payload 的最小修改示例:
def generate_ysoserial_payload(command, ysoserial_path, gadget, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST 激活 — 创建 dummy payload(不可执行)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- 仅在 SAFE_TEST == False 时执行原始行为 ---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST 激活 — 创建 dummy java payload(不可执行)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- 仅在 SAFE_TEST == False 时执行原始行为 ---
在 upload_and_verify_payload 中,如果 SAFE_TEST 为 True,则使用正常流程(mock 将接受),但不要执行脚本外的命令。
如何激活 SAFE_TEST:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
启动您的虚拟环境,并确保已安装依赖项(参见要求部分)。
启动 mock_server.py: