老版本seacms代码审计
字数 1457 2025-08-07 08:22:05
SeaCMS老版本代码审计教学文档
1. SeaCMS简介
SeaCMS是一款基于PHP开发的视频内容管理系统,主要用于视频网站的建设。本教学文档基于老版本SeaCMS的代码审计,分析其中存在的安全漏洞,适合安全研究人员和开发者学习PHP代码审计的基础知识。
2. 审计环境准备
- PHP 5.x/7.x环境
- SeaCMS老版本源码
- 代码审计工具:RIPS、Seay源代码审计系统等
- 调试工具:Xdebug、Burp Suite等
3. 漏洞类型分析
3.1 SQL注入漏洞
漏洞位置1:搜索功能
// search.php
$keyword = $_GET['keyword'];
$sql = "SELECT * FROM sea_movie WHERE name LIKE '%$keyword%'";
$db->query($sql);
漏洞分析:
- 直接拼接用户输入的
keyword参数到SQL语句中 - 未进行任何过滤或转义
修复建议:
$keyword = addslashes($_GET['keyword']);
// 或使用预处理语句
漏洞位置2:会员中心
// member.php
$id = $_GET['id'];
$sql = "SELECT * FROM sea_member WHERE id=$id";
$db->query($sql);
漏洞分析:
- 数字型注入,可直接注入
- 未进行intval转换
修复建议:
$id = intval($_GET['id']);
3.2 文件包含漏洞
漏洞位置:
// include.php
$page = $_GET['page'];
include($page . '.php');
漏洞分析:
- 直接包含用户控制的文件路径
- 可能导致本地文件包含(LFI)或远程文件包含(RFI)
修复建议:
$allow_pages = ['home', 'about', 'contact'];
$page = $_GET['page'];
if(in_array($page, $allow_pages)) {
include($page . '.php');
}
3.3 XSS漏洞
漏洞位置1:评论功能
// comment.php
$content = $_POST['content'];
$sql = "INSERT INTO sea_comments (content) VALUES ('$content')";
漏洞分析:
- 用户输入的评论内容直接存入数据库
- 前端展示时未做HTML实体编码
修复建议:
$content = htmlspecialchars($_POST['content'], ENT_QUOTES);
漏洞位置2:后台管理
// admin/config.php
echo $_GET['message'];
漏洞分析:
- 直接输出用户输入到页面
- 可能导致存储型或反射型XSS
3.4 文件上传漏洞
漏洞位置:
// upload.php
$file = $_FILES['file'];
move_uploaded_file($file['tmp_name'], 'uploads/' . $file['name']);
漏洞分析:
- 未检查文件类型
- 未重命名上传文件
- 可能导致任意文件上传
修复建议:
$allow_types = ['image/jpeg', 'image/png'];
$file = $_FILES['file'];
if(in_array($file['type'], $allow_types)) {
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
$new_name = md5(uniqid()) . '.' . $ext;
move_uploaded_file($file['tmp_name'], 'uploads/' . $new_name);
}
3.5 权限绕过漏洞
漏洞位置:
// admin/index.php
if($_COOKIE['admin'] == '1') {
$is_admin = true;
}
漏洞分析:
- 仅检查cookie值判断管理员身份
- 可伪造cookie绕过权限检查
修复建议:
session_start();
if($_SESSION['user_level'] == 'admin') {
$is_admin = true;
}
4. 其他安全问题
4.1 CSRF漏洞
- 关键操作缺少token验证
- 建议添加CSRF token机制
4.2 信息泄露
- 调试信息未关闭
- phpinfo()页面未删除
- 建议关闭display_errors
4.3 弱加密
- 使用md5等弱哈希算法存储密码
- 建议使用password_hash()
5. 审计技巧总结
-
追踪用户输入:从
$_GET、$_POST、$_COOKIE等超全局变量开始,追踪数据流向 -
关注危险函数:
- SQL相关:
mysql_query(),mysqli_query() - 文件操作:
include(),require(),file_get_contents() - 命令执行:
exec(),system(),passthru() - 文件上传:
move_uploaded_file()
- SQL相关:
-
检查过滤机制:
- 是否有全局过滤
- 过滤是否可绕过
- 是否使用了预处理语句
-
权限验证:
- 检查每个需要权限的页面是否有验证
- 验证逻辑是否严谨
-
错误处理:
- 是否暴露敏感信息
- 是否有完善的错误处理机制
6. 修复方案
-
输入验证:
- 对所有用户输入进行严格验证
- 使用白名单机制
-
输出编码:
- HTML输出使用
htmlspecialchars() - SQL使用预处理语句
- HTML输出使用
-
安全配置:
- 关闭错误显示
- 设置安全HTTP头
- 限制文件权限
-
使用安全函数:
- 密码哈希使用
password_hash() - 随机数使用
random_bytes()
- 密码哈希使用
-
更新框架:
- 升级到最新版本SeaCMS
- 应用官方安全补丁
7. 总结
通过对SeaCMS老版本的代码审计,我们可以学习到常见的PHP安全漏洞模式及其修复方法。代码审计的关键在于理解应用的业务逻辑,追踪用户可控数据的流向,并识别其中的安全风险。建议开发者在开发过程中就遵循安全编码规范,而不是在后期进行修补。