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