ThinkPHP: Request.php 远程代码执行漏洞修复

关注安全
0 573

ThinkPHP:小于5.0.24版本 Request.php 远程代码执行漏洞修复

打开:/thinkphp/library/think/Request.php 搜索:public function method($method = false),大概在第502行 将以下代码: public function method($method = false) {   if (true === $method) {     // 获取原始请求类型     return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);   } 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 = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);     }   }   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; }

ThinkPHP:小于5.0.24版本 Request.php 远程代码执行漏洞修复



找到文件:thinkphp/library/think/Request.php 修改method方法


public function method($method = false)
 2     {
 3         if (true === $method) {
 4             // 获取原始请求类型
 5             return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
 6         } elseif (!$this->method) {
 7             if (isset($_POST[Config::get('var_method')])) {
 8                 $this->method = strtoupper($_POST[Config::get('var_method')]); <font color="#ff0000" size="5">if(in_array($this->method,array('POST','GET','DELETE','PUT','PATCH'))) $this->{$this->method}($_POST);
 9             } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
10                 $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
11             } else {
12                 $this->method = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
13             }
14         }
15         return $this->method;
16     }

添加标红行代码。

if(in_array($this->method,array('POST','GET','DELETE','PUT','PATCH')))

分析黑客攻击:

利用tp漏洞,让过安全拦截直接远程攻击。

他们常用攻击应该是:最低级的脚本小子 

绕过杀软 就是 绕过对方的规则库。。

然后 安全狗会检测 你的png 图片是图片 还是一个被伪装成png图片的 一个shell脚本。。

会想尽所有的办法 伪装自己的shell脚本。。