关键漏洞信息 漏洞类型 类型: Error-Based SQL Injection 影响范围 受影响URL: /Admin/dashboard/edit_profile 易受攻击参数: first_name, last_name (在POST请求中) 易受攻击组件: 用户资料更新功能 漏洞详情 CVE ID: CWE-89: 不当中和用于SQL命令中的特殊元素 严重程度: CRITICAL CVSS评分: 9.8 (Critical) 根因 应用程序通过直接连接未经验证和未授权的用户输入(来自“First name”和“Last name”字段)来构造SQL查询。攻击者可以注入单引号(')以破坏SQL语句并附加恶意命令。 影响 全数据库泄露: 攻击者可以读取、修改或删除数据库中的任何数据。 敏感数据暴露: 包括管理员凭据、用户信息、库存数据和销售记录。 身份验证绕过: 漏洞可能被用来提取用户密码哈希,导致账户接管。 远程代码执行潜力: 在某些数据库配置下,SQL注入可以升级为服务器上的远程代码执行。 攻击向量 攻击者可以使用基于错误的有效载荷强制MySQL数据库通过其错误消息显示信息。 使用EXTRACTVALUE函数触发无效XPath语法错误,包括嵌套SQL函数(例如VERSION())的输出。 攻击有效载荷示例 获取数据库版本: 获取数据库用户: 获取数据库名称: 概念证明(PoC) 1. 登录到管理面板。 2. 导航到“编辑个人资料”页面(/Admin/dashboard/edit_profile)。 3. 在“Last name”字段中输入以下有效载荷: 4. 提交表单。 5. 应用程序将失败并在屏幕上显示数据库错误消息,如:XPATH syntax error: '10.4.11-MariaDB'。 6. 此错误消息确认了漏洞并揭示了数据库版本。相同的技术可以与USER()和DATABASE()一起使用,以提取更多信息。 建议修复措施 使用参数化查询(预编译语句): 这是防止SQL注入最有效的方法。 验证和清理输入: 所有用户输入应针对预期字符和格式的严格白名单进行验证。 安全建议 禁用生产环境中的详细数据库错误消息。 应用数据库用户的最小权限原则。 定期进行安全代码审查和使用静态分析(SAST)工具查找漏洞。