实战讲解TP3框架下的渗透思路
字数 983 2025-08-20 18:18:40

ThinkPHP3框架渗透测试实战指南

1. ThinkPHP框架概述

ThinkPHP(TP)是一个开源免费的PHP开发框架,具有以下特点:

  • 快速、简单的面向对象轻量级框架
  • 遵循Apache2开源许可协议
  • 国内主流PHP框架之一,学习成本低

1.1 主要版本及常见漏洞

  • TP3:常见SQL注入漏洞
  • TP5:常见远程代码执行(RCE)漏洞
  • TP6:常见任意文件操作漏洞

2. 渗透测试前期准备

2.1 版本识别技巧

访问路径:xxx/index.php/index/任意字符

  • 通常会返回无法找到控制器的报错信息
  • 报错页面会显示框架版本信息(除非自定义了错误页面)

3. 实战案例1:SVN泄露→SQL注入→GetShell

3.1 SVN信息泄露利用

  1. 尝试访问.SVN目录
  2. 使用工具下载源码:svnExploit

3.2 源码目录结构分析

├── Application          # 应用目录(前后台)
│   ├── Admin            # 后台
│   │   ├── Action       # 控制器(重要)
│   ├── Home             # 前台
│   │   ├── Action       # 控制器(重要)
├── Public               # 公开资源(js/css/images)
├── ThinkPHP             # 框架核心文件
├── Uploads              # 上传文件目录
├── index.php            # 入口文件

3.3 SQL注入漏洞挖掘

  1. 检查登录功能代码
  2. 发现存在SQL注入的参数
  3. 构造Payload:
POST /Home/Login/checkLogin.html HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded

extension=xxx&x[0]=exp&x[1]==(select*from(select+sleep(5)union/**/select+1)a)&password=xxxx
  1. SQLMap使用技巧:
  • 需要对Payload进行简化处理:
extension=xxx&x[0]=exp&x[1]==(select from(*)a)&password=xxxx

3.4 GetShell方法

  1. 全局搜索upload关键字
  2. 发现上传点代码:
public function uploadPic() {
    if ($_FILES['pic']['error'] != 4) {
        $image_name = time() . rand(1000, 9999) . "." . end(explode(".", $_FILES['pic']['name']));
        move_uploaded_file($_FILES['pic']['tmp_name'], './Uploads/images/login_pic/' . $image_name);
        $data['pic_path'] = "/Uploads/images/login_pic/" . $image_name;
        $data['title'] = $_POST['title'];
        $data['addtime'] = time();
        M("login_pic")->add($data);
        $this->success("上传成功");
    } else {
        $this->error("上传失败");
    }
}
  1. 上传路径构造:
  • 访问格式:xxx/index.php/应用名称/控制器名/方法名
  • 示例:xxx/index.php/Admin/Manage/loginPic
  1. 上传后可通过数据库查询文件路径

4. 实战案例2:控制器方法Fuzz

4.1 未授权访问漏洞挖掘

  1. 对控制器方法进行Fuzz测试
  2. 常见路径格式:xxx/index.php/Admin/Manage/loginPic
  3. 可能发现未做权限控制的上传控制器

5. 渗透测试总结

  1. 信息收集

    • 识别框架版本
    • 检查源码泄露(.SVN/.git)
  2. 漏洞挖掘

    • SQL注入:重点检查数据库操作点
    • 文件上传:全局搜索upload关键字
    • 未授权访问:Fuzz控制器和方法
  3. 权限提升

    • 通过低权限账号利用上传漏洞
    • 利用数据库查询获取敏感信息
  4. TP3框架特点

    • 常见于老旧系统
    • SQL注入漏洞较多
    • 权限控制不严格的情况常见

6. 防御建议

  1. 及时升级到最新版本
  2. 严格过滤用户输入
  3. 完善权限控制机制
  4. 禁用或保护版本信息泄露
  5. 定期进行安全审计

通过以上方法,可以系统性地对ThinkPHP3框架应用进行渗透测试,发现并利用常见安全漏洞。

ThinkPHP3框架渗透测试实战指南 1. ThinkPHP框架概述 ThinkPHP(TP)是一个开源免费的PHP开发框架,具有以下特点: 快速、简单的面向对象轻量级框架 遵循Apache2开源许可协议 国内主流PHP框架之一,学习成本低 1.1 主要版本及常见漏洞 TP3 :常见SQL注入漏洞 TP5 :常见远程代码执行(RCE)漏洞 TP6 :常见任意文件操作漏洞 2. 渗透测试前期准备 2.1 版本识别技巧 访问路径: xxx/index.php/index/任意字符 通常会返回无法找到控制器的报错信息 报错页面会显示框架版本信息(除非自定义了错误页面) 3. 实战案例1:SVN泄露→SQL注入→GetShell 3.1 SVN信息泄露利用 尝试访问 .SVN 目录 使用工具下载源码: svnExploit 3.2 源码目录结构分析 3.3 SQL注入漏洞挖掘 检查登录功能代码 发现存在SQL注入的参数 构造Payload: SQLMap使用技巧: 需要对Payload进行简化处理: 3.4 GetShell方法 全局搜索 upload 关键字 发现上传点代码: 上传路径构造: 访问格式: xxx/index.php/应用名称/控制器名/方法名 示例: xxx/index.php/Admin/Manage/loginPic 上传后可通过数据库查询文件路径 4. 实战案例2:控制器方法Fuzz 4.1 未授权访问漏洞挖掘 对控制器方法进行Fuzz测试 常见路径格式: xxx/index.php/Admin/Manage/loginPic 可能发现未做权限控制的上传控制器 5. 渗透测试总结 信息收集 : 识别框架版本 检查源码泄露(.SVN/.git) 漏洞挖掘 : SQL注入:重点检查数据库操作点 文件上传:全局搜索upload关键字 未授权访问:Fuzz控制器和方法 权限提升 : 通过低权限账号利用上传漏洞 利用数据库查询获取敏感信息 TP3框架特点 : 常见于老旧系统 SQL注入漏洞较多 权限控制不严格的情况常见 6. 防御建议 及时升级到最新版本 严格过滤用户输入 完善权限控制机制 禁用或保护版本信息泄露 定期进行安全审计 通过以上方法,可以系统性地对ThinkPHP3框架应用进行渗透测试,发现并利用常见安全漏洞。