Slide 1

Slide 1 text

2024/12/14 xryuseix (@ryusei_ishika) OSINT CTFの リアル作問環境を体験してみよう!

Slide 2

Slide 2 text

本講義の概要 2 TsukuCTF、DIVER OSINT CTFの作問環境で問題を作成し、 ローカル環境でデプロイする 長いので一言でまとめると ... Backlogより

Slide 3

Slide 3 text

事前準備 ● Docker ● Docker-Compose ● Git, GitHubアカウント ● Python, pip ● (あると嬉しい) make, golang, pipx, 問題用の任意の写真 準備しておいてもらいたいもの (バージョンは、ある程度新しければ基本的に大丈夫です ) 3

Slide 4

Slide 4 text

全体の流れ 4 ● OSINT問題の作成 ○ 環境構築 ○ 問題作成 ○ PRの作成 ● CTFサーバの起動 ○ サーバ起動 ○ 初期設定 ● ctfcliを用いた問題のデプロイ

Slide 5

Slide 5 text

OSINT問題の作成 - リポジトリのダウンロードと作問ディレクトリの自動生成 5 $ 先にフォークする $ git clone https://github.com/ユーザ名/returns2024 $ cd returns2024 $ git submodule init $ git submodule update --remote $ git checkout -b "feat/xryuseix" ←被らないように設定してください $ make gen $ # または docker-compose run gen bash -c "make gen" ←フラグフォーマットは returns{.*}の形式で強制しています ← OSINTを設定してください

Slide 6

Slide 6 text

OSINT問題の作成 - ファイルの配置 6 ● 指定したジャンルのディレクトリに作った 問題のファイルが生成されています ● 各ディレクトリの説明 ○ build…今回は使わない ○ challenge.yaml…問題の設定ファイル ○ flag.txt…フラグを記載 ○ public…公開ファイルを配置 ○ solver…今回は使わない ○ writeup…今回は使わない ● publicディレクトリに問題にする任意の写真をおいて ください ○ なければネットから適当に拾ってきたり、写真 なしテキストだけで問題を 作っても大丈夫です

Slide 7

Slide 7 text

OSINT問題の作成 - 問題の作成 7 ● osint/sample/challenge.ymlを参考に、ご 自身で作ったディレクトリ内の challenge.ymlを編集して、色々設定して ください ● 長いけど編集しなきゃいけないのは 右の項目だけ(うちいくつかは最初から設 定されている) ● 特に、公開するファイル(写真など)の パスを記載するfilesは記載ミスに注意! ○ 注) 公開ファイルがない場合はコメン トアウトしてください

Slide 8

Slide 8 text

OSINT問題の作成 - フラグのテスト 8 ● osint/sample/flag.txtを参考に、ご自身で作ったディレクトリ内の flag.txtを 編集します ● ここではフラグのUnit Testを行います ○ フラグフォーマット、正規表現、複数のフラグ設定のミスを確認します ● 通る想定のフラグと通らない想定のフラグを設定してください 通る→ 通らない→

Slide 9

Slide 9 text

OSINT問題の作成 - PRの作成 9 $ git add . $ git commit -m "add my chall" $ git push -u origin feat/xryuseix ←さっき設定したブランチ ● 終わったらPRを作成してください ○ https://github.com/xryuseix/returns2024/pulls ○ 例示用のPRもあります→ ● PRコメントはなんでもいいです ● PRを作成したらCIが走ります。少し待ってください。

Slide 10

Slide 10 text

OSINT問題の作成 - CIの結果確認 10 こうなってたらOK 画像が入っている場合は こんなコメントも送られてくる

Slide 11

Slide 11 text

OSINT問題の作成 - CIの結果確認と修正 11 ● CIのエラーが出た場合、Detailsから エラーメッセージをみよう ○ 特に多いのがyamlのインデントミス ○ わかりにくかったらすぐに質問してくだ さい (個々のケース用のスライドを作るのが面倒 )

Slide 12

Slide 12 text

OSINT問題の作成 - mainブランチへのマージ & pull 12 ● GitHubのPRページの下にあるマージボタンでマージしてくださ い ● 終わったらシェルに戻って以下のコマンドを実行 $ git checkout main $ git pull origin main

Slide 13

Slide 13 text

CTFサーバの設定 - サーバの起動 13 ここから先、時間なかったら僕だけやります $ pipx install ctfcli $ # または $ pip install ctfcli $ cd .. # returns2024ディレクトリ外であればどこでもいいです $ git clone https://github.com/CTFd/CTFd $ cd CTFd # 3分くらいかかります $ docker-compose up -d

Slide 14

Slide 14 text

CTFサーバの設定 - CTFdの初期設定 14 http://localhost:8000/ にアクセスします ほぼ変更しなくていいです。

Slide 15

Slide 15 text

CTFサーバの設定 - CTFdの初期設定 15 http://localhost:8000/ にアクセスします ほぼ変更しなくていいです。

Slide 16

Slide 16 text

CTFサーバの設定 - アクセストークンの取得 16 設定→アクセストークンで 有効期限を設定して生成します

Slide 17

Slide 17 text

ctfcliを用いた問題のデプロイ 17 ctfcliをpipでインストールするとctfコマンドが使えます。 URLは画像と一緒で、アクセストークンは各自変更してください。 最初にcloneしたreturns2024ディレクトリで実行します。

Slide 18

Slide 18 text

ctfcliを用いた問題のデプロイ 18 mainブランチにマージしたあと、bash install.shコマンドを実行します 実行後、 http://localhost:8000/admin/challenges にアクセスするとこうなっている

Slide 19

Slide 19 text

(時間余ったらのコンテンツ ) みんなが作成した問題を解いてみよう! 19