ctfcli是一个用于管理夺旗(Capture The Flag)活动和挑战的工具
项目描述
ctfcli
ctfcli是一个用于管理夺旗(Capture The Flag)活动和挑战的工具。
ctfcli
提供挑战规范和模板,以便更容易生成不同类别的挑战。它还提供了与CTFd REST API的集成,允许通过命令行上传挑战并与CI/CD构建系统集成。
ctfcli
具有自动完成功能、REPL接口(感谢Python-Fire)和自定义命令的插件支持。
正在进行:ctfcli是一个alpha项目,将会发生变化。在更新时请确保锁定版本并阅读CHANGELOG。
安装和使用
可以使用pipx
将ctfcli作为可执行命令安装
pipx install ctfcli
或者,您始终可以使用pip
将其作为Python模块安装
pip安装ctfcli
要从仓库直接安装ctfcli的开发版本,可以使用
pip install git+https://github.com/CTFd/ctfcli.git
1. 创建事件
Ctfcli将当前文件夹转换为CTF事件git仓库。它将询问您正在处理的CTFd实例的基本URL和访问令牌。
❯ ctf init
Please enter CTFd instance URL: https://demo.ctfd.io
Please enter CTFd Admin Access Token: d41d8cd98f00b204e9800998ecf8427e
Do you want to continue with https://demo.ctfd.io and d41d8cd98f00b204e9800998ecf8427e [Y/n]: y
Initialized empty Git repository in /Users/user/Downloads/event/.git/
这将创建一个包含config
文件的.ctf
文件夹,该文件将指定URL、访问令牌,并记录为该事件专用的所有挑战。
2. 添加挑战
事件由挑战组成。挑战可以是子目录中的,也可以是从另一个仓库拉取的。启用了GIT的挑战将被拉入事件仓库,并在.ctf/config
文件中保留引用。
❯ ctf challenge add [REPO | FOLDER]
本地文件夹
❯ ctf challenge add crypto/stuff
Git仓库
❯ ctf challenge add https://github.com/challenge.git
Cloning into 'challenge'...
[...]
Git仓库到特定子文件夹
❯ ctf challenge add https://github.com/challenge.git crypto
Cloning into 'crypto/challenge'...
[...]
3. 安装挑战
安装挑战将在您的CTFd实例中使用API创建挑战。
❯ ctf challenge install [challenge]
❯ ctf challenge install buffer_overflow
Found buffer_overflow/challenge.yml
Loaded buffer_overflow
Installing buffer_overflow
Success!
4. 同步挑战
同步挑战将通过API更新您的CTFd实例中的挑战。在challenge.yml
文件中进行的任何更改都将反映在您的实例中。
❯ ctf challenge sync [challenge]
❯ ctf challenge sync buffer_overflow
Found buffer_overflow/challenge.yml
Loaded buffer_overflow
Syncing buffer_overflow
Success!
5. 部署服务
部署挑战将自动创建挑战服务(默认在您的CTFd实例中)。您也可以使用不同的部署处理程序通过SSH将服务部署到自己的服务器或单独的Docker仓库。
挑战也将自动安装或同步。获取的连接信息将被添加到您的challenge.yml
文件中。
❯ ctf challenge deploy [challenge]
❯ ctf challenge deploy web-1
Deploying challenge service 'web-1' (web-1/challenge.yml) with CloudDeploymentHandler ...
Challenge service deployed at: https://web-1-example-instance.chals.io
Updating challenge 'web-1'
Success!
6. 验证挑战
验证挑战将检查本地版本的挑战是否与您的CTFd实例中安装的版本相同。
❯ ctf challenge verify [challenge]
❯ ctf challenge verify buffer_overflow
Verifying challenges [------------------------------------] 0%
Verifying challenges [####################################] 100%
Success! All challenges verified!
Challenges in sync:
- buffer_overflow
7. 镜像更改
镜像挑战是同步的反向操作。它将使用您的CTFd实例中安装的挑战的详细信息更新本地版本的挑战。如果您有未在本地上跟踪的远程挑战,它还将发出警告。
❯ ctf challenge mirror [challenge]
❯ ctf challenge verify buffer_overflow
Mirorring challenges [------------------------------------] 0%
Mirorring challenges [####################################] 100%
Success! All challenges mirrored!
所有挑战的操作
您可以通过简单地跳过挑战参数来对配置中定义的所有挑战执行操作。
ctf challenge install
ctf challenge sync
ctf challenge deploy
ctf challenge verify
ctf challenge mirror
挑战模板
ctfcli
包含预先制作的挑战模板,以便以安全的默认设置更快地创建CTF挑战。
ctf challenge new
├── binary
├── crypto
├── programming
└── web
❯ ctf challenge new binary
/Users/user/.virtualenvs/ctfcli/lib/python3.7/site-packages/ctfcli-0.0.1-py3.7.egg/ctfcli/templates/binary/default
name [Hello]: buffer_overflow
❯ ls -1 buffer_overflow
Makefile
README.md
WRITEUP.md
challenge.yml
dist/
src/
欢迎对改进挑战模板做出贡献,以使CTF挑战对每个人来说都更好!
挑战规范
ctfcli
提供了一个挑战规范(challenge.yml
),概述了挑战的主要细节。
由ctfcli
生成或处理的每个挑战都应该有一个challenge.yml
文件。
规范格式已经在生产活动中经过测试并使用,但欢迎对challenge.yml
格式的评论、建议和PR。
插件
ctfcli
插件实际上是通过对动态类进行修改来添加到命令行界面。请参阅插件文档页面以获取简单示例。
ctfcli
是一个alpha项目!插件接口可能发生变化!
将子仓库作为子树的替代方案
ctfcli
通过使用内置的git subtree
机制来管理基于git的挑战。虽然它在大多数情况下都能正常工作,但它已被证明存在缺点,并且容易引起问题和合并冲突。
作为一个替代方案,我们目前正在尝试使用git git subrepo
扩展。此功能可以通过在ctfcli项目配置中的[config]
部分添加use_subrepo = True
属性来启用。
子仓库需要单独安装,并且与默认的subtree
不向后兼容。一旦使用任何一种方法添加了挑战,如果更改它,挑战将无法正常工作,并且您必须再次添加挑战。
项目详细信息
ctfcli-0.1.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1d775ffcc170a6159c065280dd0499e371d74d7bde5b169b9ff3ef69c2997f4 |
|
MD5 | ed8063e0069063970d7888900808675a |
|
BLAKE2b-256 | 79dfa421d3e0e0260501f94328433d76af8efff58a3813c40a13d963e07670a1 |
ctfcli-0.1.3-cp311-cp311-manylinux_2_35_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4b338bdf471ae9c43d14266c2a88be20280775ff673b7268db1573a373b7347b |
|
MD5 | 08e4e231361da09d33edab046e9a49f9 |
|
BLAKE2b-256 | a7566e7753aeb970606b1434c63353e805b010cf335d68f5105cef940d8397e3 |