某cms复现学习
字数 1373 2025-08-29 08:31:35

TuziCMS漏洞分析与复现教学文档

前言

本文档将详细分析TuziCMS内容管理系统中的多个安全漏洞,包括SQL注入、后台Getshell、任意文件删除和前台反射型XSS漏洞。通过本教程,您将学习到如何审计PHP代码中的常见安全问题。

环境搭建注意事项

  1. 源码拉取后发现无法正常安装,原因是install目录下已存在install.lock文件
  2. 解决方法:删除install/install.lock文件即可重新安装

第一处漏洞:SQL注入

漏洞位置

App/Manage/Controller/AdvertController.class.php及其他多个Controller文件

漏洞分析

  1. 请求示例:GET /tuzicms-master/index.php/Manage/Download/index/id/11
  2. 问题代码:直接使用id=$id进行SQL拼接,未做任何过滤
  3. 全局搜索发现20多个Controller存在相同问题

验证方法

  1. 构造恶意ID参数进行注入测试
  2. 成功获取数据库用户信息

修复建议

  1. 使用参数化查询或预处理语句
  2. 对输入参数进行严格过滤

第二处漏洞:后台Getshell

漏洞位置

do_fenye()方法中的配置文件写入功能

漏洞分析

  1. 配置文件路径:CONF_PATH."config_fenye.php"
  2. 关键问题:
    • 使用file_put_contents直接写入PHP文件
    • 通过I()函数获取输入,但过滤不充分
    • htmlspecialcharsstrip_tags对单引号过滤不足

利用方法

  1. 通过POST参数PAGE_ARTICLE__HOME注入恶意代码
  2. 构造闭合单引号的PHP代码实现Getshell

修复建议

  1. 禁止直接写入PHP可执行代码
  2. 加强输入过滤,特别是对特殊字符的处理
  3. 限制配置文件写入权限

第三处漏洞:任意文件删除

漏洞位置

后台delSqlFiles()方法

漏洞分析

  1. 直接拼接文件路径,未做安全检查
  2. 可删除服务器上任意文件

修复建议

  1. 限制可删除的文件目录
  2. 对文件名进行严格校验
  3. 添加权限验证

第四处漏洞:前台反射型XSS

漏洞位置

index.php/article/group/id/参数

漏洞分析

  1. Payload示例:index.php/article/group/id/2/" onmouseover=alert(/xss/) /
  2. 问题根源:
    • 使用$_SERVER['SCRIPT_NAME']直接定义_PHP_FILE_
    • 该变量可被注入恶意代码
    • 最终输出到页面时未做转义

利用方法

  1. 构造包含XSS代码的URL
  2. 诱使用户访问该URL触发XSS

修复建议

  1. $_SERVER变量进行过滤
  2. 输出时使用htmlspecialchars转义
  3. 设置HTTP头X-XSS-Protection

参考链接

  1. GitHub Issues
  2. CNVD-2020-45406
  3. FreeBuf文章

总结

通过分析TuziCMS的这些漏洞,我们可以学习到:

  1. 输入验证和过滤的重要性
  2. 直接拼接SQL的危险性
  3. 文件操作的安全注意事项
  4. XSS防护的基本原则

建议开发者在开发过程中遵循安全编码规范,对所有用户输入进行严格验证和过滤,避免类似安全问题的发生。

TuziCMS漏洞分析与复现教学文档 前言 本文档将详细分析TuziCMS内容管理系统中的多个安全漏洞,包括SQL注入、后台Getshell、任意文件删除和前台反射型XSS漏洞。通过本教程,您将学习到如何审计PHP代码中的常见安全问题。 环境搭建注意事项 源码拉取后发现无法正常安装,原因是 install 目录下已存在 install.lock 文件 解决方法:删除 install/install.lock 文件即可重新安装 第一处漏洞:SQL注入 漏洞位置 App/Manage/Controller/AdvertController.class.php 及其他多个Controller文件 漏洞分析 请求示例: GET /tuzicms-master/index.php/Manage/Download/index/id/11 问题代码:直接使用 id=$id 进行SQL拼接,未做任何过滤 全局搜索发现20多个Controller存在相同问题 验证方法 构造恶意ID参数进行注入测试 成功获取数据库用户信息 修复建议 使用参数化查询或预处理语句 对输入参数进行严格过滤 第二处漏洞:后台Getshell 漏洞位置 do_fenye() 方法中的配置文件写入功能 漏洞分析 配置文件路径: CONF_PATH."config_fenye.php" 关键问题: 使用 file_put_contents 直接写入PHP文件 通过 I() 函数获取输入,但过滤不充分 htmlspecialchars 和 strip_tags 对单引号过滤不足 利用方法 通过POST参数 PAGE_ARTICLE__HOME 注入恶意代码 构造闭合单引号的PHP代码实现Getshell 修复建议 禁止直接写入PHP可执行代码 加强输入过滤,特别是对特殊字符的处理 限制配置文件写入权限 第三处漏洞:任意文件删除 漏洞位置 后台 delSqlFiles() 方法 漏洞分析 直接拼接文件路径,未做安全检查 可删除服务器上任意文件 修复建议 限制可删除的文件目录 对文件名进行严格校验 添加权限验证 第四处漏洞:前台反射型XSS 漏洞位置 index.php/article/group/id/ 参数 漏洞分析 Payload示例: index.php/article/group/id/2/" onmouseover=alert(/xss/) / 问题根源: 使用 $_SERVER['SCRIPT_NAME'] 直接定义 _PHP_FILE_ 该变量可被注入恶意代码 最终输出到页面时未做转义 利用方法 构造包含XSS代码的URL 诱使用户访问该URL触发XSS 修复建议 对 $_SERVER 变量进行过滤 输出时使用 htmlspecialchars 转义 设置HTTP头 X-XSS-Protection 参考链接 GitHub Issues CNVD-2020-45406 FreeBuf文章 总结 通过分析TuziCMS的这些漏洞,我们可以学习到: 输入验证和过滤的重要性 直接拼接SQL的危险性 文件操作的安全注意事项 XSS防护的基本原则 建议开发者在开发过程中遵循安全编码规范,对所有用户输入进行严格验证和过滤,避免类似安全问题的发生。