PHP审计- TP3某二次开发程序
字数 1147 2025-08-22 12:23:47

ThinkPHP3 二次开发程序安全审计报告

1. 概述

本文档对某ThinkPHP3二次开发程序进行了详细的安全审计,发现了多个高危漏洞,包括任意文件上传和SQL注入漏洞。审计过程涵盖了漏洞发现、分析、验证和利用的全过程。

2. 环境准备

2.1 源码安装

  1. 创建数据库
  2. 导入数据库文件
  3. 更改数据库配置文件

3. 漏洞分析

3.1 后门文件发现

初步扫描发现以下可疑文件:

  • 大马后门:da.php
  • 多个图片马后门

3.2 任意文件上传漏洞

3.2.1 漏洞位置

handle_file_upload 方法

3.2.2 漏洞分析

  1. 方法参数:该方法有7个参数

  2. 文件处理流程

    • 创建空对象:$file = new \stdClass()
    • 调用get_file_name方法处理文件名
    • 调用trim_file_name方法进一步处理
  3. 文件名处理细节

    • trim_file_name方法:
      • 去除反斜杠
      • 使用basename获取文件名
      • 使用trim去除特殊字符
      • 生成基于时间的文件名(将.替换为-
  4. 文件上传流程

    • 调用get_unique_filename确保文件名唯一
    • 调用fix_integer_overflow检查文件大小
    • 调用get_upload_path获取上传路径
    • 直接使用move_uploaded_file移动文件
  5. 关键问题

    • 无文件类型检查
    • 无后缀名过滤

3.2.3 漏洞利用

构造HTML表单上传恶意文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" 
      action="http://127.0.0.1/Public/Inner/Js/uploader/server/php/index.php" 
      method="post">
    <input type="file" name="files"/>
    <input type="submit" value="submit"/>
</form>
</body>
</html>

上传成功后会返回文件路径,可直接获取Webshell。

3.3 SQL注入漏洞

3.3.1 漏洞位置

IndexController.class.php中的login方法

3.3.2 漏洞分析

  1. 输入处理

    • 使用TP3的I方法获取namepwd参数
    • 直接拼接参数到SQL条件中
  2. 数据库操作

    • 实例化User模型
    • 使用field获取全部字段
    • 使用where构建条件表达式
    • 使用find执行查询
  3. 关键问题

    • 无全局过滤
    • 输入参数直接拼接到SQL语句

3.3.3 漏洞验证

使用SQLMap验证注入点:

POST /index.php?a=login&c=Index&m=Index HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: http://192.168.7.154/
Cookie: PHPSESSID=pqim3lngnotf1p4sj15qurnef0
Content-Length: 97
Host: 192.168.7.154

device=0&name=*&pwd=d41d8cd98f00b204e9800998ecf8427e

4. 修复建议

4.1 任意文件上传漏洞修复

  1. 添加文件类型白名单检查
  2. 限制可上传文件扩展名
  3. 对上传文件进行重命名
  4. 设置文件大小限制
  5. 将上传目录设置为不可执行

4.2 SQL注入漏洞修复

  1. 使用预处理语句
  2. 对输入参数进行过滤
  3. 启用TP3的全局过滤机制
  4. 使用参数绑定方式构建查询

5. 总结

本次审计发现了两个高危漏洞,反映了开发过程中安全意识的不足。建议开发团队:

  1. 加强输入验证
  2. 实施最小权限原则
  3. 定期进行代码审计
  4. 建立安全开发规范

附录:漏洞验证截图

(此处可添加漏洞验证成功的截图)

ThinkPHP3 二次开发程序安全审计报告 1. 概述 本文档对某ThinkPHP3二次开发程序进行了详细的安全审计,发现了多个高危漏洞,包括任意文件上传和SQL注入漏洞。审计过程涵盖了漏洞发现、分析、验证和利用的全过程。 2. 环境准备 2.1 源码安装 创建数据库 导入数据库文件 更改数据库配置文件 3. 漏洞分析 3.1 后门文件发现 初步扫描发现以下可疑文件: 大马后门: da.php 多个图片马后门 3.2 任意文件上传漏洞 3.2.1 漏洞位置 handle_file_upload 方法 3.2.2 漏洞分析 方法参数 :该方法有7个参数 文件处理流程 : 创建空对象: $file = new \stdClass() 调用 get_file_name 方法处理文件名 调用 trim_file_name 方法进一步处理 文件名处理细节 : trim_file_name 方法: 去除反斜杠 使用 basename 获取文件名 使用 trim 去除特殊字符 生成基于时间的文件名(将 . 替换为 - ) 文件上传流程 : 调用 get_unique_filename 确保文件名唯一 调用 fix_integer_overflow 检查文件大小 调用 get_upload_path 获取上传路径 直接使用 move_uploaded_file 移动文件 关键问题 : 无文件类型检查 无后缀名过滤 3.2.3 漏洞利用 构造HTML表单上传恶意文件: 上传成功后会返回文件路径,可直接获取Webshell。 3.3 SQL注入漏洞 3.3.1 漏洞位置 IndexController.class.php 中的 login 方法 3.3.2 漏洞分析 输入处理 : 使用TP3的 I 方法获取 name 和 pwd 参数 直接拼接参数到SQL条件中 数据库操作 : 实例化User模型 使用 field 获取全部字段 使用 where 构建条件表达式 使用 find 执行查询 关键问题 : 无全局过滤 输入参数直接拼接到SQL语句 3.3.3 漏洞验证 使用SQLMap验证注入点: 4. 修复建议 4.1 任意文件上传漏洞修复 添加文件类型白名单检查 限制可上传文件扩展名 对上传文件进行重命名 设置文件大小限制 将上传目录设置为不可执行 4.2 SQL注入漏洞修复 使用预处理语句 对输入参数进行过滤 启用TP3的全局过滤机制 使用参数绑定方式构建查询 5. 总结 本次审计发现了两个高危漏洞,反映了开发过程中安全意识的不足。建议开发团队: 加强输入验证 实施最小权限原则 定期进行代码审计 建立安全开发规范 附录:漏洞验证截图 (此处可添加漏洞验证成功的截图)