nazotokiCTF Writeup

2022/7/17〜7/18に開催された[#nazotokiCTF](https://ctf.nazotoki.tech/)に参加しました。
初めて全問正解できたので、初めてWriteupを書いてみようと思います。
なお、かなり謎解きの思考となんとなくで解いているので、真の解法を知りたい方はぜひ他の方のWriteupをご覧ください。

# nazotokiCTFとは
謎解き要素をミックスした初心者向けCTFイベントです。
プロローグをみるかぎり脱出が目的であるため、CTF問題を解くことよりも脱出を目標に問題に取り組むことにしました。

# へびつかい座（問題確認編）

以下のような解答用紙が添付されています。

![answersheet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432669/10eff839-cf9b-a1bd-94d8-76b762470f8d.png)

脱出ゲームあるあるなのですが、おそらくキーワードを集めると何らかの指示が現れ、それに従うとフラグが出るだろうと推察しました。
また、これを解けば他の問題を解かなくても脱出できる可能性があると思いましたので、ある程度問題を解いたら解答用紙に記載してみることにしました。

フラグを書く数字の場所ですが、プロローグに星座と番号が振られた図があるため、問題についている星座名と番号が対応していると考えました。
（例えば、おひつじ座の問題を解いたら1に答えを書くのではと予想。）

# Riddle - Fire elements

## おひつじ座

> あなたが目指しているものの間を読め

プロローグのページを見ると「セキュリティ業界の星」を目指していることが分かります。
「星の間を読め」ということなので、星があるところを探すとイントロダクションの絵が見つかります。

イントロダクションの星のアイコンの間を読むと`ハンドル`と読めます。

おひつじ座：`ハンドル`

## しし座

> ルールを守れ

ルールページの一番下に「大切なルール」という項目で以下のような記載があります。

> - 燃えるゴミは捨ててください
> - ペットボトル

「も」「え」「る」「ご」「み」を捨てる、「ぺ」「ッ」「ト」「ボ」をとると読めますので、指示に従うと`チーター`という文字が残ります。

しし座:`チーター`

# Knowledge - Earth elemtnts

## おうし座

> 2021年に行われた、コンピューターウイルス「emotet」のテイクダウン作戦の名前を日本語で言うと？`「○○○○ムシ作戦」`

「emotet takedown 作戦名」と検索すると、作戦名「Operation Ladybird」と出てきました。
「Ladybird」を翻訳すると「テントウムシ」と出たので、答えは`テントウ`です。

おうし座:`テントウ`

## おとめ座

> Webアプリケーションのセキュリティ分野の研究・ガイドラインの作成・脆弱性診断ツールの開発・イベント開催などの活動をしているオープンソースソフトウェアコミュニティの名称の`読み方をカタカナ4文字`で答えよ。

OWASP ZAPをいじったことがありましたので、ピンときました。

おうし座:`オワスプ`

## やぎ座

> ある数 x を数 b のべき乗bᵖとして表した場合のpのこと。logとも呼ばれるこの数を`日本語で何というか？カタカナ4文字`で答えよ。

対数ですね。競技プログラミングをするとたまに出るのでこれも馴染み深かったです。

やぎ座:`タイスウ`

# Web - Air elemtnts

## ふたご座

ソースコードを見るとgetリクエストで送信しているようだったので、パスワードを以下のようにクエリパラメータにして渡しました。
`https://gemini.ctf.nazotoki.tech/check.php?realPassword=dioskouroi`

ふたご座:`ナイーブ`

## てんびん座

User-Agentを`stardustChrome`に書き換えればよさそうだと分かりましたので、pythonで以下のようにして実行しました。

```python
import requests

url = "https://libra.ctf.nazotoki.tech/"
user_agent = 'stardustChrome'
header = {
    'User-Agent': user_agent
}

r = requests.get(url,headers=header)

print(r.text)
```

（curlの方が早かったと思いますが、ついpythonで書いてしまいます。。。）

てんびん座:`クローン`

## みずがめ座

プロローグからアイの社員番号が99だと分かったので、これを見てみようと思い、社員ナンバーを99にセットしました。
ただパスワードが分からないと思い込んでしまい（「passwordを入力することで指定した社員情報を閲覧できます」と書いてあるのですが、パスワードがpasswordとは分からなかった）、SQL Injection出来そうな文字列を片っ端から入れていきました。

すると、社員ナンバー:`99`、パスワード:`' OR ''='' #`の組み合わせで、なぜか社員番号99と9999の社員が見えたためフラグがゲットできました。

みずがめ座:`タカハシ`

ところで、この問題でアイの誕生日を見ることができます。
誕生日は7/18で「へー、大会の終了日なんだー。」と覚えておいたことが後々役に立ちました。（こういうのは脱出ゲームっぽくて好きです。）

# Misc - Water elements

## かに座

> 仲間はずれを探せ

渡されたzipを解凍すると13個のファイルが展開されました。
`file`コマンドを使って正体を見ると、一つだけ違うファイルであることが分かりました。

```
$ file *
0961db32a59b8a83c1996498f9d1d80e: pcapng capture file - version 1.0
397cbf6db9d7ae6906ae420aedc5346c: pcapng capture file - version 1.0
44ca0844398b2d010d8cd4a31ddb023d: pcapng capture file - version 1.0
4de447a391e32baeb5a52c55aa14467b: pcapng capture file - version 1.0
550eadb88a230018bf043d1b6ad15863: pcapng capture file - version 1.0
635cbc8a5dc1a528c3b5cb9eecdc1086: pcapng capture file - version 1.0
7463543d784aa59ca86359a50ef58c8e: pcapng capture file - version 1.0
766cc4dd4d5005652e8514e3513683f8: pcapng capture file - version 1.0
7c70e2cb2b4a13c4590f6b15c30385fd: pcapng capture file - version 1.0
a0678bcea04dbd6852c219062ab2bb3c: pcapng capture file - version 1.0
b9c94e8a87e3647c5a0fa4ff358ecc65: pcapng capture file - version 1.0
f0525aafa095ed2665d03681537a70ea: Unicode text, UTF-8 text
f8a5c386478fa64f118056b82acc31d2: pcapng capture file - version 1.0
```

このファイルの最終行にフラグが書いてありました。

かに座:`イイワケ`

# へびつかい座（解答編）

この時点で9個のキーワードが手に入ったので、解答用紙に書いてみました。

|No|星座|フラグ|
|:-|:--|:----|
|1|おひつじ座|ハンドル|
|2|おうし座|テントウ|
|3|ふたご座|ナイーブ|
|4|かに座|イイワケ|
|5|しし座|チーター|
|6|おとめ座|オワスプ|
|7|てんびん座|クローン|
|8|さそり座|？？？？|
|9|いて座|？？？？|
|10|やぎ座|タイスウ|
|11|みずがめ座|タカハシ|
|12|うお座|？？？？|

解答用紙の頭文字の部分の色が変わっているため、そこを拾って読んでみます。
「ハテナイチオク？？タタ？」
何となく意味が通るように？を埋めてみると「ハテナイチオクカイタタケ」（？1億回叩け）になるような気がしたので、叩けそうなハテナを探してみました。

すると問題ページのヘッダの部分に`？`があリましたので、これをひたすら叩けばよさそうだと考えました。
1億回叩くのは攻撃とみなされそうなので、何か`?`を叩いた回数を記録している部分を誤魔化せないか調べたところ、cookieに`nazotoki`という値があり、`?`をクリックするたびに1ずつ増えていることがわかったので、ここをデバッグモードで`100000000`に書き換えたところフラグが現れました。

# 最終問題

> パスワードのヒントは愛の星座の中
> 流れに従い
> 太陽と月に背いて心の示す方を読め

「愛の星座の中」は、「アイ」の星座の問題を調べるとパスワードのヒントがあるよという意味ではないかと推測しました。
みずがめ座の問題で誕生日が7/18であると覚えていたので、検索するとかに座であることが分かります。

かに座の問題をみると使っていないファイルがあり、それらがpcapファイルでした。
中を見るとFTPで何か通信していることが分かったので、`foremost`コマンドで取り出してみると、それぞれ星座の名前が書かれた画像ファイルが出力されました。

「流れに従い」というヒントから順番があると考え、pcapのArrival Timeを見るとちょっとずつ時間がずれていることが分かりました。
pcapの時系列順に並べ替えた表がこれです。

|No|星座|フラグ|
|:-|:--|:----|
|1|うお座|？？？？|
|2|やぎ座|タイスウ|
|3|かに座|イイワケ|
|4|てんびん座|クローン|
|5|おひつじ座|ハンドル|
|6|みずがめ座|タカハシ|
|7|おとめ座|オワスプ|
|8|しし座|チーター|
|9|ふたご座|ナイーブ|
|10|さそり座|？？？？|
|11|いて座|？？？？|
|12|おうし座|テントウ|

「太陽と月に背いて心の示す方を読め」のヒントは、へびつかい座で使った用紙に注目すると、1回目は最初の文字は太陽から月に向かって読んでいるので、次は心を示すハートマークに向かって読めと取れます。
つまり、3文字目を読めばいいと分かりました。

3文字目を読むと「？スワードハスター？？ト」となり、おそらく「パスワードはスターダスト」と社名がパスワードになっていると推察できます。
スターダストの綴りはプロローグに書いてあるためコピペして通りました。

これにて脱出成功です。

# クリア後の世界

脱出しましたがクリアしていない問題があるので解いてみました。
が、ここからはめちゃくちゃなのでお許しください。

## さそり座

画像からフラグを探す問題です。

exiftoolで探したり、「青い空を見上げればいつもそこに白い猫」を使ったり、犬の名前かと思って検索しましたが、全く分からず。
途方に暮れてぼーっと「かわいい犬だな。。。」なんて目を見ていたら、左目に不自然に白い部分があると気づきました。
もしかしてと思って拡大すると右目の方にしっかりフラグが書いてありました。
どうやって作ったんだろう。合成？

さそり座:`カクダイ`

## いて座

謎解き問題です。
純粋な謎解きで結構ベタだとは思ったのですが全く解けず。
ただ、へびつかい座と最終問題からいて座のフラグは`「イ？ス？」`であると推察できます。
そこで、バンダイナムコから発売されているNintendo Switch用ソフト「もじぴったんアンコール」の「ワードサーチ」機能を使いました。
これは条件に一致するワードを出力してくれる機能です。
ワードサーチで「イ？ス？」と入れると、20単語近くヒットしましたが、「イースト」が目に止まり、「4つあるし、トウザイナンボクでピッタリはまる！」とわかり謎が解けました。

いて座:`イースト`

## うお座

へびつかい座と最終問題からうお座のフラグは`「ケ？パ？」`であると推察できます。
そこで、バンダイナムコから発売されているNintendo Switch用ソフト「もじぴったんアンコール」の「ワードサーチ」機能を（略）
答えになりそうな候補として「ケッパク（潔白）」「ケッパイ（欠配）」「ケンパイ（献杯）」が見えたので一番当たりそうな「ケッパク」を入れたら通りました。
本当にすいません。
本来の解き方は別の方のWriteupを見て勉強いたしました。ステレオグラム懐かしいですね。目が良くなるとか言われてたやつ。

# 感想

ものすごく楽しいナゾトキCTFでした。
脱出ゲームが好きでCTFが好きな自分には最高のイベントでした。
脱出ゲームで脱出したことほとんどないし、CTFで全完したことなかったけど、ナゾトキCTFならできました！（ちょっとずるかったけど）
作成するのは大変だと思いますが、流行ってほしいなと思う形式です。
なにかお手伝いできるならしたいぐらい次回が楽しみです。
次回があれば是非皆さんも参加してみてください。