Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CTF講習会を 1.5から作った話

Avatar for ka.kii ka.kii
June 20, 2026

CTF講習会を 1.5から作った話

2026/06/20 に行われたTech Circle Expo #8 で登壇したときに使用したスライドです.
connpass: https://tech-circle-expo.connpass.com/event/393703/

Avatar for ka.kii

ka.kii

June 20, 2026

Other Decks in Education

Transcript

  1. Ab ou t me ka.kii ka.kii 2 / 27 電気通信大学MMA

    去年の部長 (B3) セキュリティの人 APとかSCとか NW取りたいね 最近はセキュリティ若手の会でApple Watch を開封したりしました ドメインを買った(kakii.dev)ので,大急ぎでマイページを作成中 ラボに早く入りたい Twitter:@ kakii_vol
  2. Motivation CTF4bを見据えてCTF講習会を立てた 5 / 27 SECCON Beginners CTF 通称 CTF4b

    ― 全国の初心者が挑む入り口的な大会 大会に挑む前に新入生にCTFがどんなものか知ってもらいたかった Webからpwnまで幅広いジャンルが出るので、それぞれをなんとなく理解してもらいたかった ka.kii
  3. Infrastructure moonは学内ネットワークと部内の境界にいる 7 / 27 学内ネットワーク(大学ITC) moon (nginx) nest sunrise

    Proxmox moonの先にnest・sunrise・Proxmox(CTFd等)がぶら下がる部内ネットワークがある 外から見えるのはmoonだけで残りは内側に隠れている ka.kii
  4. VM ① 後輩がVMを2台用意してくれていた 8 / 27 Proxmox(atlas2 node) スコアサーバー 192.168.7.107

    問題サーバー 192.168.7.108 CPUとメモリの割り当てだけ先に終わっていた ka.kii
  5. VM ② Ubuntu Serverを手動でインストール 9 / 27 Proxmox(atlas2 node) スコアサーバー

    192.168.7.107 問題サーバー 192.168.7.108 OSが入った時点でようやく2台のサーバーと呼べるようになった ka.kii
  6. Arch itecture ① .107の中でCTFdが4つのコンテナで動く 11 / 27 192.168.7.107(スコアサーバー) nginx CTFd

    DB (MariaDB) Cache (Redis) nginx・CTFd本体・DB・キャッシュをDocker Composeでまとめて起動した ka.kii
  7. Arch itecture ② .108には問題ごとのコンテナが並ぶ 12 / 27 192.168.7.108(問題サーバー) comment :8001

    Clicker :8002 Admin Panel :8003 …ほか 16問 問題を1つ追加するたびにコンテナも1つ増えていく構成 ka.kii
  8. Arch itecture ③ Proxmox上に2つの島ができた 13 / 27 Proxmox(atlas2 node) .107

    — スコアサーバー .108 — 問題サーバー CTFd DB等 問題群 16問 採点担当の.107と問題担当の.108で役割を分けた ka.kii
  9. DNS / 公開 ① 参加者は学内VPNの向こう側にいる 15 / 27 参加者 学内VPN

    大学ITC の範囲 到達不可 192.168.x.x (部内LAN) 大学のVPNとサークルのLANの間には経路がなかった ka.kii
  10. DNS / 公開 ② 去年使われていた公開ルートを発見 16 / 27 参加者 ctf.mma.club

    .uec.ac.jp moon (nginx) sunrise (DNS) 解決 ctf.mma.club.uec.ac.jpの名前解決先は去年のCTFd(192.168.5.38)のままだった 誰も意識せず去年の設定がそのまま残っていた ka.kii
  11. DNS / 公開 ③ sunriseのゾーンファイルでAレコードを書き換えた 17 / 27 Before ctf.core.mma.club.uec.ac.jp.

    IN A 192.168.5.38 After ctf.core.mma.club.uec.ac.jp. IN A 192.168.7.107 sunriseはCoreDNSで動く自前のDNSサーバー。ゾーンファイルを直接編集して.107を向くようにした 編集後はCoreDNSのコンテナを再起動してレコードを反映させた ka.kii
  12. DNS / 公開 ④ — 詰まったポイント nginxはproxy_passの宛先を起動時にしか解決しない 18 / 27

    DNSのレコードを書き換えても、動き続けているnginxのプロセスは前回解決した古いIPを掴んだまま使い続ける moon (nginx) cache: .38 moon (nginx) cache: .107 $ nginx -s reload 設定を読み直させて初めて新しいIPで名前解決をやり直してくれた ka.kii
  13. DNS / 公開 ⑤ ポートごとにnginxのserverブロックを追加した 19 / 27 moon (nginx)

    8001〜8010 192.168.7.108 (問題サーバー) listen 8001; proxy_pass 192.168.7.108:8001; 問題を1つ追加するたびに対応するserverブロックも1つ増やしていった URLはctf.mma.club.uec.ac.jp:8001のようにポート番号で問題を区別する ka.kii
  14. DNS / 公開 ⑥ 学内ネットワークは攻撃っぽい通信をブロックする 20 / 27 参加者 nest

    .108 (pwn問題) ssh nc port 9001〜9004 exploitっぽい通信は学内ネットワークの途中で弾かれてしまう なので一度SSHで部内のnestに入ってもらい、そこからncで問題に直接攻撃してもらう形にした ka.kii
  15. Arch itecture — 完成形 最終的にこうつながった 21 / 27 参加者 Web経路

    moon CTFd .107 問題サーバー .108 comment Clicker skipping 他13問 ほか全16問がそれぞれ独立して動いている pwn経路 nest pwn問題 .108 (9001〜9004) ka.kii
  16. 作問 ① CTF4bを基準に7カテゴリを用意 22 / 27 welcome web crypto pwn

    reversing misc osint 難易度の感覚はCTF4bに合わせて調整した ka.kii