Chap3. Level2前半

## はじめに

CTF学習のため、cpawというサイトの問題を解いていく記事です。
今回はpcap見る問題と、バイナリファイル見る問題、SQLの問題を解きます！
Q17のWho am I?については本当に調べるだけなので省略しています。

https://ctf.cpaw.site/index.php


### この記事の対象者
- CTF超初心者
- cpawの問題を解いてみたい人

### 問題一覧

- [Q16 [Network+Forensic] HTTP Traffic](#q16-networkforensic-http-traffic)
- [Q18 [Forensic] leaf in forest](#q18-forensic-leaf-in-forest)
- [Q22 [Web] Baby's SQLi Stage 1](#q22-web-babys-sqli-stage-1)

***
### Q16. [Network+Forensic] HTTP Traffic
__パケットキャプチャーファイルの中身を覗く問題__
pcap：ネットワークを流れるパケットをキャプチャーしたもの
[前回](https://qiita.com/e28992/private/9cdc64a85127d12d50cb)と同じく[Wireshark](https://www.wireshark.org/) を使っていきます。
しかし、今回は前のようにflagが直接手に入らないので少し手を加える必要があります。

<details><summary>flagの見つけ方</summary>
<div>

Wiresharkでダウンロードした `http_traffic.pcap` を開きましょう。
どうやらWebページを表示する通信や、
ページ内で何かしら操作した際の通信がキャプチャされているようですね。

> ファイル -> オブジェクトをエクスポート -> HTTP... -> Save All

この手順によって選択したフォルダ内に下の画像のファイル達が保存されます！
![http.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806017/a2e006a1-a960-4432-9e4f-d361e46b4f1d.png)

`netowork100`と`network100(1)`を開くとHTMLで書かれているのがわかります。
内容的に`network100(1)`をうまいこと実行できればflagが得られそうですね。

次に、`network100(1)`内の画像やcssファイルのリンクから考えて、
ディレクトリ構成を再現する必要があるとわかります。
`css` `img` `js`という3つのフォルダを新規作成し、ファイル達を適切なフォルダに移動してあげましょう！
![directory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806017/6a9021cc-896d-4c71-a340-8c36eea7f0c6.png)

ディレクトリ構成がこの画像のようになったら、`network100(1)`を開いてボタンを押すとflagが得られます！

</div>
</details>

<details><summary>flag</summary>
<div>

```
cpaw{Y0u_r3st0r3d_7his_p4ge}
```

</div>
</details>

***
### Q18. [Forensic] leaf in forest
__バイナリファイルからflag見つける問題__
※flagは全て小文字です！

<details><summary>flagの見つけ方1 (Unix または wsl 系の環境推奨)</summary>
<div>

とりあえずcatコマンドやらlessコマンドやらで中身を見ると`lovelive!`が溢れかえっています...。
所々にAAAなどの　同じ3文字が埋め込まれているようなので、
コマンドで文字列を抽出してみましょう。

Unix系(WSL環境も)は`stringコマンド + sedコマンド`を使います。
> `strings`：指定ファイルから文字列を抽出。
> `sed`：`lovelive!` 内の1文字でも一致するものを削除

```
strings misc100 | sed 's/[lovelive!]//g'
```

3文字連続を1文字ずつにするとflagが得られました！

</div>
</details>

<details><summary>flagの見つけ方2 (環境的に見つけ方1が厳しい場合)</summary>
<div>

スマートではないですが、Windowsだと
> メモ帳orVScodeなどで開く->置換でlovelive!を削除->3文字連続を1文字に

</div>
</details>

<details>
  <summary>flag</summary>
  <div>
  
  ```
  cpaw{mgrep}
  ```
  
  </div>
</details>

***
### Q22. [Web] Baby's SQLi Stage 1
__基本的なSQL文を書く問題__
SQL：データベース操作に使う言語で、データ追加・削除・検索・更新ができる。

[このサイト](http://ctf.spica.bz/baby_sql/)のフォームに、
指定されたSQL文を入力&実行してぱろっく先生を探してあげましょう！

SQLあんまり知らないけど解きたい人用のSQL文超簡単解説をつけておくので、
よければ参考程度に見てみてください！
大ヒントにはなってしまうのでそこは悪しからず...。

<details><summary>SQLの答え見たくないけどSQL考えたい人向けヒント</summary>
<div>

まず、SQLには主に、以下の4種類の文があります。
> - INSERT：テーブルにデータを追加する
> -  SELECT：テーブルのデータを検索する
> -  UPDATE：テーブルのデータを更新する
> -  DELETE：テーブルのデータを削除する

今回は、__探す__ ことが目的なので`SELECT`が適切でしょう。

次に考えるのは、 __どこの列(カラム)の__ です。
これは、列名がわかっている場合なら id列の〜 というように指定できますが、
今回は探したいデータベースの構造がわからないので、全ての列の結果を表示させましょう。
こういった場合は __ワイルドカード__ を用います。
何を使うかは、[このサイト](https://support.microsoft.com/ja-jp/topic/%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E6%96%87%E5%AD%97%E3%81%AE%E4%BE%8B-939e153f-bd30-47e4-a763-61897c87b3f4)とかを参考にしてみてください！

最後に、`palloc_home`というテーブルからということなので、
`FROM テーブル名`で指定してやります。

```
SELECT 列名(またはワイルドカード) FROM テーブル名
```

といった基本構文が出来上がるのではないでしょうか！

</div>
</details>

<details><summary>求めるSQL文と解説</summary>
<div>

```
SELECT * FROM palloc_home
```

※基本大文字で表記しますが、小文字でも動作するようになっています。

</div>
</details>

<details><summary>flag</summary> 
<div>

```
cpaw{palloc_escape_from_stage1;(}
```

ここで出てきた[next stage url](https://ctf.spica.bz/baby_sql/stage2_7b20a808e61c8573461cf92b1fe63b3f/index.php)は後で使う為、適当な場所に残すことをお勧めします！

</div>
</details>

***
## おわりに
第3回目はLevel2の問題をいくつかピックアップしましたが、
Level1のように一筋縄でできる問題がだいぶ減ってきた感じがしますね...。
第4回目以降も順次上げて行きたいと思います。