【write up】CpawCTF Level 1

## はじめに

文系大学生をしているものです。
ネットワークとかセキュリティに興味を持ち、「ネットワークななぜつながるのか」等の本を読んだりしたのですが、あまり身についている感じがせず、うーんという感じでした。
色々調べると、どうやらCTFをすると詳しくなれそうだったので入門してみました。
[CTF初心者が考えるCTF入門](https://kinako-mochimochi.hatenablog.com/entry/2019/02/20/131937)を参考にし、[CpawCTF](https://ctf.cpaw.site/index.php)から初めてみました。

筆者のレベル感としては、基本情報勉強済み(まだ受けれてない)、VirtualBox、Dockerがなんとなく触れる、AtcoderのC問題がたまに解けない、という感じです。

## [Q6.[Crypto] Classical Cipher](https://ctf.cpaw.site/questions.php?qnum=6)

簡単なアルゴリズムで解けました。
[参考][【Python】シーザー暗号](https://qiita.com/Naoto9282/items/0c7dd06b0b6cd574d7d3)

```python
def decoding(string):
    enc = string.lower()
    KEY = 3
    plain = ""

    for char in list(enc):
        ASCII = ord(char)
        num = ASCII - 97
        num = (num - KEY) % 26
        ASCII = num + 97
        plain += chr(ASCII)

    print(plain)
    
decoding("hogehoge")
```

## [Q7.[Reversing] Can you execute ?](https://ctf.cpaw.site/questions.php?qnum=7)

macのターミナルで ``file``コマンド を打ったら**Linux**という単語がみられたので、これはmacでは開けないやつかと思いつつ、権限を与えたり実行してみたりしたのですが案の定実行できず。。。

```
~/desktop/CTF
< file exec_me
exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
~/desktop/CTF
< ./exec_me
zsh: permission denied: ./exec_me
~/desktop/CTF
< chmod 777 ./exec_me
~/desktop/CTF
< ./exec_me
zsh: exec format error: ./exec_me
```

VirtualBoxで仮想環境を立てていたのですが、ファイルの共有で躓いたのでDockerで実行しました。
詳しくはこの記事で。
[【docker for mac】ローカルのファイルを共有してコンテナ内で実行する方法](https://qiita.com/wafuwafu13/items/4346c146bcc067838d7c)

```
< docker run -v "/Users/tagawahirotaka/Desktop/CTF/:/CTF" -it "centos:7"
```
dockerのコンテナ内で実行したらいけました。

```
[root@59bc83ebe13e CTF]# ./exec_me
```

## [Q8.[Misc] Can you open this file ?](https://ctf.cpaw.site/questions.php?qnum=8)

docker for mac で windows のイメージがpullできなくて諦めました。

## [Q9.[Web] HTML Page](https://ctf.cpaw.site/questions.php?qnum=9)

chromeの検証を使いました。

## [Q10.[Forensics] River](https://ctf.cpaw.site/questions.php?qnum=10)

[EXIF確認君](http://exif-check.org/)を使いました。

## [Q11.[Network]pcap](https://ctf.cpaw.site/questions.php?qnum=11)

[Wiresharkを使った通信監視（前編）――基本的な使い方とパケット解析](https://knowledge.sakura.ad.jp/6286/)
[.pcapファイルについてちょっと調べた](http://sorenuts.hatenablog.com/entry/2018/06/07/195209)

上記の記事を参考にしました。


## [Q12.[Crypto]HashHashHash!](https://ctf.cpaw.site/questions.php?qnum=12)

ハッシュ関数をググったら以下のサイトに飛んで答えが分かりました。
[SHA-1](https://sha1.gromweb.com/?hash=e4c6bced9edff99746401bd077afa92860f83de3)

## [Q14.[PPC]並べ替えろ!](https://ctf.cpaw.site/questions.php?qnum=14)

選択ソートを実装して解きました。

```python

def findSmallest(arr):
    smallest = arr[0]
    smallest_index = 0
    for i in range(1, len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
    return smallest_index

def selectionSort(arr):
    newArr = []
    for i in range(len(arr)):
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest))
    return newArr

line_up_list = selectionSort([15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207])

line_up_list.sort(reverse=True)

str_list = [str(i) for i in line_up_list]

print(''.join(str_list))
```

## まとめ

知識が身についた感じはしなかったですが、楽しかったので深めていったら見えてきそうなものはありました。
Linuxが使えないと解けないとか、Wiresharkを使わないと解けないとかいう問題がこの段階からあったのでAtcoderより参入障壁はだいぶ高いのかなと思います。