🍅

SECCON Beginners CTF 2025 Writeup

に公開

SECCON Beginners CTF 2025

SECCON Beginners CTF 2025に参加しました。
以下に回答した問題のWriteupを記載します。

welcome

welcome

問題

SECCON Beginners CTF 2025へようこそ Flagは ctf4b{W3lc0m3_2_SECCON_Beginners_CTF_2025} です

解答

ctf4b{W3lc0m3_2_SECCON_Beginners_CTF_2025}

web

skipping

問題

/flagへのアクセスは拒否されます。curlなどを用いて工夫してアクセスして下さい。
curl http://skipping.challenges.beginners.seccon.jp:33455

解答

http://skipping.challenges.beginners.seccon.jp:33455にアクセス。

/flagにアクセスすると"403 Forbidden"と表示される。

共有されたzipファイル内にindex.jsが確認できる。
リクエストヘッダが、"x-ctf4b-request:ctf4b"ではない場合、403 Forbiddenを返す内容となっている。

curl -H オプションを用いて、リクエストヘッダを指定しアクセスすることでフラグが取得できる。

log-viewer

問題

ログをウェブブラウザで表示できるアプリケーションを作成しました。 これで定期的に集約してきているログを簡単に確認できます。 秘密の情報も安全にアプリに渡せているはずです...

解答

access.logおよびdebug.logを選択して表示ができるウェブサイトであることが確認できる。

access.logを確認すると、../.env と ../../proc/self/environ へアクセスした形跡が確認できる。
LFIを用いることでアクセス可能であることが推測される。

file= に "../../proc/self/environ"を指定することでファイルを読み取ることが可能。
また、その他ディレクトリについてもLFIによる読み取りを試したが確認している限り、
proc配下以外は有効ではなかった。

debug.logを確認すると以下内容が確認できるため、proc/self/cmdlineが読み取り候補として挙がる。

file= に "../../proc/self/cmdline"を指定することでフラグが取得できる。

misc

kingyo_sukui

問題

scooping! http://kingyo-sukui.challenges.beginners.seccon.jp:33333

解答

アクセスを行うと以下のような出力がされる。

正しいフラグを各文字クリックしていくことでクリアとなるように見受けられる。

ソースコードが共有されているため中身を確認すると、decryptFlag関数内に、encryptedFlag及びsecretKeyをそれぞれBase64でデコードし、XORで復号化する内容が読み取れる。

以下のようにCyberChefを用いて上記内容を行うことでフラグが取得できる。

url-checker

問題

有効なURLを作れますか?

nc url-checker.challenges.beginners.seccon.jp 33457

解答

以下内容の.pyファイルが共有されている。

urlparseにより、入力した内容をパースし、hostnameの部分を以下の条件で参照していることがわかる。

parsed.hostname と parsed.hostnameが"example.com"から始まるURLを入力することができればフラグが獲得できる条件分岐に入ることができる。
ただし、parsed.hostnameとallowed_hostname(example.com)が一致してしまうと、条件分岐により先に処理してしまう為、"You entered the allowed URL :)"が出力されて処理が終了されてしまう。

以下のように http[://]example[.]coma 等を入力することでフラグを取得できる。

reversing

CrazyLazyProgram1

問題

改行が面倒だったのでワンライナーにしてみました。

解答

CLP1.csが共有されており、配列flagに16進数の値が格納されていることが確認できる。

それぞれをASCIIコードの文字変換を行うことでフラグが取得できる。

CrazyLazyProgram2

問題

コーディングが面倒だったので機械語で作ってみました

解答

ファイル(CLP2.o)が共有される。

fileコマンドよりELFファイルであることが確認できる。

IDAでファイルを開き、デコンパイルを行う。
以下のように値を比較し続けていることがわかる。

値を文字(Char)に変換するとフラグ形式と思われる文字が確認できる。

"Flag is correct!"まで値を文字(Char)に変換し続けるとフラグが取得できる。

フラグは以下となる。
ctf4b{GOTO_G0T0_90t0_N0m0r3_90t0}

D-compile

問題

C言語の次はこれ!
This is the next trending programming language!
※一部環境ではlibgphobos5が必要となります。 また必要に応じてecho -nをご利用ください。

解答

"d-compile"というファイルが共有される。
IDAでファイルを開き、デコンパイルを行いMain関数付近を中身を眺めていたところ、フラグと思われる文字列を確認。

pwnable

pet_name

問題

ペットに名前を付けましょう。ちなみにフラグは/home/pwn/flag.txtに書いてあるみたいです。
nc pet-name.challenges.beginners.seccon.jp 9080

解答

ソースコードが共有されている。

scanf関数が確認できるため、pet_nameで確保したバッファサイズを超えた場合にバッファオーバーフローの可能性がある。
以下のように32文字の適当な文字列に加えて、フラグのパスである/home/pwn/flag.txtを入力する。

Discussion