Sp00kySkelet0n/SkylineCTF-Challenges

GitHub: Sp00kySkelet0n/SkylineCTF-Challenges

基于GitOps与Kubernetes Operator的CTF赛题全生命周期管理框架,实现从出题加密提交到自动部署的一体化工作流。

Stars: 1 | Forks: 4

# SkylineCTF - 贡献指南 🏰 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/15f6126835090949.png) 欢迎来到 SkylineCTF 的挑战仓库!本指南将向您介绍如何在平台上创建、保护和发布您的挑战。 ## 🚀 如何添加挑战? 按照以下 4 个简单的步骤,让您的挑战上线。 ### 1. 准备工作 🛠️ 克隆此仓库。 ``` git clone https://github.com/Sp00kySkelet0n/SkylineCTF-Challenges.git cd SkylineCTF-Challenges ``` ### 2. 创建挑战 📝 为您的挑战创建一个文件夹(例如 `Mon-Challenge`)。 它必须包含: * `Challenge.yaml`:挑战的定义。 * `Dockerfile`(如果已 Docker 化)。 * `uploads/`(可选):提供给玩家的挑战相关文件。 * `src/`(可选):源代码(由向导加密)。 ## 📂 Challenge.yaml 结构 如果您希望手动创建 `Challenge.yaml`,请遵循以下结构: ### 类型 1:Docker 挑战 (Web, Pwn...) 🐳 使用 Docker 镜像和端口。分数动态调整。 ``` apiVersion: skyline.local/v1 # Ne jamais modifier kind: CTFChallenge # Ne jamais modifier metadata: name: mon-challenge-unique # Doit correspondre au nom du dossier (lowercase, sans espaces) namespace: ctfd # Ne jamais modifier spec: # Infos Générales name: "Titre du Challenge" description: "Trouvez le flag !" category: "Web" # Web, Pwn, Crypto, Reverse... # Points Dynamiques (Recommandé) type: "dynamic" initial: 500 # Points de départ decay: 10 # Nombre de solutions pour baisse max minimum: 50 # Points minimum # Déploiement image: "ghcr.io/sp00kyskelet0n/skylinectf-challenges/chall:latest" port: 1337 # Port interne du conteneur instance: true # Détermine si le challenge peut être déployé à la demande # Fichiers (si besoin de fournir un binaire/source) upload_files: true # Upload tout le dossier 'uploads/' vers CTFd flag: "SKL{...}" # À chiffrer avec le wizard ! ``` ### 类型 2:静态挑战 (Forensic, Reverse) 📁 无需 Docker,仅提供下载文件。 ``` apiVersion: skyline.local/v1 kind: CTFChallenge metadata: name: mon-challenge-forensic # Doit correspondre au nom du dossier (lowercase, sans espaces) namespace: ctfd spec: name: "Analyse Mystère" description: "Analysez ce fichier PCAP..." category: "Forensic" type: "standard" # Ou dynamic points: 100 upload_files: true # Indispensable pour Forensic/Reverse ! # Placez vos fichiers (PCAP, binaire...) (dans la limite de 50mb) dans le dossier 'uploads/' du challenge. flag: "SKL{...}" # À chiffrer avec le wizard ! ``` **关于连接的说明:** 操作器会根据类别和端口自动检测协议(`http://` 或 `tcp://`)。您可以通过 `connection_info: "..."` 进行强制指定。 ### 3. 保护(加密) 🔐 **这是最重要的一步!** 使用我们的助手保护您的 flags 和源代码。 **在 Linux / Mac 上:** ``` ./wizard.sh ``` **在 Windows 上:** ``` wizard.bat ``` 向导为您提供两个选项: #### 选项 1:📝 创建 Challenge.yaml 向导将逐步引导您生成文件: 1. **选择文件夹** — 选择您的挑战文件夹(必须事先存在)。 2. **显示名称** — 在 CTFd 上可见的标题(例如:`Mon Super Challenge`)。 3. **描述** — 挑战的描述(支持多行,以空行结束)。 4. **类别** — Web, Pwn, Crypto, Forensic, Reverse, Misc... 5. **自动检测类型** — 向导会检测是否存在 `Dockerfile` 和/或 `uploads/` 文件夹,以配置 `instance` 和 `upload_files`。 6. **评分** — 动态(initial/decay/minimum)或静态(固定分数)。 7. **端口** — 容器的内部端口(仅在 Docker 化挑战时需要)。 8. **Flag** — 挑战的 flag(例如:`SKL{...}`)。 9. **创建者** — 您的姓名/昵称。 最后,向导会提议直接继续进行加密和提交。 #### 选项 2:🔐 保护现有挑战 对于已经存在 `Challenge.yaml` 的挑战: 1. **加密 `Challenge.yaml`** — 敏感字段(flag 等)使用 SOPS 加密。 2. **加密 `WALKTHROUGH.md`** — 解题报告使用 GPG 加密(如果存在)。 3. **加密 `src/`** — 源代码打包并使用 GPG 加密(可选)。 4. **通过 Pull Request 提交** — 自动 Fork,上传文件,并创建 PR。 **完成!** 您的文件已准备就绪并已提交。 ### 4. 发布 ✈️ 保护您的文件后: 1. 添加您的文件(加密版本!): git add Mon-Challenge/Challenge.yaml git add Mon-Challenge/src.zip.gpg git add Mon-Challenge/Dockerfile 2. 提交并推送: git commit -m "feat: Ajout du challenge Mon-Super-Challenge" git push origin ma-branche 3. 打开一个 Pull Request。一旦合并通过,Flux 会自动将您的挑战部署到集群中! 🚀 ## ℹ️ 技术工作原理 ### 基础设施即代码 SkylineCTF 采用 GitOps 方法。`main` 分支上的所有内容都是集群的绝对真理。 ### 自动部署 1. **Flux** 检测到更改。 2. **SkylineOperator** 读取您的 `Challenge.yaml`。 3. 挑战在 **CTFd** 中创建并部署到 Kubernetes 集群上。 ### 架构 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8006eb9c28091000.png) *对于按需实例(Pods/VMs):* ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a40cda250a091003.png)
标签:Cutter, DNS解析, Docker, OPA, Pwn, Web安全, YAML配置, 云资产清单, 动态积分, 夺旗赛, 子域名突变, 安全教育, 安全防御评估, 实战演练, 容器化部署, 密码学, 开源项目, 手动系统调用, 挑战赛开发, 网络安全, 蓝队分析, 请求拦截, 逆向工程, 隐私保护, 靶场