PHP フレームワークのスリム アーキテクチャには XXE の脆弱性があります (XXE の典型的な形式)
【旧正月なので、過去記事を毎日1記事、計7記事投稿していきます。 】
最新の cms フレームワーク (laraval/symfony/slim) の出現により、今日の PHP 脆弱性の出現ポイント、原理、利用方法にいくつかの変化が生じています このシリーズでは、私が発見したそのような cms 脆弱性についてまとめていきたいと思います。
Slim は高度な設計アイデアを備えたよく知られた PHP 軽量フレームワークであり、これまでに 100 万人を超えるユーザーがいます。はフレームワークベースの CMS 専用の抜け穴であり、 にのみ現れます。
公式 Web サイト: http://www.slimframework.com/
脆弱性の詳細
この脆弱性は最新バージョン (3.0) に存在します。 まず、composer を使用してインストールします
composer には、slim/slim "^3.0@RC" が必要です
POST を取得するには、そのドキュメントを参照してください: http://www.slimframework.com/docs/objects/request.html#the-request-body data は getParsedBody メソッドを使用し、このメソッドは content-type に従って POST を区別して解析します。
この投稿でも言及されている非常に典型的な問題です: http://zone.org/content/ 19908 フレームワークは、必要のない「ヘルプ」を開発者に提供することがあります。たとえば、slimphp では、通常の POST の content-type は application/x-www-form-urlencoded です。 application/jsonに変更するとPOSTデータをjson形式で渡すことができ、application/xmlに変更するとXML形式でデータを渡すことができます。 この機能は次の 2 つの問題を引き起こします:
WAF のバイパス
XXE の脆弱性の可能性
- 言うまでもなく、従来の WAF は通常、データ型が指定された場合、application/x-www-form-urlencoded データのみを検出します。が変更されると、すべての主要な WAF が強制終了されます。 XXE がこの脆弱性の焦点です。 本文を解析するコードが表示されます:
-
public function __construct($method, UriInterface $uri, HeadersInterface $headers, array $cookies, array $serverParams, StreamInterface $body, array $uploadedFiles = []) { $this->originalMethod = $this->filterMethod($method); $this->uri = $uri; $this->headers = $headers; $this->cookies = $cookies; $this->serverParams = $serverParams; $this->attributes = new Collection(); $this->body = $body; $this->uploadedFiles = $uploadedFiles; if (!$this->headers->has('Host') || $this->uri->getHost() !== '') { $this->headers->set('Host', $this->uri->getHost()); } $this->registerMediaTypeParser('application/json', function ($input) { return json_decode($input, true); }); $this->registerMediaTypeParser('application/xml', function ($input) { return simplexml_load_string($input); }); $this->registerMediaTypeParser('text/xml', function ($input) { return simplexml_load_string($input); }); $this->registerMediaTypeParser('application/x-www-form-urlencoded', function ($input) { parse_str($input, $data); return $data; }); }
ログイン後にコピー 実際、解析コードは Request クラスのコンストラクター内のコールバック関数として記述されます。 $input を解析するために simplexml_load_string が直接呼び出され、XML エンティティ インジェクションの脆弱性が引き起こされていることがわかります。 したがって、スリムフレームワーク 3.0 で開発された CMS は、POST データを取得する限り、この XXE 脆弱性の影響を受けます。
脆弱性の証明
POST 情報を取得して出力する関数が 1 つだけある最も単純なデモ ページを作成します:
require 'vendor/autoload.php';$app = new \Slim\App();$app->post("/post", function($request, $response) { $parsedBody = $request->getParsedBody(); print_r($parsedBody);});$app->run();
3 つのホワイト ハットが組み込まれています: http://520fdc0ca2c37864f.jie.sangebaimao.com/
通常のリクエスト:
XXE 脆弱性をトリガーし、/etc/passwd を読み取ります:
脆弱性修正
slimphp2 では、公式がこれに対していくつかの処理を行っています:
/** * Parse XML * * This method creates a SimpleXMLElement * based upon the XML input. If the SimpleXML * extension is not available, the raw input * will be returned unchanged. * * @param string $input * @return \SimpleXMLElement|string */ protected function parseXml($input) { if (class_exists('SimpleXMLElement')) { try { $backup = libxml_disable_entity_loader(true); $result = new \SimpleXMLElement($input); libxml_disable_entity_loader($backup); return $result; } catch (\Exception $e) { // Do nothing } } return $input; }
バージョン 3.0 で公式が無視した理由はわかりません。問題。 理由は 2 つあると考えられます:
公式はこの問題に気づいていますが、バージョン 3.0 で必要な PHP バージョンは 5.5 以降であると信じており、5.5 以降の PHP には XXE の隠れた危険性がないと誤解しています。しかし実際には、XML 外部エンティティの解析は PHP のバージョンとは関係なく、コンパイル時の libxml ライブラリのバージョンに関係します。
当局はまだこの問題に気づいていません。
- 私は前者の可能性が高いような気がします。 したがって、解決策は引き続き 2 の解決策に従うことになります。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています
