CTFd+CTFd-whale动态靶机插件搭建
环境Ubutun20.04-desktop
1.安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者
curl -sSL https://get.daocloud.io/docker | sh
设置docker镜像加速(可参考:https://blog.csdn.net/qq_45637155/article/details/109902726)
- 访问https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 找到镜像加速器,按照指示修改daemon配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.安装docker-compose
1. 进入https://github.com/docker/compose/releases 查看最新版本。
sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2. 设置权限
sudo chmod +x /usr/local/bin/docker-compose
3. 查看是否安装成功
docker-compose --version
出现docker-compose version 1.26.2即安装成功
3.Frp的配置
#请在/root目录下执行
cd
wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -zxvf frp_0.29.0_linux_amd64.tar.gz
cd frp_0.29.0_linux_amd64
sudo cp systemd/* /etc/systemd/system/
sudo mkdir /etc/frp
sudo cp frpc.ini frps.ini /etc/frp/
sudo cp frpc frps /usr/bin/
sudo chmod a+x /usr/bin/frpc /usr/bin/frps
sudo systemctl enable frps
3.1 编辑/etc/frp/frps.ini
vim /etc/frp/frps.ini
[common]
bind_port = 7897
bind_addr = 0.0.0.0
token =thisistoken
3.2 启动frps服务
systemctl start frps
3.3 修改/etc/frp/frpc.ini的配置文件(和上面的frps.ini对应)
vim /etc/frp/frpc.ini
[common]
server_addr = 172.17.0.1 #docker0的ip
server_port = 7897
token=thisistoken
3.4 再修改/frp_0.29.0_linux_amd64/frpc.ini(这个文件会用来配置frpc容器的)
vim /frp_0.29.0_linux_amd64/frpc.ini
[common]
server_addr = 172.17.0.1 # 这里填写宿主机ifconfig之后docker0的ip
server_port = 7897
token=thisistoken
admin_addr = 172.19.0.2 #这里填写frpc容器在frpcadmin网络里的ip,可以先指定
admin_port = 7400
log_file = ./frps.log
3.5 创建网络并启动frpc容器并配置frpc.ini
docker network create ctfd_frp-containers
docker run -d -v ~/frp_0.29.0_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"
3.6 创建网络frpcadmin用于ctfd容器和frpc容器通信(通过docker ps查看刚创建的fprc容器的id)
docker network create frpcadmin
docker network connect frpcadmin id # <frpc容器名或者ID>
#将frpc和ctfd容器单独连接到网络frpcadmin,注意要等容器创建好之后再连接,因此ctfd将在稍后连接
3.7 查看frpcadmin网络的连接情况并记录frpc容器的网络IP
docker network inspect frpcadmin
图中的IP就是frpc容器在frpcadmin网络中的ip地址。是可以由我们在/frp/frpc.ini中来指定的(admin_addr)。
这个地址在后面填写ctfd-whale插件配置的时候也会用到
4.CTFd和CTFd-whale插件的安装
#切到root的家目录
cd /root
#下载ctfd
git clone https://github.com/CTFd/CTFd.git
#进入CTFd目录
cd CTFd
#回退到某个版本,直接执行下面命令
git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard
#进入CTFd/plugins(注意下载的CTFd文件有一个同名的子目录CTFd,子目录下有plugins,不要混淆了)
cd CTFd/plugins
#下载插件并确保文件名小写
git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale
#进入ctfd-whale
cd ctfd-whale
#回退版本
git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard
#回到第一层CTFd目录
cd ../../../
#配置docker-compose
vim docker-compose.yml
配置docker-compose.yml(可以直接复制覆盖)
version: '2.2'
services:
ctfd:
build: .
user: root
restart: always
ports:
- "8000:8000" #第一个是访问ctfd的端口,第二个是docker端口映射出去的端口
environment:
- UPLOAD_FOLDER=/var/uploads
- DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd
- REDIS_URL=redis://cache:6379
- WORKERS=1
- LOG_FOLDER=/var/log/CTFd
- ACCESS_LOG=-
- ERROR_LOG=-
volumes:
- .data/CTFd/logs:/var/log/CTFd
- .data/CTFd/uploads:/var/uploads
- .:/opt/CTFd:ro
- /var/run/docker.sock:/var/run/docker.sock #添加这句即可,别的基本按照官方的不用动
depends_on:
- db
networks:
default:
internal:
db:
image: mariadb:10.4.12 #这里改成10.4.12,10.4.13会出错
restart: always
environment:
- MYSQL_ROOT_PASSWORD=ctfd
- MYSQL_USER=ctfd
- MYSQL_PASSWORD=ctfd
- MYSQL_DATABASE=ctfd
volumes:
- .data/mysql:/var/lib/mysql
networks:
internal:
# This command is required to set important mariadb defaults
command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]
cache:
image: redis:4
restart: always
volumes:
- .data/redis:/data
networks:
internal:
networks:
default:
internal:
internal: true
修改Dockfile:
进入CTFd目录,vim Dockerfile
,然后复制下面内容
FROM python:3.6-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
apk update && \
apk add python3 python3-dev linux-headers libffi-dev gcc make musl-dev py-pip mysql-client git openssl-dev
RUN adduser -D -u 1001 -s /bin/bash ctfd
WORKDIR /opt/CTFd
RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads
RUN pip config set global.index-url https://pypi.doubanio.com/simple
RUN pip config set install.trusted-host pypi.doubanio.com
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
COPY . /opt/CTFd
RUN for d in CTFd/plugins/*; do \
if [ -f "$d/requirements.txt" ]; then \
pip install -r $d/requirements.txt -i https://pypi.doubanio.com/simple; \
fi; \
done;
RUN chmod +x /opt/CTFd/docker-entrypoint.sh
RUN chown -R 1001:1001 /opt/CTFd
RUN chown -R 1001:1001 /var/log/CTFd /var/uploads
USER 1001
EXPOSE 8000
ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]
在CTFd目录qiurements.txt添加:banal==0.4.2
构建启动镜像
docker-compose build
启动镜像
docker-compose up -d
将ctfd容器加入到frpcadmin网络中
#查看ctfd容器的id
docker ps
docker network connect frpcadmin 容器id
可以看到ctfd容器已经加入到了frpcadmin网络中
最后启动好了的docker界面如下:
访问:http://ip:8000
(我这里是在本机上搭建的,所以ip写的是127.0.0.1。若是在云上搭建的,直接写公网的ip即可)
首次进入需要完善一下管理员信息和相关模式,根据需要填写即可。
解决平台加载很慢的问题:
原因是用了一个all.css。这个样式文件是从外网加载过来的。修改一下网址即可实现快速加载。这个样式文件的位置在:/CTFd/CTFd/themes/core/static/css/vendor/font-awesome/
下的fontawesome-fonts.css。
将:
@import url('https://use.fontawesome.com/releases/v5.4.1/css/all.css');
替换为:
@import url('https://cdn.bootcss.com/font-awesome/5.13.0/css/all.css');
然后再重启docker
systemctl restart docker
以管理员的方式登录,然后再导航栏中点击Admin -> Plugins
进入设置界面
添加题目:
启动靶机
对于MISC,REVERSE类型的题目。我们只需要上传题目附件和填好flag就可以了。
参考文章:
https://blog.csdn.net/qq_42111373/article/details/106398981
https://blog.csdn.net/qq_45637155/article/details/109902726
https://blog.csdn.net/weixin_43802844/article/details/108572271