NITIC CTF WriteUp(2020/7/19開催)

[NITIC CTF](https://ctf.waku-waku-club.com/)に参加しました。
[まっちゃだいふく](https://twitter.com/ripjyr)さんのRTで知り、参加を決めました。
connpassで募集をかけるのって斬新。
高専生が企画したCTFだそうです。若い人にはどんどん頑張ってほしいですね。
お布施したかったけど、用意された方法では上手くいかず申し訳ない...。


さて、初心者向けCTFということで、ある程度解けました。
結果は、全9問のうち5問を解いて同率87位でした。
結局頭を使うところは解けず、CryptoとReconは解きたかったところ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241323/a18bbd40-daea-8d03-ccef-e7abb58020e5.png)

公式から解説が出てるので、Writeupを書くまでもないんですが、一応書いておきます。

# 8^2 (Web)

テキストファイルが与えられます。
見るからにBase64エンコードされたもののようです。
問題名も8^2とのことで、間違いなさそうです。

ということでBase64エンコードされている箇所("/9j"以降)を、毎度おなじみ[CyberChef](https://gchq.github.io/CyberChef/)でデコードします。
元のテキストファイルに`data:image/jpeg`とあるので、jpegファイルだと思われます。
デコードしたものにも、jpegのマジックナンバーである` ﾘ `（Shift-JIS）がありましたので間違いなさそうです。

CyberChefではデコードしたものを、ファイルとして保存できる機能があるので、保存して拡張子を".jpg"にして開けばフラグが得られます。

`nitic_ctf{nemu_nemu_panti_shitai}`


なんでこれWebなの？と思っていましたが、解説に以下の記述がありました。へー

> HTMLでは、imgのsrc属性にこのBase64文字列をぶちこんでやってブラウザで開くと元の画像を見ることができます。

# prime_factorization (PPC)

PPC(Professional Programming and Coding)ということで競技プログラミングのものなんですが、コーディングしてません、すみません。

```text:問題文
合成数Cが与えられる。素因数分解してa_0^b_0 * a_1^b_1 * … * a_n^b_nの形にして、
nitic_ctf{a_0_b_0_a_1_b_1…a_n_b_n}のがフラグとなる。この時a_iは素数、b_iは1以上の整数、aは昇順に並んでいる。

例えばC=48の時、48=2^4*3^1より、フラグはnitic_ctf{2_4_3_1}である。
```

与えられる合成数は`408410100000`です。

素因数分解してくれるWebサービスがあるのでお願いすると、素因数は以下ということがわかります。
2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7

ルールに従うと以下がフラグとなります。

`nitic_ctf{2_5_3_5_5_5_7_5}`

# cha1n (Misc)

以下のファイルが与えられます。

* Windows向け
  * 1.bat
  * a.bat
  * c.bat
  * d.bat
  * h.bat
  * n.bat

* Linux向け
  * 1.sh
  * a.sh
  * c.sh
  * h.sh
  * n.sh

私はWindows向けで解きました。

中身を見ると、何やら文字列の変換をやっているスクリプトなことがわかります。
`c.bat (c.sh)`だけ、最初の文字列が設定されています。

cから初めていけばよさそうです。そして問題名が`cha1n`。
この順でやればよさそうですね。
dはダミーという理解をしました。
※dは消し忘れだそうで、Windows向けに`d.bat`があり、Linux向けに`d.sh`がないのは誤りだそうです。

というわけで、宣言部分などを省いて結合したbatファイルを作成して流します。
（一応変遷していく様子がわかるように`echo`は残しています）

```bat
@echo off
set STR=njtjxpxtfwx()s1Kpx()s1Kpx()s1Kpx()s1Kpx()s1Kp5x8mb83
set STR=%STR:()=h%
set STR=%STR:p=_%
set STR=%STR:w=oo%
echo %STR%

set STR=%STR:j=i%
set STR=%STR:K=n%
set STR=%STR:oo=ww%
echo %STR%

set STR=%STR:3=}%
set STR=%STR:8=o%
set STR=%STR:ww=qq%
echo %STR%

set STR=%STR:s=a%
set STR=%STR:x=c%
set STR=%STR:qq=rr%
echo %STR%

set STR=%STR:rr={%
echo %STR%

pause
```

```bat:実行結果
njtjx_xtfooxhs1K_xhs1K_xhs1K_xhs1K_xhs1K_5x8mb83
nitix_xtfwwxhs1n_xhs1n_xhs1n_xhs1n_xhs1n_5x8mb83
nitix_xtfqqxhs1n_xhs1n_xhs1n_xhs1n_xhs1n_5xombo}
nitic_ctfrrcha1n_cha1n_cha1n_cha1n_cha1n_5combo}
nitic_ctf{cha1n_cha1n_cha1n_cha1n_cha1n_5combo}
```

フラグが得られました。
`nitic_ctf{cha1n_cha1n_cha1n_cha1n_cha1n_5combo}`



# Fortran (Reversing)

こちらもWindows向けの`problem.exe`とLinux向けの`problem`が与えられます。
初心者向けReversingの定番である、`strings`かけると書いてあるやつでした。

```shell
$ strings ./problem.exe | grep ctf
nitic_ctf{No_FORTRAN_Yes_Fortran}
```

`nitic_ctf{No_FORTRAN_Yes_Fortran}`

ちなみに、Linux向け(ELF)にstringsかけると、このフラグは得られず、代わりに以下が見つかります。
こちらも誤りだそうです。

```shell
$ strings ./problem | grep ctf{
replacenitictf{Fortran}
```

# ANIM (Forensic)

`flag`というファイルが与えられます。
何者だかわからないので、`file`コマンドにかけてみます。

```shell
$ file ./flag
/flag: Microsoft PowerPoint 2007+
```

PowerPointでした。
Officeファイルのフォレンジックって初心者向けでしか見かけませんが、Officeファイルの正体はzipファイルなので展開して分析してね、というやつです。
`docx`, `xlsx`も同様です。2007移行のXML化されたOfficeファイルはそうなっています。

というわけで、zip化して中を除くと、
`\flag.pptx.zip\ppt\media\image1.png`
が見つかるので、それを閲覧するとフラグが得られます。

`nitic_ctf{ppppptx}`

ちなみに、xmlファイルの中に隠されてるケースもよくあります。


# おまけ Dangerous Twitter (Recon)

答えは写真の中にパスワードが写り込んでいた、というやつでしたが全く違うところを追っていました。
完全にWriteupではありませんが、思い込みって怖いねの反省の意味を込めて書いておきます。（同士がいるんじゃないかと思っている...）

`@FPC_COMMUNITY nitic`で検索をかけると、以下のツイートが見つかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241323/9da6541d-1ff2-17d6-a3cd-df907e503f57.png)

おお、これめっちゃ怪しい！夜のツイートになにかあるんじゃね？
ということで、`@FPC_COMMUNITY until:2020-6-10`で再度検索をかけます。

すると、以下のツイートが見つかります。（以降は画像無しで）

```
サブ垢じゃなくてたまにはこの垢でも過激なこと言いたいなぁ、けど色々な人に見られちゃうしなぁ
と思い、別に誰でも見れるようにはしてあるけど見るためにはひと手間必要なツイートをたまにしようと思います。
RSAで暗号化されてる文章で、公開鍵も秘密鍵も実装も全文GitHubにあげといたんでヨロシク
```

続いて、GitHubのツイート、暗号文のツイートと続き、いかにもだなぁとなり、RSA暗号の復号をずっと頑張っていました。
実際に復号できたら何が書いてあったんだろうなぁ...

解けませんでしたが、おかげさまで`Pycrypto`の後続である`Pycryptodome`を端末に入れられたのでよしとしますｗ
難易度1で100点っていうところで思い直すべきでしたね。