Programming

プログラミングで解くCTF問題

コードを書いてデータを加工・解析し、手作業では難しいセキュリティ課題を解く方法を学びます。

この分野で学べること

  • データを読み取り変換するコード
  • 問題を小さな処理に分ける方法
  • 解析作業を自動化する考え方

初めての方はLevel 1から始め、解けたら次の難易度へ進むのがおすすめです。

プログラミングのチャレンジ

47件の問題から選べます。

Programming Level 1: ★☆☆☆☆

09. Pythonで自動化 - ファイル読み込み

セキュリティ業務では、大量のデータを処理するためにプログラミングが必須です。 このチャレンジでは、Pythonでファイルを読み込んでフラグを見つけます。 「data.txt」というファイルに100行のテキストがあり、 ...

Programming Level 2: ★★☆☆☆

APIリクエスト - 最大利益取引の特定

localhost:9102 の株価APIを起動し、全銘柄の取引から sell_price - buy_price が最大の id を POST /api/check に送信してください。正しい id の応答が起動時注入...

Programming Level 2: ★★☆☆☆

Python演習 - Base64ストリームの一括デコード

data.txt には100行以上のBase64文字列があり、1行だけが起動時に注入された FLAG を復元します。全行をデコードしてフラグを見つけてください。

Programming Level 2: ★★☆☆☆

Python演習 - CSV売上データの条件抽出

起動時に生成される data.txt は売上CSVです。amount が10000以上、status が completed、product_id が SEC- で始まる唯一の行の notes が FLAG です。

Programming Level 2: ★★☆☆☆

Python演習 - JSONユーザーデータの複合検索

起動時生成の JSON data.txt から、role が admin、active が true、email に @secret.com を含む唯一のユーザーを見つけ、その flag フィールドを取得してください。

Programming Level 2: ★★☆☆☆

Python演習 - アクセスログから対象IPを追跡

起動時生成の data.txt は1200行のアクセスログです。192.168.1.100 の行だけを抽出し、その中の FLAG を見つけてください。

Programming Level 2: ★★☆☆☆

Python自動化 - Base64の一括デコード

data.txt には100行以上のBase64エンコード文字列が並んでいます。すべてをデコードし、その中からフラグ(FLAG{...}で始まる行)を見つけるスクリプトを書いてください。

Programming Level 2: ★★☆☆☆

Python自動化 - CSV売上データの抽出

data.txt は売上CSV(transaction_id,date,product_id,amount,status,notes)です。amountが10000以上、statusが completed、product...

Programming Level 2: ★★☆☆☆

Python自動化 - JSONユーザーデータの検索

data.txt は多数のユーザーを含むJSONです。role が admin、active が true、email に @secret.com を含むユーザーを1人だけ見つけ、そのレコードに含まれるフラグを取得してく...

Programming Level 2: ★★☆☆☆

Python自動化 - アクセスログの解析

data.txt は1000行以上のアクセスログです。IPアドレス 192.168.1.100 からのアクセス行を抽出し、その中に含まれるフラグ(FLAG{...})を見つけてください。

Programming Level 2: ★★☆☆☆

Python自動化 - パスワードハッシュのクラック

data.txt には多数の sha256 ハッシュが並んでいます。フラグは順序付きのチャンクに分割され、各チャンクは sha256("{i}:{chunk}") としてハッシュ化されています。チャンクは同梱の word...

Programming Level 2: ★★☆☆☆

プログラミング - Bashジョブログの解析

jobs.log は起動時に注入された FLAG から生成されます。archive/status=ok行をpart順に選びvalue反転後16進復元してフラグを取得してください。

Programming Level 2: ★★☆☆☆

プログラミング - PINの総当たり

vault.json は起動時に注入された FLAG から生成されます。0000–9999のPIN SHA-256を照合し一致PINのストリームでXOR復号してフラグを取得してください。

Programming Level 2: ★★☆☆☆

プログラミング - ハッシュ検証と復号

artifact-manifest.json は起動時に注入された FLAG から生成されます。各dataのSHA-256検算後、name SHA-256でXOR復号して結合してフラグを取得してください。

Programming Level 2: ★★☆☆☆

プログラミング - バイナリTLVの解析

capture.bin は起動時に注入された FLAG から生成されます。KBIN TLVのtype 0x42を抽出して0x5A XOR復元してフラグを取得してください。

Programming Level 2: ★★☆☆☆

正規表現 - 一度だけ出現する黄金の記号

data.txt から KINO-数字4桁-英大文字4文字の記号をすべて抽出し、一度だけ出現する値を challenge.py に入力してください。正解時に起動時注入 FLAG が表示されます。

Programming Level 3: ★★★☆☆

Python自動化 - SQLiteデータベース解析

data.db は業務データの SQLite データベースです(users / orders / audit_log)。フラグは、注文合計額(SUM(amount))が最も大きい唯一のユーザーの security_not...

Programming Level 3: ★★★☆☆

Python自動化 - カスタム暗号の復号

cipher.txt には独自の暗号でエンコードされたフラグが16進で入っています。暗号化は各バイトに add(鍵加算) -> xor(位置依存) -> rotl(巡回シフト) を適用したものです。この逆変換を Pyth...

Programming Level 3: ★★★☆☆

Python自動化 - 暗号化ZIPのパスワードクラック

secret.zip は弱いパスワードで暗号化された ZIP で、中に flag.txt があります。同梱の wordlist.txt を使い、Python 標準ライブラリの zipfile でパスワードを総当たりして ...

Programming Level 3: ★★★☆☆

アルゴリズム - 迷路のBFS最短経路

data.txt の S から E までの最短経路を BFS で求め、UDLR の移動列を challenge.py に入力してください。正しい経路で起動時注入 FLAG が表示されます。

Programming Level 3: ★★★☆☆

プログラミング - SQLite証拠データベースの解析

evidence.db は起動時に注入された FLAG から生成されます。users/access_log JOINで最大trust_scoreのnoteをBase64復元してフラグを取得してください。

Programming Level 3: ★★★☆☆

プログラミング - Webスクレイピングとグラフ探索

site.json は起動時に注入された FLAG から生成されます。linkグラフのorder順comment Base64断片を結合してフラグを取得してください。

Programming Level 3: ★★★☆☆

プログラミング - ZIPパスワードの復元

archive.json は起動時に注入された FLAG から生成されます。wordlistでpassword_sha256一致語を探し鍵byte XOR復号してフラグを取得してください。

Programming Level 3: ★★★☆☆

プログラミング - パケットログの解析

capture.txt は起動時に注入された FLAG から生成されます。flow=exfilのpayload_hexを0x5A XOR復号してフラグを取得してください。