为了能到远|

m1xian

园龄:8个月粉丝:0关注:0

记录个人第一次搭建CTF平台(H1ve)

准备工作

安装docker
sudo apt-get update
sudo apt-get install -y docker.io
这里要耐心等待

systemctl start docker
systemctl enable docker
设置开机就启动docker

systemctl enable docker
查看docker是否安装成功

docker -v
验证一下是否装好

pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
安装docker-compose

然后是安装H1ve
git clone https://github.com/D0g3-Lab/H1ve.git
先进入到H1ve目录
然后docker-compose -f single.yml up
拉取镜像
docker update --restart=always $(docker ps -aq)
此命令将各个容器都设置成自启动

CTFd-Owl

参考:https://5ime.cn/h1ve.html

后台导航栏-->Plugins-->CTFd-Owl 或者 靶场地址/plugins/ctfd-owl/admin/settings

Docker Settings

  • Docker Flag Prefix:动态生成的flag前缀
  • Docker APIs URL:API名字(默认为unix://var/run/docker.sock)
  • Max Container Count:最大启动容器数量(默认无限制)
  • Max Renewal Time:最大容器延长时间(超过将无法延长,达到时间后会自动摧毁)

FRP Settings

  • FRP Http Domain Suffix:FRP域名前缀(如开启动态域名转发必填)
  • FRP Direct Ip Address FRP:frp服务器IP
  • FRP Direct Minimum Port:最小端口
  • FRP Direct Maximum Port:最大端口
  • FRP Config Template Frpc:热重载配置头模版(如不会自定义,尽量按照默认配置)
[common]
token = random_this
server_addr = frps
server_port = 80
admin_addr = 0.0.0.0
admin_port = 7400

题目编写

目录结构
test # 题目存放文件夹必须小写英文
├─ Dockerfile
├─ docker-compose.yml
├─ files
│    ├─ index.php 
│    └─ start.sh
└─ flag
Dockerfile
FROM php:7.3-apache
COPY files /var/www/html
RUN chmod 755 /var/www/html && \
    chown root:root /var/www/html && \
    chmod +x /var/www/html/start.sh
CMD /var/www/html/start.sh
EXPOSE 80
docker-compose.yml
version: '2'
services:
  service: 
    # build 该置顶目录下的dockerfile
    build: .
    # image 指定build Dockerfile生成镜像的名称
    image: test
    ports:
      - 9999:80
    volumes:
        # 挂载的 Flag
        - "$PWD/flag:/flag"
    tty: true
    networks:
      - net

networks:
    # 配置docker network
    net: 
      external: 
         name: h1ve_frp_containers
files/start.sh
#!/bin/bash

v=`cat /flag`
cat /var/www/html/index.php | sed -i "s/flag{test_flag}/$v/" /var/www/html/index.php # 用于正则匹配flag并替换

apache2-foreground
files/index.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试题目</title>
</head>
<body>
flag{test_flag}<!--这里会被start.sh替换成动态flag-->
</body>
</html>
flag
flag{this_test_flag}

docker搭建环境部署ctf题目

参考:https://blog.csdn.net/q20010619/article/details/108587879

拉取镜像

docker search lamp
docker pull tutum/lamp #随便pull了一个lamp
docker images 查看镜像

启动容器

docker run -it -d --name=myweb  -p [host port]:[docker port] [image]
#映射端口前首先确定端口没有被占用lsof -i :8080
#-d //容器后台运行。
#-p //指定映射端口。
#--name=myweb  //容器命名
#-it //是以交互模式运行容器
eg:
docker run -it -d --name=myweb -p 78:80 -p 3306:3306 docker.io/linode/lamp
将服务器apach2的78端口映射到docker的80端口,将3306mysql映射到docker上3306端口

重启

systemctl restart docker

环境已经搭建完毕,可以将ctf题目源码拷贝到container的主目录中

docker cp ez_php a9277ea0259a:var/www/html
#docker cp [本地路径] [container id]:[container 路径]

进入docker container

docker exec -it 763c32535da7 /bin/bash
#如果从这个容器退出,不会导致容器的停止,推荐使用 docker exec
#-i //让容器的标准输入保持打开。
#-t //让docker分配一个伪终端并绑定到容器的标准输出上。

进入容器中的数据库,创建好ctf题目需要的数据库、数据表等等(数据库密码为空)

cd var/www/html
mysql -uroot -p

之后访问网站就行

导出容器

docker export 1e560fca3906 > example.tar

本文作者:m1xian

本文链接:https://www.cnblogs.com/m1xian/p/18276787

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   m1xian  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起