ThinkPHP < 5.0.24 远程代码执行高危漏洞 修复方案
漏洞描述
由于ThinkPHP5.0框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。
漏洞评级
严重
影响版本
ThinkPHP 5.0系列 < 5.0.24
安全版本
ThinkPHP 5.0系列 5.0.24
ThinkPHP 5.1系列 5.1.31
安全建议
升级ThinkPHP至安全版本
修复方法1.打开
thinkphplibrarythinkRequest.php
搜索
public function method($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; }
改成:
public function method($method = false) { if (true === $method) { // 获取原始请求类型 return $this->server('REQUEST_METHOD') ?: 'GET'; } elseif (!$this->method) { if (isset($_POST[Config::get('var_method')])) { $method = strtoupper($_POST[Config::get('var_method')]); if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) { $this->method = $method; $this->{$this->method}($_POST); } else { $this->method = 'POST'; } unset($_POST[Config::get('var_method')]); } 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; }
保存,覆盖 测试无误 漏洞修复完成

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JAVA学习day04
1、选择语句switch编写格式Switch( 表达式 ){ Case 常量1: 要执行的语句; Break; Case 常量2: 要执行的语句; Break; Case 常量3: 要执行的语句; Break; Default: 要执行的语句; Break; }执行流程:表达式,和case后面的常量进行比较和哪个case后的常量相同,就执行哪个case后面的程序,遇到break,就全部结束; 2、case的穿透性案例:星期1-5 工作日 星期6-7 输出休息日case 1 case 2 case 3 case 4 case 5 输出结果相同 case后面的常量,和switch中数据相同,没有break,一直向下穿透case后面没有break,程序就会一直向下穿透 3、数组数据多了存数组(原因:数据太多,定义变量,容易造成代码重复) 定义数组容器 定义数组容器,要素,强制数据类型的语言 必须要有数据类型,大小,就是存储数据的个数 定义数组公式: 数组类型 [] 变量名 = new 数据类型 [存储元素的个数] 数据类型:数组中存储元素的数据类型 [] 表示数组的意思 变量 自定义标识符 ...
- 下一篇
JUC包中的分而治之策略-为提高性能而生
一、前言 本次分享我们来共同探讨JUC包中一些有意思的类,包含AtomicLong & LongAdder,ThreadLocalRandom原理。 二、AtomicLong & LongAdder 2.1 AtomicLong 类 AtomicLong是JUC包提供的原子性操作类,其内部通过CAS保证了对计数的原子性更新操作。 大家可以翻看源码发现内部是通过UnSafe(rt.jar)这个类的CAs操作来保证对内部的计数器变量 long value进行原子性更新的,比如JDK8中: public final long incrementAndGet() { return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L; } 其中unsafe
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器