防衛省サイバーコンテスト2024 WriteUP

# はじめに
2024_02_25に開催された防衛省サイバーコンテストのWriteup(一部)です．
今回のCTFはちゃんとCTFの勉強を始めて2回目のCTFでした．
自分のOUTPUTも兼ねて公開したいと思います．

# Welcome!
ここで問題用サーバに接続するための`.ovpn`ファイルと，FLAGが書かれた`Welcome.txt`の配布がありました．

# Information of Certificate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/d21f9963-b0e7-5f0d-0811-3f48e6b74b1c.png)
`Eady.crt`という証明書が配布され，この証明書の発行者のコモンネーム部がFlagとなっているようです．
このようなファイルを扱うのは初めてだったため少し手間取りましたが，ファイルのプロパティを見るだけでいいみたいですね．（＊コマンドで見る方法もあるみたいなのでそちらも試してみます．）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/db27044c-670e-ae06-3152-a72154bb3fb8.png)

# String Obfuscation
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/ecdb4fc9-1e87-334d-f354-b9c43007ffdc.png)

以下のようなpythonファイルが配布されました．
```python
import sys

if len(sys.argv) < 2:
    exit()

KEY = "gobbledygook".replace("b", "").replace("e", "").replace("oo", "").replace("gk", "").replace("y", "en")
FLAG = chr(51)+chr(70)+chr(120)+chr(89)+chr(70)+chr(109)+chr(52)+chr(117)+chr(84)+chr(89)+chr(68)+chr(70)+chr(70)+chr(122)+chr(109)+chr(98)+chr(51)

if sys.argv[1] == KEY:
    print("flag{%s}" % FLAG)
```
これはただソースコードを読めばわかりそうですね．
`replace(A,B)`はAをBに置換するものなので，これを前から順番に実行していくと，最終的にKEYは`golden`になります．
そして実行時の引数として`python3 string_obfuscation.py golden`とすると`sys.argv[1]`とKEYが一致するためFLAGを得られます．

# FileExtract
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/0fa9d560-1353-0952-9653-604d4bbde117.png)
`FileExtract.pcapng`というパケットキャプチャファイルが配布されました．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/38b6964d-82a1-7c06-3e49-0faf88f22670.png)
かなり長いですが，プロトコルの部分を見ると定期的にFTPが流れており何かを送信していることがわかります．なのでFTPプロトコルに絞って追跡してみます．(追跡の仕方は適当なFTPパケットにカーソルを合わせて右クリックし「追跡」→「TCPストリーム」でできます．)
追跡結果が以下の通りです．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/d6095e98-a56f-40ff-51cb-b3944a8f8395.png)
ユーザ名やパスワードが平文で送られており`s3cr3t.zip`が送られていることがわかります．
なので`s3cr3t.zip`を調べてみます．
プロトコルがFTP-dataのパケットに注目します．
FTP-dataのところにカーソルを合わせて右クリック→「追跡」→「TCPストリーム」を選択します．
すると以下のような文字列が得られます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/d9af048e-2a69-b21e-9203-b1e63a4f5419.png)
これをRaw形式で保存します．これを開こうとするとパスワード入力画面が出てくるので先ほどの得られたパスワード`br2fWWJjjab3`を入力するとFLAGが得られます．

# Logistic Map
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/1e5305c4-bf49-f514-b80d-94880b620c98.png)
これはコード書けばいいだけですね．
```python
x = 0.3

for i in range(1,10000):
    x = 3.99 * x * (1 - x)
    print(f'x_{i}:{x}')
```
# The Original Name of AES
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/6d5be2fe-39b4-3d9c-03fd-d9e2955a3f5c.png)
これは調べる問題ですね．
https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard

# CVE Record of Lowest Number
これも調べる問題ですね．
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-1999-0001
このページの「Description」の欄に `ip_input.c `とあります．

# MFA FACOR
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/c8353bc2-1f8e-e04a-aaae-2ef30bc5dd58.png)
50音順に「所持情報」，「生体情報」，「知識情報」ですね．

# Browsers Have Local Storage
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/024ce8d2-6d6a-872f-6632-cdfa3d120114.png)
とりあえずディレクトリ探索してみます．`gobuster dir -u 10.10.10.30 -w /usr/share/wordlists/dirb/common.txt -o gobuster_log.log`
すると`/js`というファイルがあります．
`localStorage.js`の中に答えがあります．
＊ディレクトリ探索しなくてもページのソース見ればわかりましたね．

# おわりに
今回のCTFはちゃんとCTFの勉強を始めて2回目のCTFでした．
午前しか参加できませんでしたがまだまだ自分の知識不足を痛感しました．
これからももっと精進していきたいと思います．
参加された皆様，またどこかのCTFでお会いした際にはよろしくお願いいたします．