SECCON Beginners CTF 2021 Writeup

# 概要

おそらく3回目の参加となるSECCON Beginners CTF 2021
(https://www.seccon.jp/2021/seccon_beginners/_seccon_beginners_ctf_2021.html) (2021/05/22 14:00 ～ 2021/05/23 14:00 JST) に、今回も1人チームで参加しました。
結果は311点で、943チーム中388位でした。
 ~~以前より解けるように感じてきたけど、去年より成績落ちてる･･･？
半年以上CTFしてなかったからか･･･？~~

解けた問題については自分の解答を、解けなかった問題に関しては自分なりの解答への道筋を記載しておきます。
特に初心者・初学者の方には、反面教師としていただければと思います。
なお、解けた問題は以下の通りです。(時間とポイント数は分かりませんが･･･)

|category|challenge|備考|
|---|---|---|
|welcome|welcome|早押し問題|
|crypto|simple_RSA|愚直に素因数分解しようとしてた|
|reversing|Nan|バイナリ読めないのでやばいナリ～|
|pwnable|Nan|shellコードを流し込めばいいんだな、とざっくりした事までしか分からず。バイナリ読めないと(略)|
|web|osoba|元脆弱性診断士としては、もう少し解答したかった･･･|
|misc|git-leak|gitって意外と知らない事多かった。|
|misc|Mail_Address_Validator|一番乗りで解けた！とヌカ喜びしてましたが･････そんなことはなかった|

解けなかった問題や、他の方のWriteUpのリンク等は随時追加していこうと思います。 ~~三日坊主にならないようにしなきゃ~~

# 解けた問題

## welcome

### welcome

競技開始時に、Discordの`#announcements`チャンネルで公開されてました。
早押し問題。

```
ctf4b{Welcome_to_SECCON_Beginners_CTF_2021}
```

## crypto

### simple_RSA

Pythonのソースコードが与えられており、さらにその出力として`n,e,c`がそれぞれた与えられていました。
最初は、この程度の桁数なら自力で素因数分解できるんじゃない？と思ってましたたが、Windowsのメモ帳で開いていたのが敗因。数十桁どころか617桁もありました･･･~~(素直にcatなりviで開けば････)~~

注目すべきは、与えられているeの値がnよりかなり小さい事。Low Public-Exponent Attackが使用できます。
Low Public-Exponent Attackの詳細は他の方のWriteUpに任せますが、この問題では、`flag`の3乗が`n`より小さいと思われるので、3乗根を求めれば`flag`が求まります。

```
ctf4b{0,1,10,11...It's_so_annoying.___I'm_done}
```

## reversing

Nan。
バイナリ読めないとやばいなり～

## pwnable

shellコードを流し込めばいいんだな、とざっくりした事までしか分からず。バイナリ読めないと(略)

## web

### osoba

問題のWebページのURL( https://osoba.quals.beginners.seccon.jp/ )と、tar.gzファイルが与えられました。

指定のWebページに行き、適当にクリックすると、

```
https://osoba.quals.beginners.seccon.jp/?page=public/wip.html
```

のように、`page`パラメタに遷移先のURLが渡されていました。
さらに、問題文の

> フラグはサーバの `/flag` にあります！

と合わせて、ディレクトリトラバーサルを疑ってみました。
`/flag`にあるとの事なので、単純に、

```
https://osoba.quals.beginners.seccon.jp/?page=../flag
```

にアクセスすることで、flagが得られました
~~ちょうど、V〇ューバー深層組５女が味噌汁作るネタをしてたので、個人的にめちゃくちゃホットな話題でした。誰か狙った？~~

```
ctf4b{omisoshiru_oishi_keredomo_tsukuruno_taihen}
```


## misc

### git-leak

配布された`git-leak.zip`には、`.git`と`note.md`,`README.md`が入ってました。

問題文に、

> 後輩が誤って機密情報をコミットしてしまったらしいです。ひとまずコミットを上書きして消したからこれで大丈夫ですよね？

という~~(面白い)~~ことがつぶやかれていました。
~~愚直にログをcomitで検索して、~~`./git/logs/HEAD`から、上書きしていると思われる以下のログを発見しました。

```
73879828a8ecac85c705508cdc9398f26c697249 b3bfb5c80e48bba23ab820ff91442cc3800c393a task4233 <29667656+task4233@users.noreply.github.com> 1620491811 +0900	commit (amend): feat: めもを追加
```

ですので、上記の情報を元に、distディレクトリにて以下のように`git diff`をすることでflagが出てきました。(出力結果は省略します。)

```
git diff 73879828a8ecac85c705508cdc9398f26c697249 b3bfb5c80e48bba23ab820ff91442cc3800c393a
```

```
ctf4b{0verwr1te_1s_n0t_c0mplete_1n_G1t}
```

### Mail_Address_Validator

問題サーバーへの接続情報と、`main.rb`が与えられてました。
上記のコードを読むと、タイムアウトエラー(5秒のタイムアウトに引っかかると、status=14)のステータスの場合にフラグを出力する内容となっていました。
とりあえず、最初のファジングとして、100文字の適当な英数字を渡した所、あっさりフラグをゲットできました。
個人的に、この問題が一番簡単に感じました。

```
ctf4b{1t_15_n0t_0nly_th3_W3b_th4t_15_4ff3ct3d_by_ReDoS}
```

# 解けなかった問題

多いので、別記事にするかもしれません。(2021/05/25)

# 感想

バイナリが読めないのが致命的＆解答を読めば「そういう事かぁ！なんで気付かなかったんだ！」ってなる問題がいくつもあり、練度か経験辺りが足りてない感が否めないです････

問題の随所に、流行りのネタ(ウ〇娘、V〇uber？)を挟んできてたりして、思わずクスリとする場面もあり、和みました。

というか、miscのflyのゲームのBGMにめちゃくちゃ癒されて、終始流し続けてました。
~~(fly自体は、問題の正答とは全然別方向の事調べ続けて断念しましたが。)~~
真面目にあのBGMの詳細が知りたいです。

# 他の方々のWriteUpのリンク集

ある程度増えてきたら、別記事にして投稿しようと思います。(2021/05/25)

## 作問者のWriteUp

## 回答者のWriteUp