前言

关于出题,如web题目你需要有较丰富的docker相关知识。推荐学习dockerfile如何编写、如果构建镜像、如何设置FLAG入口脚本、如果编排、如何将镜像推送至镜像仓库等相关知识。

本次我以一个web题目为例演示如何出题。

开源题目设置

已设置的有动态flag参数的开源题目

以下为github一个开源的题目,来看一下他的yaml文件:

  • 关键点1web: SNOWCTF平台只识别名称为web的参考列,部分编排可能用其他名称代替这里改成web就行了

  • 关键点2:image: ctftraining/wdb_2018_comment是他的镜像名称并且这个镜像已经推送到了docker镜像仓库中,

  • 关键点3:ports 冒号后面的80端口是镜像内部端口不能随便更改。具体需根据dockerfile情况判断。

  • 关键点4:environment 这道题目他在构建镜像时就有动态flag的处理场景并且他预留了环境变量参数FLAG,所以直接将flag{flag_test}赋值给FLAG,容器启动后就会读取flag值。SNOWCTF平台的flag预留的参数为"$SNOW_FLAG",所以只需要将FLAG=$SNOW_FLAG即可

version: "2"
services:
  web:
    image: ctftraining/wdb_2018_comment
    restart: always
    ports:
      - "127.0.0.1:8307:80"
    environment:
      - FLAG=flag{flag_test}

宗上,我们将这个题目的yaml文件改变成以下,就可以完美适配SNOWCTF平台(version和services必须保留):

version: "2"
services:
  web:
    image: ctftraining/wdb_2018_comment
    ports:
      - "80:80"
    environment:
      - FLAG=$SNOW_FLAG

未设置动态flag的开源题目

开源题目当然也有很多没有FLAG这样的入口。在SNOWCTF创建镜像配置是,你会注意到有一个Flag脚本命令这样的参数,可以填写命令直接暴力把flag写入到启动的容器中。当然这种有严重的局限性。

bash -c 'echo $SNOW_FLAG > /flag.txt'

自己开发题目

这个需要专业的docker知识,可以运用ai,感兴趣可研究 https://github.com/CTFTraining/wdb_2018_comment 这个题目如何开发如何设置动态flag的。

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.secsnow.cn/wiki/subject/article/topic-set/

许可协议:署名-非商业性使用 4.0 国际许可协议