分享文件写入和sql注入漏洞的审计过程
字数 1671 2025-08-29 08:30:36

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

一、前言

本文档详细记录WuzhiCMS的文件写入漏洞和SQL注入漏洞的审计过程,分享审计技巧和方法,适合想要学习代码审计的安全研究人员。

二、WuzhiCMS路由规则分析

1. 入口文件

  • 入口文件:index.php
  • 核心加载方法:load_class()

2. 类加载机制

  • 如果$static_class变量中存在类就直接获取
  • 否则从路径coreframe/app/core/libs/class/$class.class.php中加载
  • 类名格式:WUZHI_$class(如load_class('application')加载WUZHI_application类)

3. 路由配置

  • 通过get_config(route_config)方法读取www/configs/route_config.php配置
  • 路由配置示例:
    return array(
        'default'=>array('m'=>'content', 'f'=>'index', 'v'=>'init')
    );
    
    表示调用content模块的index.php文件的init()方法

4. 目录结构与访问形式

  • 模块路径:coreframe/app/content
  • URL访问形式:
    http://ip:port/wuzhicms/index.php?m=目录&f=文件名&v=方法&_su=wuzhicms
    

三、文件写入漏洞审计

1. 漏洞定位

  • 关键函数:file_put_contents
  • 审计目标:检查file_put_contents函数的参数是否可控

2. 漏洞发现

  • 文件路径:coreframe/app/core/libs/function/common.func.php
  • 漏洞函数:set_cache
    function set_cache($id, $data) {
        $filename = CACHE_ROOT.$id.'.cache';
        file_put_contents($filename, $data);
        return true;
    }
    
    • $filename$data参数可控

3. 调用链分析

  • set_cache方法被coreframe/app/attachment/admin/index.phpset方法调用
  • $data来自$GLOBALS['setting'],完全可控
  • 缓存文件名不可控,需要寻找包含该缓存文件的位置

4. 利用条件

  • 需要找到调用get_cache()方法的地方
  • 发现ueditor方法调用了get_cache()

四、SQL注入漏洞审计

1. 漏洞定位

  • 关键方法:搜索SQL查询语句
  • 审计目标:检查SQL语句拼接处是否存在可控参数

2. 漏洞发现

  • 文件路径:coreframe/app/core/libs/class/mysql.class.php
  • 漏洞方法:query
    function query($sql) {
        // 执行SQL查询
    }
    

3. 调用链分析

  • query方法被多处调用
  • 重点关注delete方法中的调用:
    function delete($table, $where) {
        $sql = "DELETE FROM `$table` WHERE $where";
        return $this->query($sql);
    }
    
    • $where参数直接拼接到SQL语句中

4. 参数溯源

  • $where参数由全局变量keyword赋值
  • 参数完全可控且无过滤

5. 完整利用链

  1. copyfrom文件下的listing方法
  2. 接收可控全局变量参数keywords
  3. 赋值给$where
  4. 插入SQL查询语句并执行

五、漏洞验证

1. 文件写入漏洞验证

  • 通过控制$GLOBALS['setting']写入恶意代码
  • 通过ueditor方法包含缓存文件执行代码

2. SQL注入漏洞验证

  • 通过控制keywords参数构造恶意SQL
  • 成功实现延时注入验证

六、审计技巧总结

  1. 路由分析:首先理解框架的路由机制,便于定位功能对应的代码文件
  2. 危险函数追踪:重点关注file_put_contentsevalsystem等危险函数
  3. 参数溯源:对危险函数的参数进行逆向追踪,检查是否可控
  4. 调用链分析:完整分析漏洞函数的调用链,确认利用条件
  5. SQL注入审计
    • 搜索直接执行SQL的方法(如query
    • 检查SQL拼接处的参数是否可控
    • 追踪参数来源,确认过滤情况

七、修复建议

  1. 文件写入漏洞修复

    • 对写入内容进行严格过滤
    • 限制缓存文件的写入目录和权限
    • 对缓存文件内容进行校验
  2. SQL注入漏洞修复

    • 使用预处理语句
    • 对输入参数进行严格过滤
    • 实现安全的SQL拼接方法

通过本文档的详细分析,安全研究人员可以掌握WuzhiCMS的审计方法,并应用到其他CMS系统的漏洞挖掘中。

WuzhiCMS漏洞审计与分析教学文档 一、前言 本文档详细记录WuzhiCMS的文件写入漏洞和SQL注入漏洞的审计过程,分享审计技巧和方法,适合想要学习代码审计的安全研究人员。 二、WuzhiCMS路由规则分析 1. 入口文件 入口文件: index.php 核心加载方法: load_class() 2. 类加载机制 如果 $static_class 变量中存在类就直接获取 否则从路径 coreframe/app/core/libs/class/$class.class.php 中加载 类名格式: WUZHI_$class (如 load_class('application') 加载 WUZHI_application 类) 3. 路由配置 通过 get_config(route_config) 方法读取 www/configs/route_config.php 配置 路由配置示例: 表示调用content模块的index.php文件的init()方法 4. 目录结构与访问形式 模块路径: coreframe/app/content URL访问形式: 三、文件写入漏洞审计 1. 漏洞定位 关键函数: file_put_contents 审计目标:检查 file_put_contents 函数的参数是否可控 2. 漏洞发现 文件路径: coreframe/app/core/libs/function/common.func.php 漏洞函数: set_cache $filename 和 $data 参数可控 3. 调用链分析 set_cache 方法被 coreframe/app/attachment/admin/index.php 的 set 方法调用 $data 来自 $GLOBALS['setting'] ,完全可控 缓存文件名不可控,需要寻找包含该缓存文件的位置 4. 利用条件 需要找到调用 get_cache() 方法的地方 发现 ueditor 方法调用了 get_cache() 四、SQL注入漏洞审计 1. 漏洞定位 关键方法:搜索SQL查询语句 审计目标:检查SQL语句拼接处是否存在可控参数 2. 漏洞发现 文件路径: coreframe/app/core/libs/class/mysql.class.php 漏洞方法: query 3. 调用链分析 query 方法被多处调用 重点关注 delete 方法中的调用: $where 参数直接拼接到SQL语句中 4. 参数溯源 $where 参数由全局变量 keyword 赋值 参数完全可控且无过滤 5. 完整利用链 copyfrom 文件下的 listing 方法 接收可控全局变量参数 keywords 赋值给 $where 插入SQL查询语句并执行 五、漏洞验证 1. 文件写入漏洞验证 通过控制 $GLOBALS['setting'] 写入恶意代码 通过 ueditor 方法包含缓存文件执行代码 2. SQL注入漏洞验证 通过控制 keywords 参数构造恶意SQL 成功实现延时注入验证 六、审计技巧总结 路由分析 :首先理解框架的路由机制,便于定位功能对应的代码文件 危险函数追踪 :重点关注 file_put_contents 、 eval 、 system 等危险函数 参数溯源 :对危险函数的参数进行逆向追踪,检查是否可控 调用链分析 :完整分析漏洞函数的调用链,确认利用条件 SQL注入审计 : 搜索直接执行SQL的方法(如 query ) 检查SQL拼接处的参数是否可控 追踪参数来源,确认过滤情况 七、修复建议 文件写入漏洞修复 : 对写入内容进行严格过滤 限制缓存文件的写入目录和权限 对缓存文件内容进行校验 SQL注入漏洞修复 : 使用预处理语句 对输入参数进行严格过滤 实现安全的SQL拼接方法 通过本文档的详细分析,安全研究人员可以掌握WuzhiCMS的审计方法,并应用到其他CMS系统的漏洞挖掘中。