【CpawCTF】Level 2 writeup

CTF完全初心者による記事です。備忘録を兼ねてます。
環境はmacです。
上から順にやってます。
[CpawCTF](https://ctf.cpaw.site/index.php)（サイトの読み込み遅め）

[Level 1 writeup](https://qiita.com/shuki/items/5c71ba2d1e62e79b486d)
# Q13.[Stego]隠されたフラグ

`ト・ツー`があるので明らかにモールス信号。以下のサイトで英語に変換した。
https://morse.ariafloat.com/en/
モールス信号の入力が大変。画像の二箇所にモールス信号が散らばっていることに注意。

# Q15.[Web] Redirect


http://q15.ctf.cpaw.site にアクセスしようとすると http://q9.ctf.cpaw.site/ にリダイレクトする。
開発者ツールを開いた状態で、http://q15.ctf.cpaw.site を開き、開発者ツールのネットワークタブに移動する。q15.ctf.cpaw.site のレスポンス ヘッダーに注目するとflagがある。
![スクリーンショット 2023-01-07 6.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/23f265fa-d163-4455-278f-9b67f0dbb4df.png)


# Q16.[Network+Forensic]HTTP Traffic
例のごとくWiresharkを使う。HTTPプロトコルの通信のキャプチャなので、**File > Export Objects > HTTP...** と進めば良い。![スクリーンショット 2023-01-07 7.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/8139b75a-f30f-1de9-dc33-2853e901bc2c.png)
Save Allを選択し、任意の場所に保存する。ファイルが散らばらないように新たにディレクトリを作った。network100(1)というファイルにHTMLで重要そうな情報が記載されているので.htmlと追記しブラウザで開いてみると、cssやimg、jsが読み込めていないためボタンが押せないことに気づく。HTMLファイルの記述に従って、各ファイルを適切なパスに配置してあげると、答えにたどり着ける。
macで画像内の文字をコピーしたいときは、プレビューで開いて、OSのOCR機能を使うと楽。機械学習で文脈を考慮して読み替えられたりするので文字起こしが思い通りにいかないときもあるが、自分で微調整すれば良い。デフォルトだとOCR機能はオフになっているので注意。

だんだん楽しくなってきた。

# Q17.[Recon]Who am I ?
Twitterで検索方法を工夫したりしてみたが見つからず、結論だけ言うと、Googleで「porisuteru　スペシャルフォース2」と検索したら見つかった。Googleしか勝たん。余談だが、このアカウントはもう動いていなさそう。隠居しているのだろうか。

# Q18.[Forensic]leaf in forest
lovelive!が無駄にたくさんあるのでとりあえず削除してみると、3文字繰り返しになっている文字がflagであることに気づく。
![スクリーンショット 2023-01-07 7.48.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/7e594acf-29c8-ddcf-fcc6-d6695f2cc073.png)
後から気づいたが、lovelive!は、ラブライブのことだったのか。

# Q19.[Misc]Image!
ダウンロードしたzipファイルはクリックしても開けないので、とりあえず`file`コマンドを実行してみる。
>file misc100.zip
misc100.zip: OpenDocument Drawing

OpenDocument DrawingでググるとODFというものだとわかった。LibreOfficeなどで開けるらしいが別の方法を考えてみる。
https://ja.libreoffice.org/discover/what-is-opendocument/ を参考にすると
一般的なODFファイルの拡張子は以下。
- .odt – テキスト文書
- .ods – 表計算ファイル
- .odp – プレゼンテーションファイル
- .odg – イラストやグラフィック
下三つは上からExcel, PowerPoint, Wordに対応しているっぽい。.odgにしてWordで開くとflagが判明した。ちなみに.odtでもWordで開くことができた。

余談だが、`unzip misc100.zip -d misc` などとしてやるとmiscというディレクトリに展開できた。中身を見るとthumbnail.pngというファイルがあり限りなく答えに近いが、黒塗りが邪魔してflagはわからなかった。![スクリーンショット 2023-01-07 8.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/0184e526-1fb8-2e92-fa0d-99152fb883bd.png)

また、よくわからないファイルに対しては、`file`コマンド以外にも`strings`コマンドというものが有効であるときがあるらしい。`strings`コマンドを使っても今回はよくわからなかった。違いについては後日調べる。

# Q20.[Crypto]Block Cipher
添付されたC言語ファイルをフォーマットしたものが以下である。
~~~C:crypto100.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
  int i;
  int j;
  int key = atoi(argv[2]);
  const char *flag = argv[1];
  printf("cpaw{");
  for (i = key - 1; i <= strlen(flag); i += key)
    for (j = i; j >= i - key + 1; j--)
      printf("%c", flag[j]);
  printf("}");
  return 0;
}
~~~
どうやら第一引数に文字列、第二引数に数値を渡せば良さそうだとコードからわかる。問題のタイトルにもなっている**Block Cipher**というのは**ブロック暗号**という有名なものらしい。これがヒントになっていて、for部分に注目するとkey文字を1ブロックとして、逆順に出力しているプログラムなのだと検討がつく。
暗号文：cpaw{ruoYced_ehpigniriks_i_llrg_stae}に注目すると、最初の4文字ruoYがYourの逆順になっていることに気づき、keyとしては4を渡せば良いと考えられる。
> ❯ gcc crypto100.c -o crypto100
❯ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 4
cpaw{Your_deciphering_skill_is_great}%   

確かに答えが得られた。
# Q21.[Reversing]reversing easy!
elfファイルはmacでは実行できないので、ひとまずパスさせてください。はやく仮想環境作らなきゃ...

# Q22.[Web]Baby's SQLi - Stage 1-
`select * from palloc_home`で解決。

# Q28.[Network] Can you login？
とりあえずWiresharkで開く。**tcp.stream eq 1**でフィルタリングできるらしい。eq 0はログインに失敗していることを表すようだ。**右クリック > Follow > TCP Stream**といくとUSERとPASSがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/38951029-dabf-54f1-ec49-5f8a59693fd5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790537/d477fd6f-f846-a608-3701-7b588e6b2c8e.png)
あとは`ftp`コマンドというものを使う。Macにインストールしていない場合は使えないので、
`brew install tnftp`でインストールできる。
FTPサーバがUSERやPASSの横のDedtinationを見ればわかり、118.27.110.77とあるので、
>ftp 118.27.110.77
Connected to 118.27.110.77.
220 Welcome to Cpaw CTF FTP service.
Name (118.27.110.77:as): cpaw_user
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -a
229 Entering Extended Passive Mode (|||60018|)
150 Here comes the directory listing.
drwxr-xr-x    2 ftp      ftp            42 Mar 17  2021 .
drwxr-xr-x    2 ftp      ftp            42 Mar 17  2021 ..
-rw-r--r--    1 ftp      ftp            39 Sep 01  2017 .hidden_flag_file
-rw-r--r--    1 ftp      ftp            36 Sep 01  2017 dummy
226 Directory send OK.
ftp> get dummy
local: dummy remote: dummy
229 Entering Extended Passive Mode (|||60022|)
150 Opening BINARY mode data connection for dummy (36 bytes).
100% |\***********************************|    36      151.53 KiB/s    00:00 ETA
226 Transfer complete.
36 bytes received in 00:00 (4.38 KiB/s)
ftp> get .hidden_flag_file
local: .hidden_flag_file remote: .hidden_flag_file
229 Entering Extended Passive Mode (|||60007|)
150 Opening BINARY mode data connection for .hidden_flag_file (39 bytes).
100% |***********************************|    39      197.33 KiB/s    00:00 ETA
226 Transfer complete.
39 bytes received in 00:00 (4.81 KiB/s)
ftp> quit
221 Goodbye.

のようにしてdummyファイルと.hidden_flag_fileファイルをローカルにダウンロードできる。dummyファイルには **FLAG file exists in this directory.** と書かれていた。
`.`から始まるファイルは隠しファイルであり、MacのFinderでは`cmd + shift + .`で表示できる。
`ls -a`の`-a`はallを意味し、ドットファイルも表示するためのオプションである。ファイルの中身はダウンロードせずに`less`コマンドで確認しても良い。なお、`cat`コマンドは使えなかった。
ちなみに、ftpは`quit`でも`exit`でも抜けることができる。

ターミナルに長いパスワードを打つのが大変だったが、パスワードもペーストできることが後からわかった。