チャレンジ一覧

絞り込みを解除

81 問 (3 / 4 ページ)

LinuxLevel 3★★★☆☆

Linux-競合状態. TOCTOUの隙を突いてroot権限のファイルを奪え

rootが定期的に実行するクリーンアップスクリプトには、チェックと処理の間に隙(TOCTOU)があります。シンボリックリンクをうまく使ってこの隙を悪用してみてください。

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

Python自動化 - REST API データ収集

コンテナ内で `http://127.0.0.1:8000/api/records?page=N` というページ送りのローカルAPIが動いています。`next` が `null` になるまで全ページを巡回し、`tag == "flag"` のレコードだけを集めてください。各レコードは `{"seq": <int>, "part": "<断片>"}` の形式で、`seq` の昇順に `part` を連結するとフラグになります。1ページ目だけではフラグは揃わず、`login`/`metric`/`order` などのレコードはおとりです。

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

SQLクエリマスター - 複雑な結合

SQLite データベース `/challenge/company.db` には3つのテーブルがあります。 - employees (id, name, department_id, salary, email, note) - departments (id, name, manager_id) - projects (id, name, department_id, budget) 次の条件で従業員を1人選んでください。 1. budget が 100000 以上のプロジェクトを1つ以上持つ部署(小さいプロジェクトの合計が 100000 を超えても対象外) 2. それらの部署に所属する従業員の中で salary が最も高い人 その人の note 列がフラグです。各部署の最高給の従業員の note にはどれも KINOCO{...} の形の値が入っているので、条件を1つでも外すと別の人が選ばれます。

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

システムコール追跡 - strace デバッグ

ソースコードのないプログラム `/app/mystery_program` を strace でトレースした記録 `/challenge/strace.log` を解析します。プログラムはトークンらしい中身(`KINOCO{...}` の形)のファイルをいくつも読み込みますが、(1) 隠しディレクトリ(名前が `.` で始まるディレクトリ)の中のファイルであり、かつ (2) `read` したその中身をあとで標準出力(fd 1)に `write` している、という2条件を両方満たすものはただ1つです。その中身がフラグです。普通のディレクトリにあるドットファイルは (1) を満たしません。fd 番号は `close` の後に使い回されます。

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

システムログ解析 - journalctl マスター

systemd ジャーナルを `journalctl -o short` 風に書き出したログ `/challenge/system.log` を解析します。各行は「日時 ホスト ユニット[PID]: 優先度: メッセージ」の形です。ユニットの欄が `authd` で、優先度の欄が `ERR` の行はただ1行で、その行のメッセージにフラグが含まれます。`KINOCO{...}` の形の文字列はほかの行にもありますが、ユニットが `authd-proxy` など別物だったり、本文に authd や ERR という文字が出てくるだけだったりします。コンテナに journalctl は無いので、`grep`/`awk` で欄の位置を見て絞り込んでください。

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

ネットワークマスター - Netcat リバースシェル

外部ホストへ接続せず、記録済みの artifacts/netcat/callback-transcript.log を解析してください。リスナーやシェルは起動されません。侵害されたホスト 10.0.5.23 から remote.target.com の 4444 番ポートへつながったコールバックを接続一覧から探し、その conn ID で「captured first bytes」の16進データを引き当て、文字列に戻すとフラグになります。送信元・宛先ホスト・宛先ポートのどれかが違う接続はおとりです。

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

パフォーマンス解析 - リソースホッグを見つけろ

サーバーのスナップショット `/challenge/metrics.log` を解析します。前半は top 風のプロセス一覧(%CPU は9列目、%MEM は10列目)、後半は ps -ef 風のフルコマンドライン一覧です。%CPU が 50.0 以上かつ %MEM が 20.0 以上のプロセスはただ1つで、その PID の ps -ef 行の `--token=` 引数がフラグです。`--token=KINOCO{...}` を持つプロセスはほかにもあり、%CPU 最大・%MEM 最大のプロセスはどちらも条件を両方は満たしません。

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

正規表現エキスパート - データバリデーション

/challenge/data.txt には受付記録が400行あり、各行にメールアドレス・電話番号・IPアドレス・日付が行ごとに違う順番・ラベルで並び、最後に memo="..." があります。書式が壊れた項目や、項目が無い行もあります。 次の条件をすべて正しい書式で1行に含む行はただ1行で、その行の memo がフラグです。 1. メールアドレス(xxx@yyy.zzz) 2. 電話番号(xxx-xxxx-xxxx または xxx.xxxx.xxxx。数字の桁数はこのとおり) 3. IPアドレス(xxx.xxx.xxx.xxx。数字1〜3桁を4つ) 4. 日付(YYYY-MM-DD) memo に KINOCO{...} の形の値を持つ行はほかにもありますが、どれも1つの条件が欠けています。正規表現を組み合わせて絞り込んでください。

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

高度な自動化 - ディレクトリ監視スクリプト

`/challenge/logs/` に Web フロントエンド4台分のアクセスログ(combined log format、60ファイル・10万行超)があります。WAF は多数の送信元IPについて、それぞれ1行だけ `waf_rule=... note=...` を書き残しており、どの note もフラグの形をしています。フラグは、ステータスコード 404 のリクエスト数が最も多い送信元IPの行にある note です。404 が少し少ない別のスキャナー、総リクエスト数が最多のIP(ほとんど 200)、403 が最多のIP、通常の客のIPにも note があり、これらはおとりです。404 を IP ごとに集計して特定してください。

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

AWS CLI - S3バケット調査

S3 の設定をオフラインでエクスポートした監査記録が `/challenge/s3_audit/` にあります(`buckets.json` と、バケットごとの `*_publicaccessblock.json`・`*_policy.json`・`*_acl.json`・`*_objects.json`)。機密オブジェクト(`backups/prod.env` または `credentials/service-account.json`)を持つバケットは多数あり、どの `object_preview` にもフラグの形をした値があります。フラグは、本当に世界中に公開されているただ1つのバケットの機密オブジェクトにある値です。その条件は、(1) PublicAccessBlock の4設定がすべて false で、(2) ポリシーに `Effect: Allow`・`Principal: "*"`・`Action` に `s3:GetObject` を含み・`Resource` に `arn:aws:s3:::<バケット名>/*` を含み・`Condition` が無い statement があることです。ほかのバケットは、このどれか1つだけを外したおとりです。

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

Ansible自動化 - サーバー構成管理

Ansibleや実サーバーを実行せず、生成済みの実行記録 artifacts/ansible/vault-export.yml を解析してください。記録には多数のタスク結果があり、そのうち多くに vault_payload_hex が付いています。本物は、host が web-03、task が deploy-index、status が changed の3つがすべて一致する1件だけです(名前の一部だけが一致する記録や、成功していない記録はおとりです)。値は Ansible vault の本体と同じく16進で書かれていて、16進を戻すと Base64 の文字列になります。それをさらに戻すとフラグです。

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

CI/CDセキュリティ - GitHub Actions 脆弱性

`/challenge/repo/.github/workflows/` にある20個の GitHub Actions ワークフローを監査します。多くのステップに `# audit-ticket: KINOCO{...}` というコメントが付いています。次の3条件をすべて満たす「pwn request」脆弱性を持つワークフローは1つだけで、そのステップの audit-ticket がフラグです。(1) トリガーが `pull_request_target`。(2) あるジョブが、チェックアウトの `ref:` に `github.event.pull_request.head.sha` や `head.ref` を指定して PR の head を明示的にチェックアウトしている。(3) その同じジョブが `secrets.*` を参照している。どれか1つでも欠けるワークフローはおとりです。

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

Infrastructure as Code - Terraform セキュリティ

Terraform providerを初期化せず、生成済みの terraform/terraform.tfstate を解析してください。outputs の recovery_secret_arn が、復旧用シークレットの ARN を指しています。resources の aws_secretsmanager_secret_version のうち、secret_id がその ARN と完全に一致し、version_stages に AWSCURRENT を含む版が現在の値です。その secret_string(JSON を文字列にしたもの)の recovery_token を Base64 デコードするとフラグになります。

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

Kubernetes入門 - クラスター調査

実Kubernetesクラスターへ接続せず、artifacts/kubernetes/ の2つのスナップショット(pod-snapshot.yaml と secret-snapshot.yaml)を調べてください。namespace security-lab の Pod suspicious-audit-pod は、環境変数 AUDIT_TOKEN を Secret から読んでいます。その secretKeyRef が指す Secret(同じ namespace で同じ名前)の、指定されたキーの値を Base64 デコードするとフラグになります。別の namespace の同名の Pod や Secret、似た名前の Secret、同じ Secret の別のキーはおとりです。

LinuxLevel 4★★★★☆

Linux-カーネルモジュール. 脆弱なドライバでroot権限を得よ

このチャレンジは、脆弱なキャラクタデバイスドライバを安全なユーザー空間シミュレーションとして解析します。実際のカーネルモジュールはロードされません。root デーモンがドライバを /run/vulnerable.sock として公開し、あなたは非特権ユーザー challenger(uid 1000)として接続します。提供されたドライバソース vulnerable.c を読み、read/write の境界不備を突いて自分の資格情報を uid 0 に書き換え、GETFLAG でフラグを取得してください。

LinuxLevel 4★★★★☆

Linux-バッファオーバーフロー. gets()の脆弱性を突け

SUIDが付与された脆弱なCバイナリが用意されています。保護機構が無効化されたこのプログラムのバッファオーバーフローを突いて、隠された関数へ制御を移してください。

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

カスタムツール開発 - Webディレクトリスキャナー

ライブWebサイトを走査せず、ローカル生成された artifacts/scanner/directory-report.ndjson を解析してください。スキャナーは同じサイトを複数回(run)走査しています。最新の run で、path がちょうど /secret_admin/backup、status が 200 の記録だけが本物です。その body_b64 は gzip で圧縮した応答本文を Base64 にしたもので、戻すとフラグになります。

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

ネットワークトンネリング - SSH ポートフォワーディング

単一コンテナ内でSSHローカルポートフォワーディングを練習します。SSHは127.0.0.1:22、内部サービスは/run/tunnel/database.sockにあります。内部ソケットはローカルのプレイヤーから直接アクセスできません。転送専用ユーザーtunnel(パスワードpassword123)でSSH認証し、127.0.0.1:8888へ転送して応答を取得してください。外部ホストや実データベースは使用しません。

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

暗号化通信 - GPG公開鍵暗号

GnuPG の復号を練習します。`/challenge/keys/` にある秘密鍵をすべてインポートし、`/challenge/messages/` の各暗号文を復号してください。フラグを含む平文になるのは、本物の受信者鍵で暗号化された1通だけです。他は無害な業務連絡のおとりで、宛先鍵IDの突合でも一意に絞れます。本物の GnuPG が非特権環境で動作します。

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

脆弱性スキャン - Nmap NSE 高度活用

社内サブネット `10.66.13.0/24` に `nmap -sV -sC --script vuln` を実行した結果が `/challenge/scan_results/nmap_scan.nmap`(通常形式)と `nmap_scan.gnmap`(grep 形式)にあります。ライブのターゲットは無く、レポートを読み解く問題です。NSE の vuln スクリプトの判定ブロックにはどれも `Finding ID: KINOCO{...}` が付いています。フラグは、`IDs:` が CVE-2020-1938(AJP の Ghostcat)で、かつ `State: VULNERABLE (Exploitable)` の判定ブロックの Finding ID です(1件だけ)。Ghostcat の LIKELY VULNERABLE / NOT VULNERABLE や、ほかの CVE の VULNERABLE (Exploitable) はおとりです。

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

静的解析 - コード脆弱性スキャン

社内メモアプリのPythonソースコードが `/challenge/src/` にあります。前回の静的解析で指摘された9行には、行末に `# finding: KINOCO{...}` という指摘IDが付いていますが、ほとんどは偽陽性です。次の3条件をすべて満たす1行だけが本物のOSコマンドインジェクションで、その行の指摘IDがフラグです。(1) シェル経由で実行している(`subprocess.run(..., shell=True)` か `os.system(...)`)。(2) コマンド文字列に、HTTPリクエストから取った値(`request.args` / `form` / `json` / `values`)が入っている。(3) その値が途中で無害化・検証されていない(`shlex.quote`、許可リストでの確認、`int()` 変換などが無い)。指摘IDはどれも同じ形なので、grep で拾うだけでは決まりません。

基礎スキルLevel 5★★★★★

APTシミュレーション - 完全侵入シナリオ

これは攻撃を実行する問題ではなく、発生済みインシデントのログを読むブルーチーム演習です。EDR・認証・ネットワーク機器から集約した統合タイムライン `/challenge/timeline.log` から、通常業務に紛れたAPTの各段階(初期侵入→権限昇格→横展開→データ持ち出し)を再構築してください。`tag=` は SIEM のルールに当たった印で、業務の操作にも付いています。大容量の外部送信(`event=OUTBOUND-TRANSFER`)にはすべて DLP の案件ID `dlp_case=KINOCO{...}` が付いており、フラグは次の2条件を両方満たす1件の案件IDです。(1) 送信先が、初期侵入で PowerShell が接続した外部アドレス(C2)である。(2) 送信元が、攻撃者が横展開で最後に到達したホストである。

基礎スキルLevel 5★★★★★

Bug Bounty実践 - 脆弱性発見マスター

ライブアプリケーションを診断せず、固定の artifacts/bug-bounty/triage-report.json を解析してください。連鎖した脆弱性の報告は status が validated-chain で、chain に構成する finding の id が順番に並んでいます。構成する finding がすべて validated の連鎖だけが、認められた本物です。その chain の順に各 finding の proof_fragment をつなぎ、Base64 デコードするとフラグになります。

LinuxLevel 5★★★★★

Linux-eBPF Rootkit. 隠されたプロセスの正体を暴け

このチャレンジは、eBPFルートキット調査を安全なオフライン証拠解析として再現します。eBPFをロードせずに、提供されたbpftoolのスナップショットから実装(インプラント)のプログラムとマップを見分け、隠しファイルのパスを復元し、そこに保存された暗号化ペイロードをインプラント自身の鍵で復号してください。