CTFd动态靶机搭建与维护

admin 2022年3月24日02:52:19评论337 views字数 2970阅读9分54秒阅读模式

CTFd动态靶机搭建与维护


后续更新:

https://www.yuque.com/hxfqg9/misc/ctfd


搭建



初始化集群


docker swarm init 

如果不行加个 --force-new-cluster

docker node update --label-add='name=linux-1' $(docker node ls -q)

加入集群别名 linux-1


下载CTFd并安装插件


git clone https://gitee.com/yichen115/CTFd.git --depth=1cd CTFdgit submodule update --init


拉起来


docker-compose up -d


访问


等上面拉起来之后访问(端口取决于 docker-compose.yml 我这个是 80)setup 自己随便设置

在 Admin Panel 的 Whale 的 Frp 的 Direct IP Address 是你服务器的 IP

Direct Minimum Port

动态靶机Direct方式可用最小端口

Direct Maximum Port

动态靶机Direct方式可用最大端口


维护


flag格式


在后台的 whale 界面的 Challenges 选项更改

默认是:

{{ "flag{"+uuid.uuid4()|string+"}" }}#flag{67031515-682b-4f59-9678-bc43c7674096}


前缀随便改了,想要把中间的 - 去掉,可以在后面加个 .hex

{{ "ctf{"+uuid.uuid4().hex|string+"}" }}#ctf{cea24c8b0f0949e6887d3348251f2fca}


忘记管理员密码


先随便注册一个账号,docker ps 查看容器,进 mariadb:10.4.12 mysql -u root -p 密码是 ctfd 在数据库 ctfd,user 表,把刚才注册的用户 type 字段改为 admin,然后登录就行了


[×]题目分页与检索


想要实现类似 BUU 那种可以分页的,网上暂时没找到合适的


CTFd动态靶机搭建与维护


https://gitee.com/kee1ong/ctfd-pages-theme

有个差不多的,但是不行,npm 简直魔鬼,各种报错,暂时放弃😅


Read-only file system解决


想进 ctfd 的 docker 换个主题啥的,结果给我说 Read-only file system

感觉是 docker-compose.yml 的第 22 行有个 :ro,因为它的基础镜像是没有这个 Read-only的,把这个去掉就行了🤦‍♂️我给的链接已经去掉了,可以直接用,这里只是记录一下


换主题


解决了 Read-only file system 直接找个适配 CTFd 版本的主题,去 docker 里面 clone 下来,然后后台更换即可


MARK 几个适配了 3.3.0 的主题:


ctfd-neon-theme

为了下载速度,我同步到了 gitee:

https://gitee.com/yichen115/ctfd-neon-theme


CTFd动态靶机搭建与维护

CTFd动态靶机搭建与维护

CTFd动态靶机搭建与维护


CTFd-theme-pixo

https://gitee.com/yichen115/CTFd-theme-pixo


这个对动态靶机支持不好,不过这字体是真的好看,看看能不能两个结合一下😋


CTFd动态靶机搭建与维护

CTFd动态靶机搭建与维护


QQ群机器人


改了个小脚本,当有用户注册或者答对题目时会在 qq 群发消息:

https://github.com/yichen115/ctfd-qq-bot

我这个只是一个小爬虫,主要是配合 go-cqhttp 项目

去 https://docs.go-cqhttp.org/ 找一个适合自己服务器的 release 版本,放在服务器上,首次运行会生成一个文件,里面填写用来作为机器人的 qq 账号密码之类的,然后后台运行就行了,网上挺多方法,比如运行着 ctrl+z 然后 bg,还有 nohup 这种的


nohup python3 ctfd-bot.py &

ctfd-bot.py 是用 python3 写的,先安装对应的库,打开修改对应的参数,然后也是后台运行起来即可,需要关掉直接 kill -9 pid


出题



参考:

https://www.zhaoj.in/read-6259.htmlhttps://blog.csdn.net/Cypher_X/article/details/115359957https://www.v0n.top/2020/05/01/如何正确使用Docker出一道CTF题目/


PWN 题环境

这个不错,还没试:

https://github.com/TaQini/pwn_docker


WEB 题环境

整体结构:files 是个文件夹,里面有 flag.sh 和 html 文件夹,html 是题目源码

docker-compose.ymlDockerfilefiles--|       |--flag.sh       |--html--|                |--index.php                |--flag.php


首先当然是题目了,就完整的写好题目就可以啦,放在一个 html 文件夹里

flag 自定义一个特殊的后面用,这里使用 flag{dockerflag},后面会自动替换


然后写一个 flag.sh 用来动态生成密码,使用 sed 去 flag.php 查找 flag{dockerflag} 然后替换为 ctfd-whale 自动生成的 $FLAG,最后删掉这个文件,sed 查找的目录根据需要自己写

sed -i "s/flag{dockerflag}/$FLAG/" /var/www/html/flag.phpexport FLAG=not_flagFLAG=not_flagrm -f /flag.sh


如果是 sql 注入这类的题,需要写到数据库中

#!/bin/bash# 修改数据库中的 FLAG,自定义sql语句把mysql -e "USE ctf;INSERT INTO Flag VALUES('$FLAG');" -uroot -prootexport FLAG=not_flagFLAG=not_flagrm -f /flag.sh


然后编写 Dockerfile

FROM ctftraining/base_image_nginx_mysql_php_73#这里自己选择基础镜像COPY ./files /tmp/RUN cp -rf /tmp/html /var/www/   #把题目复制到 /var/www    && cp -f /tmp/flag.sh /flag.sh   #强制拷贝flag.sh到根目录    && chown -R www-data:www-data /var/www/html  #设置权限


docker-compose.yml 里面的端口以及 flag 都会随机生成,没必要,倒是可以用来生成镜像 docker-compose up -d

version: "2"
services:
web: build: . image: yichen115/web_get_method restart: always ports: - "127.0.0.1:8302:80" environment: - FLAG=flag{123}


整理文档的时候突然懵了,我没看到有运行 flag.sh 的地方呀,原来 ctftraining 的镜像带着,docker-php-entrypoint 里面有个

if [[ -f /flag.sh ]]; then  source /flag.shfi


替他类型的直接静态flag吧

本文始发于微信公众号(陈冠男的游戏人生):CTFd动态靶机搭建与维护

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月24日02:52:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTFd动态靶机搭建与维护https://cn-sec.com/archives/532218.html

发表评论

匿名网友 填写信息