记一次渗透测试
字数 1370 2025-08-26 22:11:57

ThinkPHP 3.2.3 渗透测试实战分析

0x01 信息收集阶段

URL结构分析

  • 初始URL: http://www.*.com/index.php/Home/News/lists/c_id/12.html
  • 通过修改URL路径识别框架:
    • 修改为: http://www.*.com/index.php/User/News/lists/c_id/12.html
    • 确认目标使用ThinkPHP框架,版本3.2.3

目录探测技巧

  1. 日志文件探测:

    • ThinkPHP通常将日志存储在runtime目录
    • 尝试访问/runtime目录,但目标不存在此目录
  2. 后台路径猜测:

    • ThinkPHP单入口模式下,可直接在index.php后加admin尝试访问后台
    • 成功发现后台路径: http://www.*.com/index.php/admin

0x02 代码审计阶段

框架结构分析

  • 后台控制器继承两类:
    • AuthController: 需要身份认证
    • Controller: 无需认证

重点审计目标

寻找继承Controller的控制器文件:

  • login.php
  • Ajax.php
  • Dep.php
  • Empty.php

漏洞发现

AjaxController.class.php中发现无条件SQL注入漏洞:

public function getRegion(){
    $Region=M("region");
    $map['pid']=$_REQUEST["pid"];  // 直接使用用户输入,未过滤
    $map['type']=$_REQUEST["type"]; // 直接使用用户输入,未过滤
    $list=$Region->where($map)->select();
    echo json_encode($list);
}

漏洞特征:

  • 直接使用$_REQUEST获取参数
  • 未进行任何过滤直接拼接到SQL查询
  • 返回JSON格式数据

0x03 漏洞利用

SQL注入利用

  • 确认目标无WAF防护
  • 可直接使用sqlmap进行自动化注入:
    sqlmap -u "http://www.*.com/index.php/Ajax/getRegion?pid=1&type=1" --technique=B --dbms=mysql
    

0x04 提权与Getshell

环境信息

  • 服务器环境: PHP + IIS7.5

利用思路

  1. 上传点寻找:

    • 寻找任意图片上传功能
    • 通过修改文件扩展名或内容绕过限制
  2. 解析漏洞利用:

    • 利用IIS7.5 + FastCGI解析漏洞
    • 典型payload: 上传.php文件,访问时附加/.jpg后缀使IIS以PHP解析

0x05 防御建议

针对ThinkPHP开发

  1. 输入过滤:

    • 所有用户输入必须经过过滤
    • 使用框架提供的I()函数进行安全过滤
  2. 安全配置:

    • 关闭调试模式
    • 设置APP_DEBUG为false
    • 限制日志目录访问
  3. 权限控制:

    • 所有业务控制器应继承需要认证的基类
    • 严格区分前后台权限

针对服务器配置

  1. WAF部署:

    • 部署Web应用防火墙
    • 过滤常见攻击payload
  2. 上传限制:

    • 严格限制上传文件类型
    • 使用文件内容检测而非扩展名判断
  3. 解析安全:

    • 更新IIS和FastCGI到最新版本
    • 配置正确的处理器映射

附录:渗透测试检查清单

  1. ThinkPHP特征检查:

    • [ ] 检查URL路由模式
    • [ ] 探测/index.php?s=/模块/控制器/方法形式URL
    • [ ] 检查/runtime日志目录
  2. 后台路径探测:

    • [ ] /admin
    • [ ] /manage
    • [ ] /backend
  3. 常见漏洞检查:

    • [ ] 未过滤的$_GET/$_POST/$_REQUEST使用
    • [ ] 继承无认证控制器的业务逻辑
    • [ ] 任意文件上传点
  4. 环境漏洞检查:

    • [ ] IIS解析漏洞
    • [ ] FastCGI配置问题
    • [ ] 目录遍历漏洞
ThinkPHP 3.2.3 渗透测试实战分析 0x01 信息收集阶段 URL结构分析 初始URL: http://www.*.com/index.php/Home/News/lists/c_id/12.html 通过修改URL路径识别框架: 修改为: http://www.*.com/index.php/User/News/lists/c_id/12.html 确认目标使用ThinkPHP框架,版本3.2.3 目录探测技巧 日志文件探测 : ThinkPHP通常将日志存储在 runtime 目录 尝试访问 /runtime 目录,但目标不存在此目录 后台路径猜测 : ThinkPHP单入口模式下,可直接在 index.php 后加 admin 尝试访问后台 成功发现后台路径: http://www.*.com/index.php/admin 0x02 代码审计阶段 框架结构分析 后台控制器继承两类: AuthController : 需要身份认证 Controller : 无需认证 重点审计目标 寻找继承 Controller 的控制器文件: login.php Ajax.php Dep.php Empty.php 漏洞发现 在 AjaxController.class.php 中发现无条件SQL注入漏洞: 漏洞特征: 直接使用 $_REQUEST 获取参数 未进行任何过滤直接拼接到SQL查询 返回JSON格式数据 0x03 漏洞利用 SQL注入利用 确认目标无WAF防护 可直接使用sqlmap进行自动化注入: 0x04 提权与Getshell 环境信息 服务器环境: PHP + IIS7.5 利用思路 上传点寻找 : 寻找任意图片上传功能 通过修改文件扩展名或内容绕过限制 解析漏洞利用 : 利用IIS7.5 + FastCGI解析漏洞 典型payload: 上传 .php 文件,访问时附加 /.jpg 后缀使IIS以PHP解析 0x05 防御建议 针对ThinkPHP开发 输入过滤 : 所有用户输入必须经过过滤 使用框架提供的 I() 函数进行安全过滤 安全配置 : 关闭调试模式 设置 APP_DEBUG 为false 限制日志目录访问 权限控制 : 所有业务控制器应继承需要认证的基类 严格区分前后台权限 针对服务器配置 WAF部署 : 部署Web应用防火墙 过滤常见攻击payload 上传限制 : 严格限制上传文件类型 使用文件内容检测而非扩展名判断 解析安全 : 更新IIS和FastCGI到最新版本 配置正确的处理器映射 附录:渗透测试检查清单 ThinkPHP特征检查: [ ] 检查URL路由模式 [ ] 探测 /index.php?s=/模块/控制器/方法 形式URL [ ] 检查 /runtime 日志目录 后台路径探测: [ ] /admin [ ] /manage [ ] /backend 常见漏洞检查: [ ] 未过滤的 $_GET/$_POST/$_REQUEST 使用 [ ] 继承无认证控制器的业务逻辑 [ ] 任意文件上传点 环境漏洞检查: [ ] IIS解析漏洞 [ ] FastCGI配置问题 [ ] 目录遍历漏洞