参考文章:GZCTF在ubuntu系统中的安装之单docker-CSDN博客
一.安装docker和docker-compose
- apt-get update
- apt install docker.io docker-compose
复制代码 我看到其他文章中有安装其他组件的,比如说docker.ic等等,但我的Ubuntu似乎安不起,但也不影响,docker.io和docker-compose这两个已经满足根本需要了。
检察docker是否安装乐成
若有以上信息显示分析已经安装乐成。
二、GZ::CTF竞赛平台的安装
安装完docker以及docker-compose之后我们就可以开始安装GZ了。
这里GZ提供两个配置文件,配置完成后直接拉取(还挺方便的…………
1、首先创一个目录
- mkdir GZCTF #路径及目录名自己选择,自己熟悉就好
复制代码
2、创建appsettings.json文件
- {
- "AllowedHosts": "*",
- "ConnectionStrings": {
- "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=<Your POSTGRES_PASSWORD>" //必须项
- },
- "EmailConfig": {
- "SendMailAddress": "a@a.com",
- "UserName": "",
- "Password": "",
- "Smtp": {
- "Host": "localhost",
- "Port": 587
- }
- },
- "XorKey": "<Your XOR_KEY>", //必须项
- "ContainerProvider": {
- "Type": "Docker", // or "Kubernetes"
- "PortMappingType": "Default", // or "PlatformProxy"
- "EnableTrafficCapture": false,
- "PublicEntry": "<Your PUBLIC_ENTRY>", // or "xxx.xxx.xxx.xxx" !必须项
- // optional
- "DockerConfig": {
- "SwarmMode": false,
- "Uri": "unix:///var/run/docker.sock"
- }
- },
- "RequestLogging": false,
- "DisableRateLimit": true,
- "RegistryConfig": {
- "UserName": "",
- "Password": "",
- "ServerAddress": ""
- },
- "CaptchaConfig": {
- "Provider": "None", // or "CloudflareTurnstile" or "GoogleRecaptcha"
- "SiteKey": "<Your SITE_KEY>",
- "SecretKey": "<Your SECRET_KEY>",
- // optional
- "GoogleRecaptcha": {
- "VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify",
- "RecaptchaThreshold": "0.5"
- }
- },
- "ForwardedOptions": {
- "ForwardedHeaders": 5,
- "ForwardLimit": 1,
- "TrustedNetworks": ["192.168.12.0/8"] //必须项
- }
- }
复制代码 这里有几个必须要设置的参数值:
<Your POSTGRES_PASSWORD>:你设置的暗码,背面要跟数据库暗码一致
<Your XOR_KEY>:你比赛的私钥。参数值为恣意字符串。
<Your PUBLIC_ENTRY>:用于创建容器,外部访问地址,可以是 IP 或域名,也就是自己的域名或者ip
TrustedNetworks:可以默认0.0.0.0/0
3、创建docker-compose.yml文件
- version: "3.0"
- services:
- gzctf:
- image: gztime/gzctf:latest
- restart: always
- environment:
- - "LANG=zh_CN.UTF-8" # choose your backend language `en_US` / `zh_CN` / `ja_JP`
- - "GZCTF_ADMIN_PASSWORD=<Your GZCTF_ADMIN_PASSWORD>"
- ports:
- - "80:8080"
- volumes:
- - "./data/files:/app/files"
- - "./appsettings.json:/app/appsettings.json:ro"
- # - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment
- - "/var/run/docker.sock:/var/run/docker.sock" # this is required for docker deployment
- depends_on:
- - db
- cache:
- image: redis:alpine
- restart: always
-
- db:
- image: postgres:alpine
- restart: always
- environment:
- - "POSTGRES_PASSWORD=<Your POSTGRES_PASSWORD>"
- volumes:
- - "./data/db:/var/lib/postgresql/data"
复制代码 重要设置两个参数值
GZCTF_ADMIN_PASSWORD:初始管理员暗码。
POSTGRES_PASSWORD: 数据库暗码。与上一个文件一致。
4、构建GZ::CTF
这里题目就来了,这个题目当时困扰我很久,以及背面web动态容器的搭建也是卡在这步,拉不了镜像,这个题目其实就是镜像网址默认为国外,下载容易超时,而且国内的某些镜像网址也非常容易超时,我找了很多也是超时,甚至一度猜疑是我电脑的题目,这里向各位师傅保举一个镜像网址就是华为云的镜像地址,每个用户都是唯一的,特别好用,登录华为云,容器镜像服务 SWR->镜像中心->镜像加快器
更改镜像地址
- vi /etc/docker/daemon.json
复制代码 添加你在华为云获取的镜像地址,这里不保举其他地址,我都试过了,都是超时!!
接着重启一下docker服务
- systemctl daemon-reload
- systemctl restart docker.service
复制代码 拉取乐成
打开欣赏器访问80端口。到这已经完成GZ::CTF的搭建了,尽情游玩吧(bushi
三、web容器、动态flag的实现
安装docker desktop
对于非 Gnome 桌面情况,必须安装:gnome-terminal
- apt install gnome-terminal
复制代码 下载desktop.docker.deb,这里使用dpkg下令安装deb压缩包,apt用不了!!
- dpkg -i ./docker-desktop-4.24.0-amd64.deb
复制代码 启动服务
- systemctl --user start docker-desktop
- systemctl --user enable docker-desktop
复制代码 构建容器镜像
创建如下结构
flag.sh
- #!/bin/sh
- sed -i "s/flag{testflag}/$GZCTF_FLAG/" /var/www/html/index.php
- export GZCTF_FLAG=""
复制代码 该文件重要实现动态flag,这里重要需要更改的是你flag文件的路径
Dockerfile
- FROM ctftraining/base_image_nginx_mysql_php_56
- COPY src /var/www/html
- RUN mv /var/www/html/flag.sh / \
- && chmod +x /flag.sh
复制代码 该文件重要实现根本镜像拉取,把你整个镜像跑起来,若要加下令请在下行加run <bash下令>
index.php
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <title>F12 no! no! no!</title>
- </head>
- <p style="font-family:arial;color:black;font-size:20px;text-align:center;">Flag不在这里哦</p>
- <!-- flag{testflag} -->
- <body>
- <script>
- document.oncontextmenu=function() {
- alert("右键被禁用");
- return false;
- };
- document.onkeydown = function(e) {
- e = window.event || e;
- var k = e.keyCode;
- //屏蔽ctrl+u,F12键
- if ((e.ctrlKey == true && k == 85) || k == 123) {
- if (k == 85)
- alert("Ctrl+U被禁用!");
- else
- alert("F12被禁用!");
- e.keyCode = 0;
- e.returnValue = false;
- e.cancelBubble = true;
- return false;
- }
- }
- </script>
- </body>
- </html>
复制代码 你自己的web题目。注意!flag应替换成flag.sh里的flag{testflag},不然无法实现动态flag
<name>为你镜像的名称,而且在Web-F12目录中执行
在这碰到了某些题目
这是因为系统情况变量的题目,输入以下下令:
- echo 'export PATH="/usr/bin:/usr/local/bin:$PATH"' >> ~/.bashrc
- source ~/.bashrc
复制代码 镜像搭建乐成
检察容器是否存在
在GZ中测试,这里是你自己构造的镜像名
乐成运行
四、总结
这是我在校赛里办的一场新生赛,也算是一种经验吧,过程中碰到很多困难,比如镜像地址,以及docker pull不上等诸多题目。网上也搜了很多资料,也问了许多师傅,没有一个能做到底的。所以我把各位大佬的文章总集一下合成一篇新的文章,盼望各位师傅能一把搭建。若文章中有题目,也盼望各位师傅能拨乱反正(bushi
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |