记一次CTF校赛GZ::CTF的搭建,web动态容器,以及包含遇到的问题等等

参考文章:GZCTF在ubuntu系统中的安装之单docker-CSDN博客

一.安装docker和docker-compose

apt-get update
apt install docker.io docker-compose

我看到其他文章中有安装其他组件的,比如说docker.ic等等,但我的Ubuntu似乎安不起,但也不影响,docker.io和docker-compose这两个已经满足基本需要了。

查看docker是否安装成功

docker-compose --version 

若有以上信息显示说明已经安装成功。

二、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

docker-compose up -d

这里问题就来了,这个问题当时困扰我很久,以及后面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目录中执行

docker build -t <name> .

在这遇到了某些问题

 这是因为系统环境变量的问题,输入以下命令:

echo 'export PATH="/usr/bin:/usr/local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

镜像搭建成功

查看容器是否存在

docker images

 

在GZ中测试,这里是你自己构造的镜像名

成功运行

四、总结

       这是我在校赛里办的一场新生赛,也算是一种经验吧,过程中遇到很多困难,比如镜像地址,以及docker pull不上等诸多问题。网上也搜了很多资料,也问了许多师傅,没有一个能做到底的。所以我把各位大佬的文章总集一下合成一篇新的文章,希望各位师傅能一把搭建。若文章中有问题,也希望各位师傅能拨乱反正(bushi

 

var code = "ddff9622-2f47-46f4-af43-1d74509dc18e"
### GZCTF 数据库相关资料 GZCTF 的数据库设计主要用于支持其作为 CTF 平台的核心功能,包括题目管理、用户数据存储以及比状态跟踪等功能。以下是关于 GZCTF 数据库的相关信息: #### 数据库结构概述 GZCTF 使用 MySQL 或 MariaDB 作为默认的数据库管理系统[^2]。其核心表主要包括以下几个部分: - **users 表**: 存储参者的信息,例如用户名、密码哈希值、邮箱地址等。 - **challenges 表**: 录所有的竞题目及其属性,比如分值、类别(Web、PWN 等)、描述等内容。 - **submissions 表**: 跟踪用户的提交录,用于判断答题是否正确并更新分数板。 - **teams 表 (可选)**: 如果启用了团队模式,则会额外创建此表来保存队伍成员关系。 这些表格共同构成了整个系统的逻辑框架,使得管理员能够方便地管理和维护事中的各项事务。 #### 安全注意事项 由于 CTF 涉及到网络安全领域的内容,在设置数据库时需特别注意安全性方面的要求。建议采取如下措施加强防护: 1. 对敏感字段采用加密算法处理后再存入数据库; 2. 设置强健复杂的 root 密码,并限制外部访问权限; 3. 配置防火墙规则仅允许特定 IP 地址连接至数据库服务器端口。 对于具体实现细节可以参考官方文档或者社区贡献者的指南文件获取更多帮助材料。 ```sql -- 创建 users 表示例代码片段 CREATE TABLE IF NOT EXISTS `users` ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password_hash CHAR(64), -- 假设使用 SHA-256 加密方式 email TEXT DEFAULT '', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 上述 SQL 片段展示了如何定义一个基本版 user 表格实例化过程的一部分操作命令集合形式呈现出来供学习交流之目的所用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值