Setup CTFd with CTFd-whale
Contents
记一次搭建CTF pwn靶场的经过。
00 调查
在常用搜索引擎中搜索一下,看到了CTFd这个开源框架很受欢迎,支持自定义插件、主题,还有赵师傅的CTFd-Whale这个支持动态靶机的插件。简直为懒人开箱即食打造,话不多说开搞。
01 曲折
网上一搜一大把关于搭建CTFd和CTFd-Whale的教程,但是这个插件是2年前开源的,文章也大多集中在2年前。不过也翻到了几篇去年和今年上半年的文章,CTFd的版本大多是3.3.0或3.3.1,而此时CTFd的最新版本是3.4.0(其实就隔了1-2个版本),但是强迫症想体验最新版,于是:
坑1:
docker-compose版本过新。
因为基于Docker是最方便的,所以用了基于Docker的方案,Docker的安装采用了官网的方案:
好家伙,我看到Docker Compose的Github Release上的最新版本是2.1.0,忍不住装了最新版。
然后下载CTFd以及CTFd-Whale的repo,并开始docker-compose,结果遇到这个问题
|
|
用的root用户起的docker和network,能力有限,实在没搞懂rpc怎么就PermissionDenied。
后来看到Err0rCM师傅的文章中提到了一些坑点,其中的一句"似乎docker和系统的版本会有影响"让我恍然大悟,之后使用Vicosna师傅文章中安装Docker和Docker-compose的方法,就没有这个问题了。
|
|
|
|
因为版本问题折腾了很久,还从头来了好多次。。。
坑2:
CTFd repo的选择。
新版本强迫症已经治好了,不敢乱用新版本了,谁知道会出什么幺蛾子,毕竟能用是第一位。
- CTFd最新版本3.4.0:没有用这个,怕和CTFd-Whale插件出现什么兼容性问题,还是用各位师傅的版本最稳
- 有些师傅的repo可能是有点旧,或者和我系统组件不兼容之类的,会在docker build阶段出现
apk add python ERROR: unable to select package
看上去像是网络问题的错误,时间紧迫没有再有限时间搜到解决方法,放弃之 - 最后用了Vicosna师傅的版本,挺稳的
02 搭建
参考Vicosna师傅的文章就好,很详细了
03 出题(pwn方向)
使用TaQini师傅的pwn_docker快速部署工具
-
首先生成docker镜像
1
$ ./deploy.py your_pwn_challenge docker_REPOSITORY_name
然后可以通过
docker images
看到刚刚生成的镜像 -
然后新建题目,题目类型为dynamic_docker,并进行如下配置:
1 2 3
Docker Image: 刚刚生成的镜像名 Frp Redirect Type: Direct Frp Redirect Port: 9999
-
然后注意这种动态靶机的题目,静态flag空着就行,whale插件会通过环境变量下发随机flag到靶机,exp可以打通
-
以上的方法适合flag和elf分离的题目,而且每个instance的flag都是不同的;如果flag在elf中,题目类型用默认,flag用静态flag就好
04 主题
使用了neon主题,还挺好看的
05 注意点:
- 使用赵师傅的CTFd pull docker images的时候,不知道是因为CTFd的版本较旧还是我没有开镜像加速,有几个下载条贼慢。Vicosna师傅的CTFd和yichen师傅的CTFd pull docker images的时候就挺快。
06 参考文章:
- CTFd最新动态靶场环境部署笔记 - Vicosna师傅
- CTFd&ctfd-whale动态靶机搭建与维护 - yichen师傅
- CTFd-Whale 推荐部署实践 - zhaoj师傅
- CTFD支持动态靶机的搭建笔记 - Err0rCM师傅