北京师范大学网络与信息安全服务平台
   
当前位置: 首页 » 通知公告
Thinkphp5.1~ 5.2全版本代码执行漏洞预警
发布时间: 2019-01-16  

一.序言

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

二.漏洞分析: 

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

    /**
     * 当前的请求类型
     * @access public
     * @param  bool $origin  是否获取原始请求类型
     * @return string
     */
    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请求):

弹出计算器

三.受影响的产品: 

    ThinkPHP    5.1.*

    ThinkPHP    5.2.*

四.解决方案:

关闭屏蔽异常和错误选项

五.漏洞状态:

官方尚未发布相关补丁,请关注官方动态

六.附录:

    个人风险等级与威胁系数

风险等级

威胁系数

高危

70~100

中危

40~70

低危

20~40

    企业风险等级与威胁系数

风险等级

威胁系数

严重

90~100

高危

70~90

中危

40~70

低危

20~40

无影响

0~20

  

    


 
北京师范大学网络与信息安全服务平台