gyOTAKU

アクセスすると、以下のような魚拓をとれるサービスなようだ。
🐟gyOTAKU🐟

images/image1.png

魚拓をとると画像が降ってくる。
https://tsukuctf.sechack365.com/problems/gyotaku?url=http://example.com/

images/image2.png
ソースを見ると次のようであった。

~~~ def sanitize(text): #RCE is a non-assumed solution. <- This is not a hint. url = "" for i in text: if i in string.digits + string.ascii_lowercase + string.ascii_uppercase + "./_:": url += i if (url[0:7]!="http://") and (url[0:8]!="https://"): url = "https://www.google.com" return url ~~~ @app.route("/") def gyotaku(): filename = "".join([random.choice(string.digits + string.ascii_lowercase + string.ascii_uppercase) for i in range(15)]) url = request.args.get("url") if not url: return "<font size=6>🐟gyOTAKU🐟</font><br><br>You can get gyotaku: <strong>?url={URL}</strong><br>Sorry, we do not yet support other files in the acquired site." url = sanitize(url) html = open(f"{filename}.html", "w") try: html.write(requests.get(url, timeout=1).text + "<br><font size=7>gyotakued by gyOTAKU</font>") except: html.write("Requests error<br><font size=7>gyotakued by gyOTAKU</font>") html.close() cmd = f"chromium-browser --no-sandbox --headless --disable-gpu --screenshot='./gyotaku-{filename}.png' --window-size=1280,1080 '{filename}.html'" subprocess.run(cmd, shell=True, timeout=1) ~~~

クエリパラメータで渡されたアドレスを get し、html に保存した後に chromium-browser でスクリーンショットを撮っているようだ。
アドレスはhttp://https://で始まるようサニタイズされている。
ファイル名もランダムなので OS コマンドインジェクションも難しそうだ。
ここでalert(1)を出すようなサイトを読み込むと Internal Server Error が発生することに気づく。
JavaScript が動くようだ。
ここで、次のような html を考える。

<script> location.href = "/etc/passwd"; </script>

これがhttp://tsukuctf.example.com/index.htmlとして配置されていた場合、http://tsukuctf.example.com/etc/passwdへリダイレクトされる。
しかし、html ファイルとしてローカルに保存されている場合、/etc/passwdが表示される。
この html を外部のサーバに配置し魚拓をとると、本アプリによって html ファイルとして保存され、chromium-browser が問題サーバ内の/etc/passwdを表示する。
これで問題サーバ内の任意のファイルが読み出せるようになった。
問題文より root で動いているとのことなので、/root以下を捜索する。
/root/.bash_historyを読み取ると次のようであった。
images/image3.png
何かが/root/flagc464f9eba1.txtに書かれているようだ。
images/image4.png
ファイルを読み込むと flag が書かれていた。

TsukuCTF{Tsukushi_to_Sugina_no_chigai_ga_wakaran}

© 2021-2024 SecHack365-Fans All Right Reserved.