NISM CTF 2022 Writeup

開催期間中にTwitterのTLに流れてきて、飛び入り参加しました
初めてCTFで全完できて気持ちよかったです
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943765/9dd4d2ad-0337-673f-15f9-f110d46567aa.png">


# [Forensics] Lost USB memory (77 Solves)
>あっ、大切なUSBメモリを紛失してしまった。まぁでも重要なデータは削除してたから大丈夫でしょ。

配布されたbinファイルをfileコマンドで調べると、`DOS/MBR boot sector`と表示された
なんぞやと調べるとディスクイメージのようだ

binwalkで取り出せるとのことなので、やってみる
`binwalk -e problem.bin`では上手く抽出できなかったが、下記サイトによると拡張子を指定すれば抽出できるとのこと

https://qiita.com/out_of_stack/items/1e85eded0a7f115b369a

```bash
$ binwalk -D='.*' problem.bin
```
色々出てきた
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943765/cd1deeb0-cbef-0248-897f-da9b11cbaba2.png">

この中にフラグが書かれているpdfファイルを発見

`NISM{1t_1s_34sy_t0_r3st0r3_d3l3t3d_f1l3s}`

# [Forensics] Hidden files (72 Solves)
>長崎で撮った写真を集めてみました。画像に埋め込まれているflagを見つけることはできるかな？

問題文からステガノ問だなと思い、定番の「青い空を見上げればいつもそこに白い猫」を使用
`ファイル・データ抽出`から`検索実行`で結合されているjpegファイルを取り出せた
中身を見るとフラグの断片だったので、他の3枚の画像で同じことを繰り返せばフラグゲット

`NISM{5pl1tt3d_1mp0rt4nt_f1l35_1nt0_53v3r4l_p4rt5}`

# [Forensics] A file is opening (51 Solves)
>とあるプログラムが重要なファイルを開いているみたい...

メモリダンプファイルを解析する問題、ここからやり方が分からなかったのでハンズオン資料を見た
「Volatility3」というもので解析できるのか、早速下記サイトを参考に導入

https://qiita.com/ninja400/items/f3dd1e6eb80fd5b39ba9

後はハンズオン資料の流れに従い、「Volatility3」をインストールしたディレクトリ内で以下のコマンドを入力
```bash
$ python3 vol.py -f 'メモリダンプのパス' windows.cmdline.CmdLine
```
実行されたプロセスの中に怪しいのを発見
```
4656    notepad.exe     C:\Windows\system32\notepad.exe  C:\Users\Koito_Yuu\Desktop\flag\base64\TklTTXtNM20wcnlfZHVtcF90Mzc3X3U1XzV0NHQzXzBmX3RoM19QQ18xbl90aDNfbTBtM250fQ==
```

末尾が`=`なので、base64復号するとフラグが出てきた

`NISM{M3m0ry_dump_t377_u5_5t4t3_0f_th3_PC_1n_th3_m0m3nt}`


# [Forensics] Find Reg Value (35 Solves)
>このPCにOSをインストールしたのはいつだろう？
>
>※この問題のフラグはNISM{ }のカッコの中に年・月・日・時・分・秒をアンダーバー区切りにして入れたものです．
>
>例)
答えとなる日時が1970/01/01 10:20:30である場合，フラグは
NISM{1970_01_01_10_20_30}
となります

この問題もハンズオン資料の内容で解けそう(これがないと無理...)
問題名からメモリダンプからレジストリのデータを見ればよさそう
windowsをインストールした日時は、調べると下記レジストリ内にあるとのこと

`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallTime`

まずは、資料に従い下記のコマンドでレジストリ一覧？みたいなのが見れる
```bash
$ python3 vol.py -f 'メモリダンプのパス' windows.registry.hivelist.HiveList
```
資料より、`HKEY_LOCAL_MACHINE`に対応しているのは、`\SystemRoot\System32\Config`のようだ
よってここのレジストリの中身を調べればよさそう
```
0x8edec008      \SystemRoot\System32\Config\SOFTWARE    Disabled
```
左に表示されているオフセット値を用いて、下記のコマンドを入力
```bash
$ python3 vol.py -f 'メモリダンプのパス' windows.registry.printkey.PrintKey --offset 0x8edec008 --key "Microsoft\Windows NT\CurrentVersion"
```
表示された結果から`InstallTime`を探すと最後の方にあった
```
2022-07-09 12:20:01.000000      0x8edec008      REG_QWORD       \SystemRoot\System32\Config\SOFTWARE\Microsoft\Windows NT\CurrentVersion     InstallTime     133012080566588255      False
```

表示されている数値は、Windows時間(NTタイムエポック)というもので、cmdの`w32tm`コマンドで変換できるみたい
cmdで`w32tm /ntte 133012080566588255`と実行してフラグゲット

`NISM{2022_07_02_13_00_56}`


# [Web] 超、易問！ (109 Solves)
>NISMのテーマカラーは何色でしょうか？

URLにアクセスすると、色を選択できるページに飛ぶ
表示されている色を全部選択しても、not correctとなりフラグが出てこない
URLパラメータに`?color=white`と選択した色が含まれるため、ここをNISMのテーマカラーに書き換えればよさそう
NISMのアイコンは青色だと分かったので、`?color=blue`に変更するとフラグが出てきた

`NISM{7h1s_ls_4_GE7_qu3ry.}`


# [Web] frog, frog, frog (91 Solves)
>蛙好きの友人が、蛙と名の付く文学作品を集めたサイトを作ったらしい。せっかくだから見てみようか。

この問題は解くのに一番時間がかかった
作品の中にtitleが「The flag hiding」となっているものが混ざってるのでこれを見ればクリアだなと思うが詰まってしまう

ソースを見るとPOSTメソッドが使われていてディレクトリトラバーサル問ではなさそうだし、どうすればいいんだ...
ページ上部にwelcome, guest user!と出てることから、適当に`Cookie: user=admin`にしてcurlを叩いたりと色々やったが結局分からず、、、

我慢できずにポイント使ってヒント見た
ブラウザの開発者ツールを使ってみよう、とのことでまさかこれだけで解けるやつか...?
隈なく調べると、スタイルエディターのcss内に普通にフラグが置いてあった、、、悔しい！

`NISM{Why_c4n_y0u_C_m3!?}`

# [Web] お米食べろ (55 Solves)
>近年はお米の消費量が落ち込んでいる、と言われますが、やっぱり毎日一番食べているのはお米ですよね！
2010年から2020年までの全国の水陸稲作付面積の統計データを集めました。

問題からSQLインジェクション問だなと直感
試しに`' OR 1=1;-- `で検索すると、全データが出てきた
しかし中にはフラグはないので、別のテーブルから引っ張っらないとダメみたい

まずは、UNION SQLインジェクションでflagの入ったテーブルを探す
下記サイトが凄く参考になった

https://qiita.com/fiotto/items/df6e62b9a25fd62c62fd

下記ペイロードでテーブルの情報を抜き出せた

`' UNION SELECT table_name, table_schema, null FROM INFORMATION_SCHEMA.TABLES;-- `

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943765/bf007e27-3034-a666-2866-b85d0306a7e1.png">

flagsという名前のテーブルを発見、後はflagsテーブルのカラム名を知りたいので、以下を実行

`' UNION SELECT COLUMN_NAME, COLUMN_TYPE, null FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'flags';-- `

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943765/d71052ee-d602-0048-199e-ef079bfa3301.png">


idとflagの2つあることが分かった、後はflagsテーブルからflagを抜き出すだけ！

`' UNION SELECT id, flag, null FROM flags;-- `

ン？何故か通らない、ナゼダー
調べまくると、どうやらUNIONで異なるDBから結合する場合、`db_A.user_entry`みたいにDB名もくっつけないといけないようだ

https://qiita.com/EastResident/items/cf556b7005e60a4ee19f

flagsテーブルはflagsデータベース内にあると分かっているので、

`' UNION SELECT id, flag, null FROM flags.flags;-- `

フラグらしきものがたくさん出てくる中、`NISM`から始まっているのがフラグだな

`NISM{wh3r3_m3t4d4t4_1s_loca7ed_d3p3ndz_on_7he_7ype_of_d@t@b@se.}`


# [NW] Electrical talk (92 Solves)
>あなたは、社内ネットワークに接続されている無数のコンピュータの中から、唯一通信できるコンピュータ1台を発見するネットワーク宝探しゲームに参加しています。
様々なIPアドレスへ通信確認をしているpcapと、そのIPとのホスト名対応表を用いて、通信可能なコンピュータのホスト名を答えよ。
>
>回答の際は、次の形式で答えること。ただし、ホスト名には、ホスト名対応表の任意のホスト名が入る。 NISM{[ホスト名]}

pcapファイルをwiresharkで開いてみる

pingを色んなIPに投げている、この中から応答が返ってきているIPアドレスを探せばよさそう
適当にSource addressを降順で並び替えると、一番上にEcho replyしているIPアドレスが来た
後は、ホスト名対応表から探せばクリア

`NISM{tHekLRUU3dRMH5kJ5Q}`


# [NW] Insecure communications (84 Solves)
>ネットワークの勉強の一環で、親友の同意のもと、親友のネットワークを数分キャプチャさせていただいた。
どうやら、親友はある会員向けのHTTPサイトにアクセスし、会員限定記事を見ているようだ。
僕も見たい。そこには魔法のflagが隠されているみたいだ、、、
与えられたpcapより、会員向けサイトのクレデンシャルを見つけ出し、実際にアクセスして自分の目でflagを確認してみよう。

pcapファイルを見ると、HTTPとTCPで通信している内容だと分かる
追跡からTCPストリームを見て閲覧サイトのURLが分かるが、フラグの在り処が分からない

そういえば、WiresharkはHTMLファイルなどエクスポートできるんだったと思い出したのでやってみることに

`ファイル` > `オブジェクトをエクスポート` > `HTTP` を選択
とりあえず`すべて保存`、すると`mail-maga-auth.py`という怪しいファイルを発見
中身を見るとユーザ名とパスワード、ログイン失敗画面のhtmlっぽいぞ
ここからURLも`/magazine.html`と分かる

wiresharkで`mail-maga-auth.py`のホスト名を見ると`electronic`から始まっていることから「津田社電子」のサイトにメルマガ会員ページがあると判断

後はどのパスワードを使用すればいいかだが、wiresharkで得られた最後の`mail-maga-auth.py`に書かれたものを使ってみる
パスワードは一部がURLエンコードされていたので、デコードすると通った

`NISM{like_a_magic_highway_and_network_is_deep_but_fun}`


# [NW] Where am I? (93 Solves)
>ネットワークを学習する上で避けては通れないサブネットマスクの計算。
力試しでやってみましょう。
>
>192.168.1.0/28のネットワークにおいて、192.168.1.93のネットワークアドレスを答えなさい。
なお、解答の際はNISM{[IPアドレス]}の形式で答えること。
>
>例：回答が192.168.250.34なら、回答はNISM{192.168.250.34}となる。

CMANのサブネットマスク計算を使った

https://note.cman.jp/network/subnetmask.cgi

`NISM{192.168.1.80}`

# [Misc] カラーコード (117 Solves)
>NISMのロゴマークに使われている青色は、RGB形式で表すと、rgb(0,153,204)です。この色のカラーコードを答えてください。flagは、NISM{#xxxxxx}の形式で答えてください。

「rgb カラーコード変換」と検索
出てきた下記のサイトでrgb値を入力してカラーコードを求める

https://www.peko-step.com/tool/tfcolor.html

`NISM{#0099CC}`

# [Misc] 奇妙な文字列 (115 Solves)
>こんな意味不明な文字列が友達から送られてきたんだけど、君は解読できるかい？
TklTTXtiQHNlNjRfYzRuX2IzX2VhNWkxeV9kZWMwZGVkfQ==

末尾が`=`と、見るからにbase64なので復号

`NISM{b@se64_c4n_b3_ea5i1y_dec0ded}`

# [Welcome] When is Christmas ? (139 Solves)
>今年も、皆が待ち望むクリスマスがやってくる。クリスマスは、おいしいケーキにおいしいオードブル。考えるだけでお腹が空いてきますね。
さて、今年のクリスマスはいつでしたっけ？yyyy_mm_ddで答えてください。
>
>flagはNISM{[半角英数字記号]}の形式です。
今年のクリスマスは、2022_12_25ですので、本問のflagはNISM{2022_12_25}となります。
>
>＊flagは、NISM{2022_12_25}です。＊

フラグを入力するだけ

`NISM{2022_12_25}`