Tahoo!!

自分の勉強していること(コンピュータ関連 / ネットワーク / セキュリティ / サーバ)や趣味について書いていきます

setodaNote CTF Writeup (Web)

この記事は setodaNote CTF のWebジャンルのWriteupです。

Body (30pts, 458solves)

サイトにアクセスして機密情報を見つけ出してください。という問題

問題のタイトルの通りHTMLの"Body"の中を適当に見てると、コメントでFLAGが書いてある。

f:id:takahoyo:20210905105146p:plain

flag{Section_9}

Header (50pts, 367solves)

Bodyに引き続き、サイトにアクセスして機密情報を特定してください。という問題。サイトの見た目はBodyと同じ。

Chromeの開発者ツールを起動して、問題のタイトルの通りHTTPレスポンスの"Header"を見るとFLAG

f:id:takahoyo:20210905105240p:plain

flag{Just_a_whisper}

punipuni (80pts, 362solves)

問題として出題されている文字列は、日本語ドメイン等で使われているPunycode

https://www.punycoder.com/ などで変換する。(https://punycode.jp/. が入ってると変換できないので注意が必要

  • xn--q6jaaaaaa08db0x8nc9t1b8fsviei84atb4i0lc = フラグは、さん、さん、ピー、ユー、エヌ、ワイ。
  • xn--q6jaaaaa03dpd4mb3jc5rpa0g9jpk07acadc. = シー、オー、ディー、イー、よん、よん、です.

  • xn--q6jylla3va3j6c8138a8eptvb303cxv4ft3o4ue63a = カタカナ表記は半角英小文字に、

  • xn--v8ja6aj2a3cri3ag4a2r6cx2a1rkk1272c7j4ajd4bmf0kjhg6rb. = ひらがな表記は半角数字にしたものがフラグです.
  • xn--q6j6gav1a0b2e1bh1ac2cl29ad7728kdjen6cz80dju6bqexchl9gel8b. = なお、読点は区切り文字なので取り除いてください.
flag{33punycode44}

Mistake (100pts, 220solves)

サイトに不備があって機密情報が漏れてしまっているようなので、機密情報を特定せよという問題。サイトの見た目はBodyとHeaderと同じ。

「サイトに不備があって機密情報が漏れた」ということで、思い当たるよくある設定不備をソースのHTMLを見ながらいろいろ試してると、/web003/images//web003/assetsディレクトリリスティングが有効になっていることがわかった。

f:id:takahoyo:20210905105450p:plain

/images にFLAGが置いてあった。

flag{You_are_the_Laughing_Man,_aren't_you?}

tkys_royale (120pts, 279solves)

脆弱性があるサイトを解析して、脆弱性を特性せよという問題。

問題サイトにアクセスするとログインフォームが出てくる。

f:id:takahoyo:20210905105508p:plain

ソースのHTMLを見てると、コメントに user:pass123 とあるのでこれでログインしてみると、You need to be logged in as admin to find the flag. と書いてあるページが表示される。これでadminで入れば良さそうというのはわかった。

f:id:takahoyo:20210905105522p:plain

ログインフォームに脆弱性というとSQLインジェクションが一番に思い当たったので、"' をパスワードに入れてみる。エラーが表示されたので、SQLインジェクション脆弱性がありそう。

f:id:takahoyo:20210905105542p:plain

ユーザに admin 、パスワードに ' OR 1=1;# を入れると、認証が突破できてFLAGが表示される。

f:id:takahoyo:20210905105554p:plain

FLAG

flag{SQLi_with_b1rds_in_a_b34utiful_landscape}

Estimated (120pts, 241solves)

問題ページにアクセスすると、ブログサイトが表示される。

いくつかページを見ていると、2021年06月03日にお詫びページが掲載されている。「昨日の記事について、掲載していた画像に公開すべきではない情報が含まれていたため当該記事を削除いたしました。」と書いてあるので、06月02日の画像がないかを探す。

f:id:takahoyo:20210905105624p:plain

他のブログページには画像が掲載されており、画像のURLは https://ctf.setodanote.net/web006/images/投稿した年月日+001b.jpg というフォーマットになっている。

削除された画像は https://ctf.setodanote.net/web006/images/20210602001b.jpg というURLにあると推測できるので、ここにアクセスしてみると削除されたはずの画像が見える。

f:id:takahoyo:20210905105639p:plain

画像はPCを操作する人の画像で、PCの画面の部分をズームしてよく見てみるとFLAGが書いてある。

flag{The_flag_wouldn't_like_to_end_up_in_other_peoples_photos}

Mx.Flag (150pts, 171solves)

アクセスすると以下のようなサイトが表示される。

f:id:takahoyo:20210905105728p:plain

開発者ツールで行われた通信を見ていると、/images/favicon.png にアクセスしていた。

f:id:takahoyo:20210905105746p:plain

ソースコードを見ると <link rel="icon" type="image/png" href="images/favicon.png"> という形でfaviconを指定している。通常faviconは拡張子が.ico のアイコンファイルが使用されるが、今回はPNGが使われていて少し不自然である。(一応、今回のようにtype属性を指定すればPNGもアイコンとして使えるらしいが…

f:id:takahoyo:20210905105755p:plain

どんな画像かpreviewで見てみると、画像は表示されないが薄く文字が何か見える。

f:id:takahoyo:20210905105804p:plain

ファイルを保存してfavicon.pngを画像ビューアで見ようとしたが見れなかったので、何か違うファイルであると考えた。テキストエディタで中身をみるとただのテキストファイルで、コメントを見るとFLAGが書いてあった。

f:id:takahoyo:20210905105812p:plain

flag{Mr_Flag_hiding_in_the_favicon}

Redirect (150pts, 181solves)

再現方法が不明なものの一部の訪問者から不審なサイトに飛ばされてしまうので、調査して侵害状況を把握してくださいというシナリオ。

調査するWebサイトにアクセスすると一見普通のサイトが表示されるが、ソースコードを見ると下の方に何やらscriptが埋め込まれている。

f:id:takahoyo:20210905105952p:plain

整形すると以下のようなコードになる。

!function(){
    var ref = document.referrer;
    var domain = ref.match(/^http([s]?):\/\/([a-zA-Z0-9-_\.]+)(:[0-9]+)?/)[2];
    if(domain == "www.google.com" || domain == "www.google.co.jp" ){
        location.href = atob('aHR0cHM6Ly9jdGYuc2V0b2Rhbm90ZS5uZXQvd2ViMDA0L2JXRnNhMmwwLmh0bWw=');
    }
}();

どうやら referがgoogleだった場合にリダイレクトするようになってるらしい。Redirect先はBase64エンコードされているのでこれをデコードすると https://ctf.setodanote.net/web004/bWFsa2l0.html というURLになる。

このURLにアクセスすると、いくつかのリダイレクトが行われて "Nice try!" と表示されるサイトに誘導される。

さすがに開発者ツールだと追うのがきつくなってきたので、ここでBurpSuiteを使って発生してるリクエストを見てみる。5回ほどのリダイレクトが行われて、"Nice Try" のページに辿り着いてることがわかる。

f:id:takahoyo:20210905110008p:plain

リダイレクトするコードを一つずつ見ていくと、"Nice Try" ページにリダイレクトされる直前のページで分岐がある。

!function() {
    var params = new URL(window.location.href).searchParams;
    if (params.get('callback') == 'getFlag') {
        location.href = 'https://ctf.setodanote.net/web004/dGFjaGlrb21hX2thd2FpaV95b25l/?' + params;
    }else{
        location.href = 'https://ctf.setodanote.net/web004/ZGFtbXlmbGFn/?' + params;
    }
}();

このページヘのアクセス時のクエリストリングが ?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200 のようになってたので、callbackのパラメータをgetFlag に変えることで別のページに飛ばすことができそう。

パラメータを変えて同じURLにアクセスしてみると、予想通り別のページにリダイレクトされてFLAGが表示された。

f:id:takahoyo:20210905110021p:plain

FLAG

flag{Analyz1ng_Bad_Red1rects}