SECCON Beginners CTF 2023 Writeup



# 概要
この記事は、先週末に実施されたSECCON Beginners CTF 2023のWriteUpです。

色々あって一気に書けないので、数日かけて解けた問題から少しずつ放出します。
キレイな・完答は作問者や上位勢のwriteupに任せますので、私なりの解いた道筋を簡単に記載していきます。

## 開催概要

- スコアサーバURL：https://score.beginners.seccon.jp/
- 開始時刻：2023/06/03 (土) 14:00 JST
- 終了時刻：2023/06/04 (日) 14:00 JST

なお、まだしばらくはサーバーにアクセスできるようです。
復習に使用させていただきます。

とりあえず、回答できた問題を中心に記載していきます。
記録・復習用に、回答できた問題には「回答済」、できなかった問題は「未回答」と記載しておきます。

## 結果
今回も１マンチームで参加し、
最終結果は、297/778 th、318 point でした。

ペネトレの修行とCTFを両立するの難しいですね･･･他にもやりたい事たくさんあるし･･･

![score.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653289/c613dfd9-a499-de4d-bcce-5443a6df5240.png)

![score02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653289/88de23bf-3f45-a1c6-534a-82fbfce02665.png)


# 環境
Windows + Kalilinux
プログラムはすべてPython3
その他、各種ツール

# welcome
Discodeのアナウンスを確認しましょう。

```
ctf4b{Welcome_to_SECCON_Beginners_CTF_2023!!!}
```

# crypto
今回全然解けませんでした･･･しっかり復習します。

## CoughingFox2(Beginner:未回答)

```

```


## Conquer(easy:未回答)

```

```

## Choice(medium:未回答)
```

```

## switchable_cat(medium:未回答)
```

```

## cooking(Hard:未回答)
```

```

# pwnable
せめてbeginnerくらいはクリアしたかった･･･

## poem(beginner:未回答)
```

```


## rewriter2(easy:回答済)
```

```


## Forgot_Some_Exploit(Easy:回答済)
```

```

```txt:flag

```

## Elementary_ROP(medium:未回答)
```

```


## driver4b(medium:回答済)
```

```


```txt:FLAG
```

## No_Control(hard:回答済)
```

```


```txt:FLAG
```

# misc
## YARO(Beginner:ギリギリ未回答)
```
サーバーにマルウェアが混入している可能性があるので、あなたの完璧なシグネチャで探してください

nc yaro.beginners.seccon.games 5003

backup

nc yaro-2.beginners.seccon.games 5003

https://score.beginners.seccon.jp/api/download?key=beginners23%2FYARO.tar.gz
hash:3e8137a394a95756b0f8f8aee5265988f3122297
```

時間無いって言ってるのに、1問に時間かけすぎじゃい！！！！
と自分で自分を叱った問題です。

ncで接続した先で、実際にYARAルールを記載してやると、実行してくれるアプリが動いているようです。

とりあえずフラグのフォーマットは`ctf4b{`と定義されているので、それを検出できるYARAルールを以下のように記述しました。

```txt:YARAルール1
rule NumberOne
{
meta:
desc = "Sonala"
weight = 10
strings:
$c = "ctf4b{"
condition:
all of them
}
```

その後、何を思ったのか･･･手動で残りの文字を特定していっていました。
流れとしては、文字数を確定し、各種文字種を確定、確定させた文字種から範囲を絞って文字を確定させる････焦って手動でやるくらいなら、コード書いた方が早かったんじゃ･･･

```YARA:1. 以下、大体の文字数を確定（28文字はエスパーです。）
rule flag {
    strings:
        $ident = /ctf4b{Y[0-9a-zA-Z_]{0,28}}/
    condition:
        all of them
}
```

```YARA:2. くり返し範囲を文字種や文字範囲で少しずつ絞り、以下まで判明。
rule flag {
    strings:
        $ident = /ctf4b{Y3t_An0th3r_R34d_Opp0rtun1ty[0-9a-zA-Z_]{0,2}}/
    condition:
        all of them
}
```

```YARA:3. 残りの正確な、文字範囲のくり返しの個数を特定
rule flag {
    strings:
        $ident = /ctf4b{Y3t_An0th3r_R34d_Opp0rtun1ty[0-9a-zA-Z_]{2}}/
    condition:
        all of them
}
```

```txt:FLAG
ctf4b{Y3t_An0th3r_R34d_Opp0rtun1ty}
```

## polyglot4b(beginner:未回答)
```

```

## shaXXX(easy:未回答)
```

```

## drmsaw(medium:未回答)
```

```

## polyglot4b2(medium:未回答)
```

```

## treasure(hard:未回答)
```

```

# web
## Forbidden(beginner:回答済)
```
You don't have permission to access /flag on this server.

https://forbidden.beginners.seccon.games

https://score.beginners.seccon.jp/api/download?key=beginners23%2FForbidden.tar.gz
hash:018c1361937a789b327181c9a46ec574906c360c
```

提示されたURLへアクセスすると、flagファイルへのリンクが張ってあるのみ。
ただし、ただリンクを踏むだけだと403となりアクセスできません。

ソースコードの`index.js`を読んでみると、`/flag`で完全一致している文字列のURLのアクセスが拒否されています。
ですので、例えば`/FLAG`のように一部大文字にしてアクセスしてやれば、ブロックを回避できる上で実体は`/flag`へのアクセスとなります。

```javascript:index.jsの抜粋
const block = (req, res, next) => {
    if (req.path.includes('/flag')) {
        return res.send(403, 'Forbidden :(');
    }
```

```txt:FLAG
ctf4b{403_forbidden_403_forbidden_403}
```

## aiwaf(easy:回答済)
```
AI-WAFを超えてゆけ！！ ※AI-WAFは気分屋なのでハックできたりできなかったりします。

https://aiwaf.beginners.seccon.games

https://score.beginners.seccon.jp/api/download?key=beginners23%2Faiwaf.tar.gz
hash:2ce11f780bbdae5509bd80f9b3ef9d7545951f9f
```



```txt:FLAG

```

## double check(medium:未回答)
```

```

## phisher2(medium:未回答)
```

```

## oooauth(hard:未回答)
```

```

# Reversing
## Half(beginner:回答済)
```

```


```txt:FLAG

```

## Three(easy:未回答)
```
```


```txt:FLAG

```

## Poker(medium:回答済)
```

```



```txt:FLAG

```

## Leak(medium:未回答)
```

```

## Heaven(Hard:未回答)
```

```


# 今後の課題・所感
- 急用ができてあまり参加できなかったですが、beginner問題すら解けていない分野がちらほらあるのがとても悔しいです。
- pwnとCryptに弱いのが課題ですね････

# 他の方のWriteUp
復習用。独断と偏見で特に有用と感じたWriteUpを載せておきます。



とても分かり易い解説配信でした。毎度のごとく、Cryptの解説・回答スピードがすさまじいです。

## 作問者WriteUp

###