ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP < 5.0.24 高リスクのリモートコード実行の脆弱性に対する修復計画

ThinkPHP < 5.0.24 高リスクのリモートコード実行の脆弱性に対する修復計画

藏色散人
藏色散人転載
2019-04-29 09:08:168484ブラウズ

この記事では主に、ThinkPHP

ThinkPHP < 5.0.24 高リスクのリモートコード実行の脆弱性に対する修復計画

脆弱性の説明
ThinkPHP5.0 フレームワークの Request クラスのメソッド処理に欠陥があるため、ハッカーは特定のリクエストは GetWebShell に対して直接行うことができます。

脆弱性評価
重大

影響を受けるバージョン
ThinkPHP 5.0シリーズ< 5.0.24

#安全なバージョンThinkPHP 5.0 シリーズ 5.0.24
ThinkPHP 5.1 シリーズ 5.1.31

セキュリティに関する推奨事項ThinkPHP を安全なバージョンにアップグレードする

修復方法 1.


thinkphplibrarythinkRequest.php


を開き、

public function method($method = false)
    {
        if (true === $method) {
            // 获取原始请求类型
            return $this->server(&#39;REQUEST_METHOD&#39;) ?: &#39;GET&#39;;
        } elseif (!$this->method) {
            if (isset($_POST[Config::get(&#39;var_method&#39;)])) {
                $this->method = strtoupper($_POST[Config::get(&#39;var_method&#39;)]);
                $this->{$this->method}($_POST);
            } elseif (isset($_SERVER[&#39;HTTP_X_HTTP_METHOD_OVERRIDE&#39;])) {
                $this->method = strtoupper($_SERVER[&#39;HTTP_X_HTTP_METHOD_OVERRIDE&#39;]);
            } else {
                $this->method = $this->server(&#39;REQUEST_METHOD&#39;) ?: &#39;GET&#39;;
            }
        }
        return $this->method;
    }

を検索します。

public function method($method = false)
    {
        if (true === $method) {
            // 获取原始请求类型
            return $this->server(&#39;REQUEST_METHOD&#39;) ?: &#39;GET&#39;;
        } elseif (!$this->method) {
            if (isset($_POST[Config::get(&#39;var_method&#39;)])) {
                $method = strtoupper($_POST[Config::get(&#39;var_method&#39;)]);
                if (in_array($method, [&#39;GET&#39;, &#39;POST&#39;, &#39;DELETE&#39;, &#39;PUT&#39;, &#39;PATCH&#39;])) {
                    $this->method = $method;
                    $this->{$this->method}($_POST);
                } else {
                    $this->method = &#39;POST&#39;;
                }
                unset($_POST[Config::get(&#39;var_method&#39;)]);
            } elseif (isset($_SERVER[&#39;HTTP_X_HTTP_METHOD_OVERRIDE&#39;])) {
                $this->method = strtoupper($_SERVER[&#39;HTTP_X_HTTP_METHOD_OVERRIDE&#39;]);
            } else {
                $this->method = $this->server(&#39;REQUEST_METHOD&#39;) ?: &#39;GET&#39;;
            }
        }
        return $this->method;
    }

に変更して上書き保存します。テストは正しく行われ、脆弱性の修正は完了しました。

以上がThinkPHP < 5.0.24 高リスクのリモートコード実行の脆弱性に対する修復計画の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はaliyun.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。