seacms 前台 sql 注入详细分析
字数 835 2025-08-22 12:23:30
SeaCMS 前台 SQL 注入漏洞分析与利用
前言
本文详细分析了 SeaCMS (海洋 CMS) 12.9 版本中存在的前台 SQL 注入漏洞。该漏洞由于未对用户输入进行有效过滤,导致攻击者可以在前台执行任意 SQL 语句。
免责声明:本文仅用于安全研究与教学目的,任何未经授权的攻击行为均属违法。传播、利用本文所提供信息造成的任何后果均由使用者自行承担。
环境搭建
- 从 SeaCMS 官网下载 12.9 版本源码
- 使用 PHPStudy 搭建测试环境
- 导入 SQL 数据库文件
- 完成基础配置后访问网站确认搭建成功
漏洞分析
漏洞位置
漏洞存在于前台处理用户请求的部分,核心问题在于直接使用未过滤的用户输入拼接 SQL 语句。
漏洞触发流程
- 通过
ac参数控制程序流程分支 - 当
ac=edit时进入编辑弹幕功能 - 程序直接将用户输入拼接到 SQL 语句中
- 使用
query方法执行未过滤的 SQL 语句
关键代码分析
// 根据 ac 参数决定执行哪个操作
if ($ac == 'edit') {
edit_danmu(); // 进入编辑弹幕方法
}
function edit_danmu() {
// 直接拼接用户输入生成 SQL 语句
$sql = "UPDATE sea_danmu SET content='".$_POST['content']."' WHERE id=".$_POST['id'];
// 直接执行未过滤的 SQL
$db->query($sql);
}
漏洞复现
利用方式一:编辑弹幕功能注入
- 构造 POST 请求:
ac=edit id=1 AND (SELECT 1 FROM (SELECT SLEEP(5))x) content=test - 观察响应时间延迟确认注入成功
利用方式二:删除功能注入
通过分析发现 ac=del 也存在类似问题:
- 构造 POST 请求:
ac=del id=1 AND (SELECT 1 FROM (SELECT SLEEP(5))x) - 同样可以通过时间延迟确认注入
拓展延伸
其他潜在注入点
- 所有使用
query方法直接执行 SQL 的地方都可能存在类似问题 - 需要检查以下常见操作:
- 用户评论功能
- 搜索功能
- 内容编辑功能
- 删除功能
漏洞修复建议
- 对所有用户输入进行严格的过滤和转义
- 使用预处理语句(PDO)替代直接拼接 SQL
- 对数据库操作进行统一的封装,确保所有 SQL 执行都经过安全检查
总结
SeaCMS 12.9 版本中存在的前台 SQL 注入漏洞主要源于对用户输入缺乏有效过滤,直接拼接 SQL 语句执行。攻击者可以通过精心构造的请求在前台执行任意 SQL 命令,可能导致数据泄露、篡改等严重后果。建议用户及时更新到最新版本或按照修复建议进行代码修改。