PHP代码审计之wuzhicms
字数 2015 2025-08-25 22:58:20
WuzhiCMS 代码审计与漏洞分析报告
环境搭建
- 下载 WuzhiCMS 最新版本
- 配置 PHP 运行环境(建议 PHP 5.6-7.4)
- 配置数据库并安装系统
系统架构分析
核心框架流程
- 入口文件
index.php包含coreframe框架下的core.php文件 - 调用
load_class加载核心类 - 实例化
WUZHI_application类并调用其run()方法获取路由信息
路由机制
- 路由访问规律:
index.php?m=模块&f=文件&v=方法&_su=wuzhicms - 示例路由:
index.php?m=attachment&f=index&v=ueditor&_su=wuzhicms
漏洞审计与分析
1. SQL 注入漏洞
位置:/coreframe/app/member/admin/group.php 的 del() 函数
漏洞分析:
- 133 行检查
groupid参数是否存在且非空 - 134 行判断
groupid是否为数组 - 调用
delete()函数(位于db.class.php) - SQL 语句未经任何过滤直接拼接执行
- 错误时会直接暴露 SQL 语句,导致报错注入
漏洞复现:
GET /index.php?m=member&f=group&v=del&groupid=1 AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT(version(),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)y) HTTP/1.1
2. 任意文件写入漏洞
位置:coreframe/app/attachment/admin/index.php 的 ueditor() 函数
漏洞分析:
ueditor()函数调用set_cache()函数$GLOBALS['setting']参数可控- 未设置
submit参数时通过get_cache()读取缓存文件内容
漏洞复现:
GET /index.php?m=attachment&f=index&v=ueditor&_su=wuzhicms&submit=XXX&setting=<?php phpinfo();?> HTTP/1.1
3. CSRF 漏洞
位置:coreframe/app/core/admin/power.php 的 add() 函数
漏洞分析:
- 用于添加管理员功能
- 35-37 行检查提交操作和用户名
- 40 行检查用户是否已是管理员
- 44-51 行处理密码设置
- 54 行将数据插入数据库
- 缺乏 CSRF 防护措施
利用方式:
构造恶意页面诱导管理员访问,实现后台管理员账户添加
4. 目录遍历漏洞
位置:使用 glob 函数的功能点
漏洞分析:
glob()函数的$dir参数可控- 通过
template()函数渲染listing.tpl.php文件 - 过滤机制仅替换一次,可通过
.....///形式绕过
漏洞复现:
GET /index.php?dir=.....///etc/passwd&m=attachment&f=index&v=dir&_su=wuzhicms HTTP/1.1
5. 任意文件删除漏洞
位置:my_unlink() 函数调用处
漏洞分析:
- 用于删除附件功能
- 需要传入
id和url参数 remove_xs()函数进行过滤但可绕过- 不传入
id参数时直接删除指定的$path
漏洞复现:
GET /index.php?v=del&url=qr_image/mobile.png&m=attachment&f=index&_su=wuzhicms HTTP/1.1
6. 后台 SQL 注入
位置:copyfrom.php 的 listing 函数
漏洞分析:
- 调用
get_list函数,传入$where参数 $keywords通过$GLOBALS获取且未充分过滤- 闭合方式为
%'
漏洞复现:
GET /index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=%27 HTTP/1.1
7. 前台 SQL 注入
位置:api 目录下的 sms_check 文件
漏洞分析:
- 调用
get_one函数,参数通过$code拼接 $code通过$GLOBALS获取param的值- 仅使用
strip_tags()过滤 HTML 标签 - 二次编码可绕过过滤
漏洞复现:
GET /api/sms_check?param=1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT(version(),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)y)-- HTTP/1.1
8. RCE 漏洞
位置:/wuzhicms/coreframe/app/attachment/admin/index.php
漏洞分析:
- 传递动态函数
sumit时调用set_cache()方法 $cache_path为缓存路径,$filename为缓存文件名file_put_contents无过滤写入$data- 缓存文件被包含时可执行任意代码
利用方式:
- 写入恶意代码到缓存文件
- 触发包含执行
9. 敏感信息泄露
位置:多处功能点
漏洞分析:
- 缺乏对敏感信息的访问控制
- 错误信息暴露系统路径等敏感数据
10. 逻辑漏洞
位置:www/api/uc.php
漏洞分析:
- 通过传参可调用
uc_note类的任意方法 - 类似 zzcms2021 的利用方式
修复建议
- 对所有用户输入进行严格的过滤和验证
- 使用预处理语句防止 SQL 注入
- 实现 CSRF 防护机制
- 限制文件操作函数的参数
- 加强错误处理,避免敏感信息泄露
- 实施严格的权限控制
- 更新到最新版本或应用官方补丁