1. 漏洞基本信息
-
CVE 编号:CVE-2023-7130
-
影响软件:College Notes Gallery 2.0
-
漏洞类型:SQL 注入(SQL Injection)
-
危害级别:高危(High)
-
利用难度:低(容易利用)
-
影响范围:该漏洞允许攻击者绕过身份验证、访问或修改数据库中的敏感数据,甚至可能导致远程代码执行(RCE)。
2. 漏洞成因分析
该漏洞出现在 College Notes Gallery 2.0 的 用户登录接口 /notes/login.php
,对 user
参数的输入 处理不当,直接拼接 SQL 查询,导致攻击者可以构造恶意 SQL 语句进行注入攻击。
示例:
$query = "SELECT * FROM users WHERE username = '" . $_POST['user'] . "' AND password = '" . $_POST['pass'] . "';";
此代码存在 严重的 SQL 注入风险,攻击者可以在 user
参数中插入 SQL 代码绕过身份验证,如:
admin' OR '1'='1
这将使 SQL 查询变为:
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'password';
由于 1=1
始终为真,数据库会返回所有用户信息,导致 登录绕过。
5. 可能的攻击后果
-
绕过身份验证:攻击者可直接登录管理员账户,获取管理权限。
-
数据泄露:攻击者可读取用户信息、电子邮件、密码哈希等敏感数据。
-
数据篡改:攻击者可修改数据库内容,篡改或删除重要信息。
-
持久化后门:攻击者可能在数据库中植入恶意 payload,进行远程代码执行(RCE)。
6. 修复与缓解措施
✅ 5.1 使用参数化查询(Prepared Statements)
最有效的修复方式是使用 预处理语句(Prepared Statements),避免直接拼接 SQL 查询:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$_POST['user'], $_POST['pass']]);
这样,即使攻击者输入 SQL 代码,也不会被解析为数据库命令。
✅ 5.2 进行输入验证
-
限制用户名长度(如最多 20 个字符)
-
仅允许字母、数字(防止注入特殊字符)
-
拒绝空输入(防止 SQL 语句异常)
示例:
if (!preg_match("/^[a-zA-Z0-9]{1,20}$/", $_POST['user'])) {
die("Invalid username!");
}
✅ 5.3 使用 Web 应用防火墙(WAF)
-
部署 ModSecurity 或 Cloudflare WAF 以拦截 SQL 注入攻击。
-
配置
SQL 注入规则,例如:
SecRule ARGS "@rx (?i)(union.*select.*from)" "deny,status:403"
✅ 5.4 限制数据库权限
-
最小权限原则(Least Privilege):只赋予 Web 服务器最低权限,避免数据库被完全控制。
-
例如,仅允许
SELECT
而不允许DROP
或UPDATE
:GRANT SELECT ON database.users TO 'webuser'@'localhost';
7. 总结
-
CVE-2023-7130 是 College Notes Gallery 2.0 中的 SQL 注入漏洞,攻击者可以利用它 绕过身份验证、获取数据库信息,甚至执行远程代码。
-
利用 SQLMap 等工具,攻击者可以自动化攻击,轻松获取数据库中的敏感信息。
-
修复措施:
-
使用 参数化查询 预防 SQL 注入。
-
输入验证 过滤用户输入。
-
部署 WAF 保护 Web 应用程序。
-
最小权限原则 限制数据库访问权限。
-
🚨 强烈建议受影响的用户立即修复漏洞,避免数据泄露和系统被攻击!
暂无评论内容