CpawCTFで必要だった技術

先日、[CpawCTF](https://ctf.cpaw.site/index.php) をチャレンジ3まで解ききったので、
そこまでで使用した技術などを網羅的にメモとして残しておきます。

CpawCTFはCTF初心者にうってつけのサイトと言われており、
基礎的な技術を実践的に学べる良問が揃っています。

これからCTFに挑戦してみたいと思っている方の参考になれば幸いです。

# Linux

基本的に問題はLinux環境での操作が前提となっていることが多く、
以下のようなコマンドライン操作に慣れておくとスムーズです。


### 基本的なファイル操作コマンド

| コマンド | 例                  | 説明                                    |
|----------|---------------------|-----------------------------------------|
| `ls`     | `ls -la`            | ファイル一覧を詳細表示（隠しファイル含む）        |
| `cd`     | `cd ./files/`       | ディレクトリを移動                           |
| `cat`    | `cat flag.txt`      | ファイルの中身を表示                         |
| `grep`   | `grep "flag" *.txt` | テキスト内から特定の文字列を検索               |
| `find`   | `find . -name "*.jpg"` | 指定条件に合うファイルを検索（例：拡張子 .jpg） |



### ファイル解析系コマンド

| コマンド   | 例                                | 説明                                           |
|------------|-----------------------------------|------------------------------------------------|
| `file`     | `file mysterious.bin`            | ファイルの種類を判別（バイナリかテキストかなど）            |
| `chmod`    | `chmod +x script.sh`             | ファイルに実行権限を付与                                 |
| `strings`  | `strings image.png \| grep flag`  | バイナリから可読な文字列を抽出し、"flag" を含む行を抽出     |
| `xxd`      | `xxd secret.txt`                 | ファイルの内容を16進ダンプ表示                            |
| `xxd -r -p`| `xxd -r -p hex.txt > out.bin`     | 16進から元のバイナリに復元                                |


### パイプ・リダイレクトの例と説明

| 技術             | 例                                   | 説明                                                  |
|------------------|--------------------------------------|-------------------------------------------------------|
| パイプ `\|`       | `cat data.txt \| grep "flag"`         | `cat` の出力を `grep` に渡し、"flag" を含む行を抽出       |
| リダイレクト `>`   | `echo hello > out.txt`                | 出力を `out.txt` に**上書き保存**                      |
| リダイレクト `>>`  | `echo world >> out.txt`               | 出力を `out.txt` に**追記**                            |
| リダイレクト `<`   | `python solve.py < input.txt`         | `solve.py` の**入力を `input.txt` から受け取る**        |


特に strings, chmod, file, ls などはCpawCTFでも多用するので
どのようなオプションがあるのかなども知っていると楽です。

# C言語
CTFではしばしば「謎の実行ファイル」が渡され、
その中でどんな処理が行われているかを見抜く必要があります。
そうしたバイナリファイルは、C言語で書かれたプログラムをコンパイルしたものが多く、
基本的なプログラムの理解が必要です。

CpawCTFでは特に難しい文法などは出現しないのでif, forなどの基礎文法を読み解けるようであれば大丈夫です、また多少ポインタを知っていると早く気づける問題などもありました。


# Web
CpawCTFではWebの問題は少なく開発者ツールやSQLインジェクションを主に使って問題を解いていきます。

開発者ツールでは具体的にHTMLソースコードやJavaScriptを調べたり、
ネットワークを監視をして何が通信されていたのかを見るのが問題としてありました。

# ネットワーク解析
CpawCTFの中には、通信の中にフラグが隠されている問題があります。
.pcap（パケットキャプチャ）形式のファイルが与えられることが多く、
Wiresharkで通信内容を読み解く力が求められる。

CpawCTFでは特に難しいWiresharkの操作などは求められませんが、
TCPではなくFTCを使う問題があります。
恥ずかしながら私はFTCへの接続方法がわからず調べながら解きました。

データの場所がある程度目星つく人は初心者では難しいと思うので、
頑張りながら探して見つける内にある程度ここら辺こういう情報があるなと覚えていくのが良いでしょう。

# Ghidraを使ってデコンパイル
バイナリファイルを解析してフラグを出力する条件や処理を見つける問題が登場します。
難しいアセンブリの知識がなくても、Ghidraを使いC言語に復元されたコードを読んで、条件を理解することができます。中にはLinuxのstringsなどでごり押しで解くこともできますが、
あまりにもこれで良いのか感が凄いので、DLしてやってみました。
CpawCTFではただ使うだけなので難しいことは特にないです。

# まとめ
私がCpawCTFに持った感想はたくさんの知識を浅く網羅的に攫ってくれるなと思いました。
実際私も解いていきながら分からない所は調べたりしていましたが、
その道中でこれってどういう仕組みで出来てるのだろうと問題以上の知識を調べたりと、
様々な分野のへの興味のきっかけになることが多かったです。
CpawCTFやろうか悩んでる人もそんなに難しい物では無いので、
とりあえず手を付けてみるのが良いと思います。

それではまた。