审计某站泄露的源码
字数 1406 2025-08-22 18:37:22

ThinkPHP框架与易优CMS漏洞审计教学文档

一、漏洞点一:文件内容读取与日志写入漏洞

漏洞原理

  1. 存在一个可通过HTTP请求或伪协议(php://input)控制$res变量的功能点
  2. 使用file_get_contents读取内容但不输出结果
  3. 读取内容会被写入日志文件

利用方式

  1. 构造请求:
    url=http://ip:8000/ct_ceshi.php&method=get&post[a]=111
    
  2. 尝试使用伪协议:
    • php://input 可控制输入内容
    • 但由于无回显,需通过日志间接获取

日志文件特征

  1. 路径格式:/soapGetDateXt/[日期]/[方法]/[时间]_[随机数].txt
    示例:https://xxx.xxx/soapGetDateXt/2024-09-02/get/16_45_48_10000.txt
  2. 日志内容包含file_get_contents读取的数据

限制条件

  1. 文件名截断尝试:
    • %00截断:需PHP版本<5.3.4且magic_quotes_gpc=off
    • 长度截断:需PHP版本<5.2.8

二、漏洞点二:cURL利用漏洞

漏洞原理

  1. 使用curl_exec执行请求但无输出
  2. 可控制请求目标

潜在利用方式

  1. 使用伪协议:
    • dict://:可探测Redis未授权等漏洞
    • file://:读取本地文件
    • gopher://:构造特定协议攻击
  2. 由于无回显,需结合其他漏洞利用

三、漏洞点三:文件上传漏洞

漏洞原理

  1. 存在文件上传功能
  2. 缺少CURLOPT_POSTFIELDS的严格限制

利用条件

  1. 若存在CURLOPT_POSTFIELDS选项,可实现文件读取
  2. 实际漏洞中该选项缺失,利用受限

测试方法

  1. 本地搭建环境验证
  2. 构造恶意上传请求

四、漏洞点四:SQL注入漏洞

漏洞原理

  1. ThinkPHP3框架SQL注入漏洞
  2. 未对输入参数进行充分过滤

参考资源

ThinkPHP3 SQL注入分析

利用方式

  1. 构造恶意SQL语句
  2. 通过特定参数触发注入

五、漏洞点五:易优CMS任意文件删除漏洞

漏洞原理

  1. 头像上传功能存在缺陷
  2. 系统会删除上一次头像的路径
  3. 通过两次上传可删除任意文件

利用步骤

  1. 第一次上传:设置目标文件(如/robots.txt)为头像路径
  2. 第二次上传:上传正常头像
  3. 系统自动删除第一次设置的路径

修复情况

  1. 新版易优CMS对filename参数增加了限制
  2. 老版本仍存在此漏洞

六、漏洞利用综合防御建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 限制文件路径参数中的特殊字符
  2. 日志安全

    • 日志文件不应存放在web可访问目录
    • 对日志文件设置适当权限
  3. 框架更新

    • 及时更新ThinkPHP等框架到最新版本
    • 特别关注已知漏洞修复版本
  4. 函数安全

    • 避免直接使用file_get_contents处理用户输入
    • curl_exec等函数增加输出限制
  5. 文件操作

    • 实现安全的文件删除机制
    • 对删除操作增加权限检查和路径验证

七、实验环境搭建指南

  1. 使用虚拟机搭建测试环境
  2. 部署易优CMS老版本(存在漏洞版本)
  3. 配置PHP 5.2.x环境测试截断漏洞
  4. 使用Burp Suite等工具构造恶意请求

八、参考工具

  1. 漏洞验证

    • Burp Suite
    • Postman
    • cURL命令行工具
  2. 环境搭建

    • Docker
    • XAMPP/WAMP
    • 虚拟机软件(VirtualBox/VMware)
  3. 代码审计

    • RIPS
    • PHPStan
    • 手动代码审查
ThinkPHP框架与易优CMS漏洞审计教学文档 一、漏洞点一:文件内容读取与日志写入漏洞 漏洞原理 存在一个可通过HTTP请求或伪协议( php://input )控制 $res 变量的功能点 使用 file_get_contents 读取内容但不输出结果 读取内容会被写入日志文件 利用方式 构造请求: 尝试使用伪协议: php://input 可控制输入内容 但由于无回显,需通过日志间接获取 日志文件特征 路径格式: /soapGetDateXt/[日期]/[方法]/[时间]_[随机数].txt 示例: https://xxx.xxx/soapGetDateXt/2024-09-02/get/16_45_48_10000.txt 日志内容包含 file_get_contents 读取的数据 限制条件 文件名截断尝试: %00 截断:需PHP版本<5.3.4且 magic_quotes_gpc=off 长度截断:需PHP版本 <5.2.8 二、漏洞点二:cURL利用漏洞 漏洞原理 使用 curl_exec 执行请求但无输出 可控制请求目标 潜在利用方式 使用伪协议: dict:// :可探测Redis未授权等漏洞 file:// :读取本地文件 gopher:// :构造特定协议攻击 由于无回显,需结合其他漏洞利用 三、漏洞点三:文件上传漏洞 漏洞原理 存在文件上传功能 缺少 CURLOPT_POSTFIELDS 的严格限制 利用条件 若存在 CURLOPT_POSTFIELDS 选项,可实现文件读取 实际漏洞中该选项缺失,利用受限 测试方法 本地搭建环境验证 构造恶意上传请求 四、漏洞点四:SQL注入漏洞 漏洞原理 ThinkPHP3框架SQL注入漏洞 未对输入参数进行充分过滤 参考资源 ThinkPHP3 SQL注入分析 利用方式 构造恶意SQL语句 通过特定参数触发注入 五、漏洞点五:易优CMS任意文件删除漏洞 漏洞原理 头像上传功能存在缺陷 系统会删除上一次头像的路径 通过两次上传可删除任意文件 利用步骤 第一次上传:设置目标文件(如 /robots.txt )为头像路径 第二次上传:上传正常头像 系统自动删除第一次设置的路径 修复情况 新版易优CMS对 filename 参数增加了限制 老版本仍存在此漏洞 六、漏洞利用综合防御建议 输入验证 : 对所有用户输入进行严格过滤 限制文件路径参数中的特殊字符 日志安全 : 日志文件不应存放在web可访问目录 对日志文件设置适当权限 框架更新 : 及时更新ThinkPHP等框架到最新版本 特别关注已知漏洞修复版本 函数安全 : 避免直接使用 file_get_contents 处理用户输入 对 curl_exec 等函数增加输出限制 文件操作 : 实现安全的文件删除机制 对删除操作增加权限检查和路径验证 七、实验环境搭建指南 使用虚拟机搭建测试环境 部署易优CMS老版本(存在漏洞版本) 配置PHP 5.2.x环境测试截断漏洞 使用Burp Suite等工具构造恶意请求 八、参考工具 漏洞验证 : Burp Suite Postman cURL命令行工具 环境搭建 : Docker XAMPP/WAMP 虚拟机软件(VirtualBox/VMware) 代码审计 : RIPS PHPStan 手动代码审查