PWN题完整出题流程(GCC编译ELF文件,搭建GZ:CTF平台,基于CTF-Xined部署题目至GZ:CTF平台)

1.GZCTF平台搭建

(1)新建GZCTF文件夹,并且在该文件夹下创建两个文件

(2)appsettings.json文件,建议直接复制粘贴,红框框起来部分是需要修改部分

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "Database": "Host=db:5432;Database=gzctf;Username=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": "192.168.186.135", // 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"]
  }
}

(3)docker-compose.yml文件,建议直接复制粘贴,红框框起来部分是需要修改部分

version: "3.0"
services:
  gzctf:
    image: gztime/gzctf:latest
    restart: always
    environment:
      - "GZCTF_ADMIN_PASSWORD=***********"
      # choose your backend language `en_US` / `zh_CN` / `ja_JP`
      - "LC_ALL=zh_CN.UTF-8"
    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
 
  db:
    image: postgres:alpine
    restart: always
    environment:
      - "POSTGRES_PASSWORD=********"
    volumes:
      - "./data/db:/var/lib/postgresql/data"

(4)平台搭建

#搭建平台
docker-compose up
#关闭平台
docker-compose down

(5)浏览器访问,至此,平台搭建完成

2.GCC编译生成题目

(1)题目源码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void init(){
    setvbuf(stdout, 0LL, 2, 0LL);
    setvbuf(stdin, 0LL, 2, 0LL);
    setvbuf(stderr, 0LL, 2, 0LL);
}

void vul(){
    char buf[128];
    read(0, buf, 512);
}

int main(int argc, char** argv){
    init();
    write(1, "Hello, World\n", 13);
    vul();
}

(2)创建.c文件,放入源码

(3)GCC编译

#gcc 未编译文件名 -o 编译完成后文件名
#默认保护全开
gcc csu.c -o csu
#部分开启got表,关闭stack保护,关闭pie,-o 编译完成文件名,未编译文件名
gcc -z lazy -fno-stack-protector -no-pie -o csu csu.c
#gcc编译中的集中保护打开和关闭

#    关闭NX        /    开启NX
    -z execstack /    -z noexecstack

#    关闭canary    /    开启canary
    -fno-stack-protector    /    -fstack-protector-all

#    关闭pie    / 开启pie
    -no-pie    /    -pie

#    关闭relro    /    部分开启relro    /    完全开启relro
    -z norelro    /    -z lazy    /    -z now

3.CTF-Xined项目获取

(1)更新镜像源

sudo apt-get update

(2)获取CTF-Xined项目

#下载地址,下载完成后拷贝到服务器中
https://github.com/CTF-Archives/ctf-docker-template
#或者直接git获取
git clone https://github.com/CTF-Archives/ctf-docker-template

4.题目准备

(1)进入项目文件夹,根据题目选择Ubuntu版本

(2)将题目源程序放在src目录下

(3)修改./config/ctf.xinetd文件,红框部分修改成题目名字

(4)修改./dockerfile文件,红框部分修改成题目名字

(5)修改./service/docker-entrypoint.sh文件,同样红框部分修改为题目名字

5.题目镜像制作

(1)在ubuntu版本目录下,制作题目镜像

#docker build -t 创建容器名字(题目名字)
docker build -t test_your_nc .    #注意后面有个点.

(2)查看制作的题目镜像

docker images    #查看制作的镜像

6.题目部署到平台

(1)登录后台admin账户,新建比赛

(2)部署题目,两个重要的地方,填写容器镜像以及容器服务端口(其他功能据个人需求调整)

(3)刚刚创建的题目镜像填写至容器处

(4)修改容器服务端口号为9999,因为Xined部署默认服务端口为9999

(可以修改,具体修改不做介绍)详细情况参考阅读pwn部分

https://hello-ctf.com/docker-template/#pyjail-python_310-socat-xinetd

(5)编写flag模板并且保存

(6)题目附件上传,可以本地也可远程

(7)返回上级并且开放题目

(8)进入比赛对题目进行测试,至此,出题完成

7.题目部署到远程服务器

(1)正常情况下,GZ平台是搭建在远程服务器上的,所以部署题目需要进行ssh连接远程服务器

(2)在远程服务器完成上面的2-3步后,利用scp命令将文件拷贝至各ubuntu版本对应的src目录下

#scp 文件在本地路径    用户名@服务器IP:文件存放在服务器的绝对路径
scp /home/yeah/Desktop/SAS/magic ubuntu@111.230.195.230:/home/ubuntu/sasctf_pwn/ctf-docker-template/pwn-ubuntu_16.04/src

(3)随后进行上面的4-6步即可完成远程服务器的题目部署

8.用到的docker命令以及遇到的问题

(1)docker命令

docker-compose up            #docker搭建GZ平台
docker-compose down          #docker平台关闭                
docker ps                    #查看当前运行的容器
docker images                #查看制作的容器镜像
docker rmi 镜像ID/镜像名称    #删除容器镜像 
docker stop                  #停止容器
docker rm 容器ID/容器名字     #删除容器命令

(2)创建容器的时候报错,可能是网络原因,重启虚拟机后便解决了

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值