私は、XML外部エンティティ攻撃とリモートファイルインクルージョン攻撃について研究していました。
私の理解によると、XML外部エンティティ攻撃とは、WebアプリケーションのXMLパーサーで外部エンティティを有効にするオプションがあり、攻撃者がリモートサーバーから外部XMLを解析してコマンドを実行したり、ローカルシステムファイルを読み取ったりできることです。
リモートファイルインクルード攻撃は、攻撃者がリモートサーバー上にあるファイルをシステムに実行させることができ、このファイルの内容も悪意のあるものであり、攻撃者はシステムレベルのファイルにアクセスしたり、バックドアをインストールしたりすることもできますこの脆弱性を使用します。
XML外部エンティティ攻撃とリモートファイルインクルード攻撃を区別することはできません。どちらの攻撃も、リモートファイルの実行が情報の漏洩につながる可能性があるためです。
リモートファイルインクルードで最も悪名高いプログラミング言語はPHPです。以下は、PHPリモートファイルインクルードの脆弱性に関するウィキペディアの記事 " File Inlucsion Vulnerability "のPHPサンプルコードです。この例では、外部サーバーのコードが含まれています。リモートファイルインクルードは、リモートコード実行クラスの脆弱性です。
<?php
if ( isset( $_GET['language'] ) ) {
include( $_GET['language'] . '.php' );
}
?>
XXE(XML外部エンティティ)の脆弱性も上記の例に似ている可能性があります。以下は [〜#〜] owasp [〜#〜] からの例で、コードを実行するために予期スキームを悪用しています。これはPHP専用です。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
Expectスキームはコマンドを実行します(PHPコードとしてではなく、OSレベルで)。PHPには ドキュメント があり、期待スキームが使用されることを意図しています。
しかし、PHPからフォーカスを外してWebアプリケーション全般を見ると、XXEは、ローカルファイル(または脆弱なWebアプリケーションがネットワークにアクセスできるリモートファイル)を見るためだけに悪用されることがよくあります。通常、次のペイロードで行われます。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
XXEの別の誤用ケースは、GETメソッドを使用して内部Webアプリケーションへの機密呼び出しをトリガーするために使用できることです。例えば:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "https://internal.hawaii.gov/api/pacom/alert" >]><foo>&xxe;</foo>
しかし、結論としては、リモートファイルのインクルードとXXEは無関係です。どちらもリモートでコードが実行される可能性があります。しかし、一般的に、リモートファイルのインクルードはリモートコード実行であり、XXEは、(サーバー上の)ローカルファイルからデータを盗むために悪用されます