记录个人第一次搭建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
后台导航栏-->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服务器IPFRP 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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异