NITAC miniCTF 3rd 作問writeup(Network)

はじめに

今回こういうCTFの作問陣に誘われたので、(易しめではありますが)問題を2問提供しました。

nitaclt.connpass.com

今回はその提供した問題のwriteupとなります。

問題解説

1.[Network] Teacher's Server(100pt)

pcapngファイルが与えられるので、そこからFLAGを探し出すという問題です。

Wiresharkの基本的な使い方がわかる方であれば簡単だと感じるのではないでしょうか。

では解き方ですが、まずpcapngファイルを覗くとhttpリクエストのパケットログが複数残っています。

f:id:hystyl:20200126224314p:plain

このパケットを順番に見ていくと、一つだけstatus codeが200のものがあります。

これの詳細を見ると、テキストデータに何やら怪しげな文字列が存在していますね。

f:id:hystyl:20200126225141p:plain

問題文では「base32で符号化された」と書かれているので、この符号文をbase32で複合すればflagがもらえます。やったね。

stringsコマンド使って暗号文見つけた人はなんか僕が悔しいのでタンスの角に小指ぶつけた時の痛みを4倍にする呪いをかけます(嘘です)

 

2.[Network] JWT_auth(100pt)

こちらもまたpcapngファイルが渡されるので、それを用いてFLAGを取得します。

こちらは競技時間開始後に考案・実装をして出題したのでもしかすると不備があるかもしれません...。

では解き方ですが、配布されたpcapngファイルを覗くと上の問題と同じようにhttpリクエストのパケットログが残っています。

f:id:hystyl:20200126231618p:plain

上から順に見ていくと、認証に使われているpasswordの部分に「verification_code_is_admin_access_token」「Let's_access_distination_IP_address」といったおそらくヒントであろう文字列が度々見受けられます。

この2つのヒントから宛先になっているIPアドレスにアクセスし、verification codeにはadminのaccess tokenが当てはまることがわかります。

ここでusernameパラメータがadminのレスポンスパケットのログを確認してみると、下の画像の通りaccess tokenが格納してあるのでこれをverification codeとすれば良いですね。

f:id:hystyl:20200126233843p:plain

実際に宛先のIPアドレスにアクセスしてみると、このようなページが表示されます。

f:id:hystyl:20200126233753p:plain

要素としてusername、password、verification codeがありますが、ヒントの通りverification codeにはadminのaccess tokenが入ることが分かっていて、この要素からadminのusernameとpasswordを入力すればいいということが推測できます。

なのでこの3つの要素を適切な位置に入力して送信するとFLAGが得られます。やったね。

感想とか振り返りとか

今回一問はインフルエンザにかかる前に作って一問は競技時間中に突貫工事で作ったんですが、アンケートの結果をみると割といい評価が付いていて嬉しかったです。

f:id:hystyl:20200126234311p:plain

正直今回突貫で作ったJWT_authとかは、access token発行してるだけでJWTとしての意味を成してないような問題ストーリーだったのでこれはちょっと反省点だったり。

しかし今回初めて作問を行ったので、初めてにしては形にはできたかなと思うので、次また機会があればもう少し歯ごたえのある問題を作りたいなと思っています。

最後に、今回のCTFに参加していただいた皆さん、そして自分の問題を解いていただいた皆さんに感謝の意を述べたいと思います。

ありがとうございました!