CTFd インスタンスから課題情報と添付ファイルを自動取得・整理する Python ツールです。
- Token 認証またはユーザ名/パスワード認証による CTFd API へのアクセス
- 課題一覧・詳細情報の取得
- 添付ファイルの自動ダウンロード
challenges/<Category>/<Challenge Name>/の構造で整理保存- メタデータ(JSON)と README(Markdown)の自動生成
- 並列ダウンロードとリトライ機能
- ロギングとエラーハンドリング
pip install ctfd-dlconfig.example.yamlをconfig.yamlにコピーconfig.yamlを編集して CTFd インスタンスの情報を設定
base_url: "https://ctf.example.com"
api_token: "your_api_token_here" # 推奨
# または
username: "your_username"
password: "your_password"
output_dir: "./challenges"
concurrency: 4または環境変数を使用:
export CTFD_BASE_URL="https://ctf.example.com"
export CTFD_API_TOKEN="your_api_token_here"パッケージをインストールすると、ctfd-dl コマンドが利用可能になります。
# 基本的な使用
ctfd-dl --config config.yaml
# コマンドライン引数で設定を上書き
ctfd-dl --base-url https://ctf.example.com --token YOUR_TOKEN --output ./my_challenges
# メタデータのみ取得(ファイルダウンロードをスキップ)
ctfd-dl --skip-download
# 詳細ログを出力
ctfd-dl --verbosechallenges/
└─ <Category>/
└─ <Challenge Name>/
├─ files/
│ ├─ attached1.zip
│ └─ script.py
├─ metadata.json
└─ README.md
- 法的注意: 他者運営の CTFd インスタンスにアクセスする場合は、必ず運営者の許可を得てください。
- セキュリティ: ダウンロードした実行ファイルは直接実行せず、適切な環境で解析してください。
- サーバ負荷: 並列ダウンロード数(
concurrency)を適切に設定し、サーバに負荷をかけないようにしてください。
MIT License
tikisan (GitHub: @tikipiya)