チャレンジ一覧

絞り込みを解除

180 問 (4 / 8 ページ)

WebセキュリティLevel 2★★☆☆☆

Web-18. コンタクトフォームのXXE攻撃

このコンタクトフォームは入力内容をXMLに変換してサーバーへ送信し、サーバー側でパースした結果を表示します。XMLパーサーの設定次第では思わぬファイルが読めてしまうかもしれません。

WebセキュリティLevel 2★★☆☆☆

Web-19. 銀行アプリのCSRF送金

このバンキングアプリではログイン中のユーザーが送金操作を行えます。別サイトから送金リクエストを送らせることができないか、CSRF対策の有無を確認してみましょう。

WebセキュリティLevel 2★★☆☆☆

Web-20. URL FetcherからのSSRF

このURL Fetcherサービスはユーザーが指定したURLの内容を取得して表示します。サーバーが到達できる内部専用サービスにまでリクエストを送らせることができないか確認しましょう。

基礎スキルLevel 2★★☆☆☆

テキスト処理の達人 - sed & awk

/app/data.csv にはCSVデータが保存されています。 以下の処理を行ってください: 1. 2列目(価格)が1000以上の行のみを抽出 2. 3列目(商品名)に含まれる "_" をスペースに置換 3. 1列目(ID)の先頭に "PROD-" を追加 処理後のデータの最初の行に含まれる商品名がフラグです。 フォーマット: ID,価格,商品名

暗号Level 2★★☆☆☆

ハッシュ衝突の発見

MD5では異なる入力が同じハッシュ値になる衝突が実用的に作れます。衝突耐性が破られたハッシュを安全用途に使ってはいけません。 同一MD5を持つとされる2つのファイル: file_a != file_b md5(file_a) = d131dd02c5e6eec4693d9a0698aff95c md5(file_b) = d131dd02c5e6eec4693d9a0698aff95c MD5衝突を発見したことを表す語句として、md5、collision、found の3語を小文字のままアンダースコアでつなぎ、KINOCO{...} の形式で提出してください。

暗号Level 2★★☆☆☆

ハッシュ長拡張攻撃

MD5、SHA-1、SHA-256などの構造では、secret || message の単純ハッシュを署名にすると長さ拡張攻撃を受ける場合があります。 既知のメッセージとSHA-256: message = "user=guest" sha256(secret || message) = 84d89877f0d4041efb6bf91a16f0248f2fd573e6af05c19f96bedb9f882f7882 append = "&admin=true" この問題では攻撃手順の理解を確認します。攻撃名を表す3つの英単語 hash、extension、attack を小文字のままアンダースコアでつなぎ、KINOCO{...} の形式で提出してください。

暗号Level 2★★☆☆☆

パディングオラクル入門

パディングオラクル攻撃では、エラーの違いが平文復元の手がかりになります。この入門問題では、漏えいしたBase64文字列からフラグを読み取ります。 漏えいしたBase64文字列: Vmlld1NvdXJjZTpLSU5PQ097cGFkZGluZ19vcmFjbGVfYmFzaWNzfQ== この文字列をBase64デコードし、ViewSource: の後ろにある文字列をフラグとして提出してください。

プログラミングLevel 2★★☆☆☆

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

/challenge/jobs.log は、コンテナの起動のたびに乱数で作り直される夜間バッチの実行ログです。1行が1回のジョブ実行で、key=value の欄が空白で区切られています。job が archive で status が ok の行だけを選び、part の番号順に value(16進文字列を逆順にしたもの)を元に戻してつなぎ、16進デコードしてアーカイブトークン(英小文字と数字)を求めてください。そのトークンを python3 challenge.py '<トークン>' に渡すと、正しいときだけフラグが表示されます。

プログラミングLevel 2★★☆☆☆

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

/challenge/vault.json は、コンテナの起動のたびに乱数で作り直される金庫の記録です。salt(16進文字列)と、pin_hash = sha256(salt + pin)(salt と6桁の pin を文字列のまま連結して UTF-8 にしたもののハッシュ)が入っています。000000 から 999999 までを総当たりして pin_hash に一致する6桁の PIN(先頭の 0 も含む)を見つけ、python3 challenge.py '<PIN>' に渡してください。正しいときだけフラグが表示されます。

プログラミングLevel 2★★☆☆☆

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

起動のたびに乱数で作られた証拠ファイル artifact-manifest.json を解析します。artifact(artifact_00 から artifact_09)ごとに複数のレコード(name・sha256・data)があり、正しいのは data を Base64 デコードした SHA-256 が sha256 欄と一致する1件だけです。正しいレコードの中身を SHA-256(name) のダイジェストで XOR 復号し、artifact 番号の順につないだ40文字(小文字英数字)が答えです。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 2★★☆☆☆

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

/challenge/capture.bin は、コンテナの起動のたびに乱数で作り直される独自形式のバイナリです。先頭4バイトは KBIN、続いて TLV レコード(type 1バイト、length 2バイト(ビッグエンディアン)、value)が並び、type 0x7F(長さ 0)が終端です。type 0x10 と 0x20 の value はそのまま、それ以外の value は各バイトを 0x5A で XOR して格納されています。type が 0x42 のレコードの value を、ファイルの中の順番どおりに取り出して 0x5A で XOR し、つないだトークン(英小文字と数字)を python3 challenge.py '<トークン>' に渡してください。正しいときだけフラグが表示されます。

基礎スキルLevel 2★★☆☆☆

プロセスハンター - 隠されたプロセス

バックグラウンドで "secret_service" という名前のプロセスが動作しています。 このプロセスを見つけて以下の情報を取得してください: 1. プロセスID (PID) 2. 実行ユーザー 3. コマンドライン引数 コマンドライン引数にフラグが含まれています。 ヒント: ps, pgrep, top などのコマンドを使用

暗号Level 2★★☆☆☆

レインボーテーブル攻撃

ソルトなしの高速ハッシュは、事前計算された逆引きDBで簡単に破られる場合があります。与えられたMD5ハッシュを逆引きしてください。 MD5ハッシュ: 5f4dcc3b5aa765d61d8327deb882cf99 このハッシュを逆引きし、元の文字列を KINOCO{...} の形式で提出してください。

基礎スキルLevel 2★★☆☆☆

ログ解析 - 侵入者を見つけろ

/app/auth.log には認証ログが記録されています。 不審なアクティビティを検出してください: - 1時間以内に10回以上ログイン失敗しているIPアドレスを特定 - そのIPアドレスからの最初の失敗ログインのタイムスタンプを取得 ログフォーマット: [YYYY-MM-DD HH:MM:SS] Failed login from IP_ADDRESS フラグの形式: そのタイムスタンプの日付と時刻を _ でつなぎ、KINOCO{} で囲みます(例: [2025-01-02 03:04:05] → KINOCO{2025-01-02_03:04:05})。

暗号Level 2★★☆☆☆

ワンタイムパッド鍵再利用攻撃

ワンタイムパッドは鍵を一度だけ使う場合に安全です。同じ鍵を再利用すると、既知平文から別の平文を復元できます。 同じ鍵で暗号化された2つの暗号文: ciphertext1_hex = 1c0a070901 known_plaintext1 = HELLO ciphertext2_hex = 060a1e160b known_plaintext1 と ciphertext1 から鍵を復元し、ciphertext2 をXORで復号してください。復号した文字列を KINOCO{...} で包んだものがフラグです。

暗号Level 2★★☆☆☆

予測可能な乱数

固定seedの疑似乱数は再現できます。暗号用途で一般用途の乱数を使ってはいけません。 フラグ生成コード: import random random.seed(12345) flag_chars = [chr(random.randint(65, 90)) for i in range(10)] print("KINOCO{" + "".join(flag_chars) + "}") 同じPythonコードを実行し、生成されるフラグを提出してください。

基礎スキルLevel 2★★☆☆☆

圧縮の迷宮 - 多重圧縮ファイル

/app/flag.tar.gz は多重に圧縮されたファイルです。 解凍していくと、次の圧縮ファイルが出てきます: flag.tar.gz → flag.tar → flag.zip.bz2.gz → flag.zip.bz2 → flag.zip → flag.txt すべて解凍してflag.txtの内容を取得してください。 ヒント: file コマンドで圧縮形式を確認できます

暗号Level 2★★☆☆☆

小さいRSA鍵の破壊

RSAは十分大きな素数を使うことで安全性を保ちます。この問題では小さすぎるnを素因数分解し、秘密指数を求めて暗号文列を復号します。 公開鍵と暗号文: n = 323 e = 5 ciphertexts = [115, 181, 241, 109, 109, 57, 190, 115, 241, 57, 65, 271, 49, 115, 57, 241, 190, 271, 57, 85, 271, 241, 65] nを素因数分解して秘密指数dを求め、各暗号文を復号してください。復号した文字列を KINOCO{...} で包んだものがフラグです。

暗号Level 2★★☆☆☆

暗号解析 - アフィン暗号の解読

ciphertext.txtは、英文の報告書をアフィン暗号 E(x) = (a×x + b) mod 26 で暗号化したものです。大文字・小文字は保たれ、英字以外はそのままです。平文が KINOCO という単語で始まることを手がかりに鍵a, bを求めて復号し、最後の行のフラグを提出してください。

プログラミングLevel 2★★☆☆☆

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

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

基礎スキルLevel 2★★☆☆☆

正規表現マスター - ログファイル解析

/app/access.log には数千件のアクセスログが記録されています。 この中から、IPアドレスが「192.168.1.」で始まり、かつステータスコードが404のエントリをすべて抽出してください。 条件: - IPアドレス: 192.168.1.xxx - ステータスコード: 404 - 該当する行数がフラグになります ヒント: grep と正規表現を使用してください

基礎スキルLevel 2★★☆☆☆

環境変数マスター - PATH Hijacking

/app/secret_bin ディレクトリに隠されたコマンド "getflag" があります。 しかし、このディレクトリはPATHに含まれていないため、直接実行できません。 2つの方法でこのコマンドを実行してください: 1. 絶対パスで実行 2. PATHに追加して実行 コマンドを実行するとフラグが表示されます。

基礎スキルLevel 3★★★☆☆

Docker フォレンジック - コンテナ調査

Docker デーモンの無い環境で、イメージ `registry.internal/kinoco-billing-api:2.4.1` のメタデータを調べます。`/challenge/image_history.txt`(`docker history --no-trunc` 相当、新しいレイヤーが上)と `/challenge/image_config.json`(最終的な `Config.Env` と、古い順の `History[].created_by`)があります。この Dockerfile は `DB_ADMIN_PASSWORD` を `ENV` で何度も設定し直し、途中で一度だけ `python3 scripts/bootstrap_admin.py`(環境変数 `DB_ADMIN_PASSWORD` を読む)を実行し、最後に空で上書きしました。履歴にはフラグの形をした値がいくつもあります。フラグは、bootstrap_admin.py を実行した時点で有効だった `DB_ADMIN_PASSWORD` の値、つまりビルド順でそのRUNより前にある最後の `ENV DB_ADMIN_PASSWORD=...` の値です。それより前に上書きされた値、後に設定された値、別の変数の値、別のスクリプトにだけインラインで渡した値はおとりです。

基礎スキルLevel 3★★★☆☆

Git履歴から削除されたAPIキーを探せ

/app/repo はGitリポジトリです。開発者がAPI_KEYを誤ってコミットし、後続コミットで削除しました。 通常のGit履歴から削除前の config.py を確認し、APIキーに含まれるフラグを見つけてください。