0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

今更ですが、2024/6/15(土) ~ 2024/6/16 (日) まで開催された、
SECCON Beginners CTF 2024 というオンラインイベントに参加しました。
初めてのCTF参加となります。(初心者の僕にとってはめちゃくちゃ難しかったです)

CTFとは

セキュリティに関する専門知識や技術を駆使して、隠されている答え(Flag)を見つけるイベントです。(専門知識が必要な謎解きゲームのようなもの)

様々な分野の問題を解いて得点を競う形式(Jeopardy形式)や、チーム間で攻撃と防御を行う形式(Attack & Defense形式)が存在します。

今回参加したSECCON Beginners CTF 2024 は、24時間以内に出題された問題を解く Jeopardy形式 のイベントです。

出題分野

SECCON Beginners 2024 は以下の分野が出題されました。

分野 説明
Crypto (暗号) 暗号技術に関する問題。暗号化されたメッセージの解読など
Reversing (リバースエンジニアリング) 与えられたプログラム等の解析など
Web Webアプリの脆弱性を突く問題。SQLインジェクション・クロスサイトスクリプティング(XSS)など
Pwnable (バイナリ攻撃) バイナリの脆弱性を利用する問題。バッファオーバーフローなど
Misc(その他) ステガノグラフィ(画像や音声ファイルに隠されたメッセージの発見)など

実際はこんな問題が出ました

CTF 初参加ということもあり、ほとんどの問題を解くことができなかったのですが、
そんな私でもある程度解けた問題をいくつか紹介します。

1. 数字当てゲーム攻略

上記に記載のURLにアクセスすると、ランダムに選ばれた1桁の数字を当てる、数字当てゲームで遊ぶことができます。
数字が当たると1ポイント加算され、ポイントに応じてランクが決定するようです。

getRank.tar.gz をダウンロードすると、Typescript で書かれたソースコードがダウンロードできました。ランクは以下の配列で定義されているようです。

main.ts 抜粋
const RANKING = [10 ** 255, 1000, 100, 10, 1, 0];

初期ランクが6、1点以上でランク5、10点以上でランク4……とランクが上がっていき
ランクが1になれば、Flagをゲットできるようでした。

つまりランク1になるためには、10 ** 255(10 の 255乗…!)ポイント以上を取得する必要がありそうです。
ソースコードを確認してみると、変数 score が再代入可能なletで定義されていることがわかります。

main.ts 抜粋
let score = parseInt(input);

そこで、Google Chrome の開発者ツールで score を変更する…という流れで解いていきます。
# 実際はこの後、高得点過ぎるとチート対策としてスコアが減らされる仕組みがあったりします。

2. 暗号化された文章の復元

問題文の日本語訳は「safe prime を使えば RSA暗号は安全になるよね?」でしょうか。

Safe_Prime.tar.gz をダウンロードすると、以下のようなテキストファイルがありました。

output.txt
n = 2929273......
c = 4079147......
chall.py
import os
from Crypto.Util.number import getPrime, isPrime
FLAG = os.getenv("FLAG", "ctf4b{*** REDACTED ***}").encode()
m = int.from_bytes(FLAG, 'big')
while True:
  p = getPrime(512)
  q = 2 * p + 1
  if isPrime(q):
    break
n = p * q
e = 65537
c = pow(m, e, n)
print(f"{n = }")
print(f"{c = }")

RSA暗号は詳しくなかったので、色々とWEBで調べました。
ソースコードと安全素数の定義より
今回 q は 2p + 1 で表されることがわかります。
そのうえで、素数の組み合わせ p q を求めて
C(暗号化済のフラグ)から、原文を復号することで
「ctf4b{*** REDACTED ***}"」となっている部分がわかるようでした。

まとめ

今回参加したイベントは、初心者向け、といいつつ完全な初心者にはハードルが高かったです。
ただ、じっくり調べつつ、楽しみながら学ぶいい機会にはなりました。

一般的な謎解きゲームとは違い、知ってる人しか遊べない遊び、に参加できる優越感や、
合法的にハッキング?できる楽しさもあり、難しかったものの、来年も参加したいなと思えるイベントでした。

また今回のような年1回のものではなく、CTFができる常設のサイトがいくつもあるようなので、まずはこういったサイトで勉強してみようかなと思います。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?