写了半天, 基于docker和flask, 支持自动部署ctf靶机容器. 以后比赛的时候再有类似于提权等可能让选手环境互相影响的题目就可以使用本框架部署了.
GitHub地址
本来是想用赵师傅的ctfd插件的, 一步到位还支持动态flag. 可惜我环境冲突, 死活装不上去, 只能自己造个轮子, 还是个有点方的.
具体框架我传到GitHub上了, 链接在上面. 使用时需要提前部署完毕ctf题目的镜像, 将容器镜像填入main.py的全局变量中, 然后配置main.py里面的端口号等剩余参数, 大部分时候默认即可. 最后以root权限执行python main.py
就能在指定端口上线部署服务, 选手根据提示就能部署自己的独立靶机了.
部署后选手使用的docker就是互相独立的, 哪怕A选手rm了自己的服务器也不会影响B选手的环境. 同时实现了超时自动删除功能, 靶机存活时间为45min, 超时自动删除. 选手可以随时自己重新部署.
本着一个十八线web选手的自觉, 对常见的漏洞做了一点微不足道的防御. 至少能保证不会有模板注入和cookies越权的风险.
另外由于采用了内存数据库(手动滑稽), 所以在每次重启的时候之前的注册用户信息都会丢失, 同时遇到大量用户接入的时候会爆内存. 不过也完全杜绝了产生注入漏洞的风险. 就当前需求来看(内部月赛时部署环境),这个缺点还是可以接受的.