0%

ctf靶机自动部署

 写了半天, 基于docker和flask, 支持自动部署ctf靶机容器. 以后比赛的时候再有类似于提权等可能让选手环境互相影响的题目就可以使用本框架部署了.
GitHub地址

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

TODO

  • 换个好看的前端
  • 用真正的数据库代替”内存数据库”
  • 和ctfd数据联动, 不用注册两次.
  • 在注册页面加上认证码
  • 审一遍单词拼写错误

    2020/03/04 更新

  • 更换了密码判断逻辑, 减轻了校验密码时的算力消耗.
  • 优化了代码逻辑, 增加了注释, 现在的可读性更好.
  • 改正了几个标题的单词拼写错误

    2020/03/09 更新

  • 优化了删除靶机时的代码逻辑
  • (大概)修复了某些情况下超时靶机不能被正常删除的bug