首页 > 开发 > ThinkPHP > 正文

ThinkPHP < 5.0.24 远程代码执行高危漏洞的修复方案

2024-09-09 15:20:32
字体:
来源:转载
供稿:网友

本篇文章主要给大家介绍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

搜索

  1. public function method($method = false) 
  2.  
  3.     { 
  4.  
  5.         if (true === $method) { 
  6.  
  7.             // 获取原始请求类型 
  8.  
  9.             return $this->server('REQUEST_METHOD') ?: 'GET'
  10.  
  11.         } elseif (!$this->method) { 
  12.  
  13.             if (isset($_POST[Config::get('var_method')])) { 
  14.  
  15.                 $this->method = strtoupper($_POST[Config::get('var_method')]); 
  16.  
  17.                 $this->{$this->method}($_POST); 
  18.  
  19.             } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) { 
  20.  
  21.                 $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']); 
  22.  
  23.             } else { 
  24.  
  25.                 $this->method = $this->server('REQUEST_METHOD') ?: 'GET'
  26.  
  27.             } 
  28.  
  29.         } 
  30.  
  31.         return $this->method; 
  32.  
  33.     } 

改成:

  1. public function method($method = false) 
  2.  
  3.     { 
  4.  
  5.         if (true === $method) { 
  6.  
  7.             // 获取原始请求类型 
  8.  
  9.             return $this->server('REQUEST_METHOD') ?: 'GET'
  10.  
  11.         } elseif (!$this->method) { 
  12.  
  13.             if (isset($_POST[Config::get('var_method')])) { 
  14.  
  15.                 $method = strtoupper($_POST[Config::get('var_method')]); 
  16.  
  17.                 if (in_array($method, ['GET''POST''DELETE''PUT''PATCH'])) { 
  18.  
  19.                     $this->method = $method
  20.  
  21.                     $this->{$this->method}($_POST); 
  22.  
  23.                 } else { 
  24.  
  25.                     $this->method = 'POST'
  26.  
  27.                 } 
  28.  
  29.                 unset($_POST[Config::get('var_method')]); 
  30.  
  31.             } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) { 
  32.  
  33.                 $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']); 
  34.  
  35.             } else { 
  36.  
  37.                 $this->method = $this->server('REQUEST_METHOD') ?: 'GET'
  38.  
  39.             } 
  40.  
  41.         } 
  42.  
  43.         return $this->method; 
  44.  
  45.     } 

保存,覆盖 测试无误 漏洞修复完成。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选