1. 前提知識#
XML は電子ファイルに構造的なマークアップを付けるための言語であり、データのマークアップやデータ型の定義に使用されます。XML ドキュメントの構造には、XML 宣言、DTD(ドキュメントタイプ定義)(オプション)、ドキュメント要素が含まれます。
通常、非同期 JavaScript および XML テクノロジー(Ajax テクノロジー)に始まる:ウェブアプリケーションは、ページ全体をリロード(更新)することなく、増分の更新をユーザーインターフェースに迅速に表示できるようになりました。現在、JSON の使用が XML よりも一般的です。JSON と XML は、Ajax モデルで使用される XML テクノロジーです。このマークアップ言語は、開発者が HTML の任意のデータ構造を定義および表現できるようにします。
一般的な XML の構文構造は次のようになります:
内部エンティティ宣言の形式:<!ENTITY エンティティ名 "エンティティの値">。
外部エンティティの参照形式:<!ENTITY エンティティ名 SYSTEM "URI">
2. 脆弱性の説明#
XML 外部エンティティ注入(XML External Entity)または XXE 脆弱性とは
脆弱性の原理:
XXE 脆弱性は、主に外部エンティティの参照によって引き起こされます。
一般的に、現在のサイトが外部エンティティの参照を許可している場合に発生します。
3. XXE 脆弱性の攻撃#
3.1 リフレクションあり#
- 機密ファイルの読み取り
- PHP の擬似プロトコルを使用したファイルの読み取り
- 内部ネットワークのポートスキャン
- コマンドの実行
3.2 リフレクションなし#
- データを抽出するための外部データチャネルの使用
4. XXE 脆弱性の防御#
- 外部エンティティの使用を禁止する
- ユーザーが提出した XML データをフィルタリングする
- libxml コンポーネントをアップグレードする
最後に、XXE 脆弱性を理解するためのテキストとビデオをご覧ください(科学的なインターネット接続が必要です)