[日本語] [English]

SOP

WebページのURL、Admin botのURL、そしてサーバのファイル一式が与えられた。

Webページにアクセスすると、PHPのプログラムが表示された。
このプログラムは、messageを設定すると、Content-Typetext/plain; charset="utf-8"に設定し、 messageの内容のうちflagを置換したものを出力するものだった。
置換先は、アクセス元のIPアドレスが指定のものであれば環境変数FLAGの内容、そうでなければbuckeye{not_the_flag}である。

Content-Typetext/plainとなるので、用意されたWebページを直接Admin botに渡すことでflagを得るのは難しそうである。
そこで、外部のページを用意し、そこから用意されたページを読み込ませてflagを得る方法を考えた。
その結果、scriptタグのsrcにすることで、読み込ませることができそうであることに気がついた。

具体的には、まず以下のプログラムを用意した。
flagに"\といった特殊な文字が含まれると上手く行かないだろうが、それは上手く行かなかった時に考えればいいとした。
なお、xxxxxxxxxxxxxの部分は、実際のRequestBin.comのエンドポイントのサブドメインを用いた。

script_script.js

このプログラムをCyberChefの URL Encode でエンコードして埋め込み、以下のHTMLファイルを作成した。

script.html

このファイルをphp -Sコマンドとcloudflaredでインターネットからアクセスできる状態にし、 そのURLをAdmin botに渡すと、RequestBinにAdmin botからのアクセスがあった。
しかし、その内容は buckeye{not_the_flag} だった。

与えられたファイル中の docker-compose.yml を見ると、用意されたWebページのサーバの内部におけるIPアドレスは 172.16.0.10 らしいことがわかった。
そこで、このIPアドレスを使用した以下のHTMLファイルを用意した。

script2.html

このファイルのURLをAdmin botに渡すと、flagが得られた。

buckeye{th3_l3tt3r5_0f_S0P_Ar3_1n_JS0NP}

writeup by MikeCAT

BuckeyeCTF 2021