分享文件写入和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配置 - 路由配置示例:
表示调用content模块的index.php文件的init()方法return array( 'default'=>array('m'=>'content', 'f'=>'index', 'v'=>'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_cachefunction 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.php的set方法调用$data来自$GLOBALS['setting'],完全可控- 缓存文件名不可控,需要寻找包含该缓存文件的位置
4. 利用条件
- 需要找到调用
get_cache()方法的地方 - 发现
ueditor方法调用了get_cache()
四、SQL注入漏洞审计
1. 漏洞定位
- 关键方法:搜索SQL查询语句
- 审计目标:检查SQL语句拼接处是否存在可控参数
2. 漏洞发现
- 文件路径:
coreframe/app/core/libs/class/mysql.class.php - 漏洞方法:
queryfunction 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. 完整利用链
copyfrom文件下的listing方法- 接收可控全局变量参数
keywords - 赋值给
$where - 插入SQL查询语句并执行
五、漏洞验证
1. 文件写入漏洞验证
- 通过控制
$GLOBALS['setting']写入恶意代码 - 通过
ueditor方法包含缓存文件执行代码
2. SQL注入漏洞验证
- 通过控制
keywords参数构造恶意SQL - 成功实现延时注入验证
六、审计技巧总结
- 路由分析:首先理解框架的路由机制,便于定位功能对应的代码文件
- 危险函数追踪:重点关注
file_put_contents、eval、system等危险函数 - 参数溯源:对危险函数的参数进行逆向追踪,检查是否可控
- 调用链分析:完整分析漏洞函数的调用链,确认利用条件
- SQL注入审计:
- 搜索直接执行SQL的方法(如
query) - 检查SQL拼接处的参数是否可控
- 追踪参数来源,确认过滤情况
- 搜索直接执行SQL的方法(如
七、修复建议
-
文件写入漏洞修复:
- 对写入内容进行严格过滤
- 限制缓存文件的写入目录和权限
- 对缓存文件内容进行校验
-
SQL注入漏洞修复:
- 使用预处理语句
- 对输入参数进行严格过滤
- 实现安全的SQL拼接方法
通过本文档的详细分析,安全研究人员可以掌握WuzhiCMS的审计方法,并应用到其他CMS系统的漏洞挖掘中。