CTFd动态靶机搭建笔记

一颗小胡椒2022-04-28 22:00:10

声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。

CTFd是一个Capture The Flag框架,侧重于易用性和可定制性。它提供了运行CTF所需的一切,并且可以使用插件和主题轻松进行自定义。

官方网站:https://ctfd.io/下载ctfd:https://github.com/glzjin/CTFd.git下载frp:https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz下载ctf-whale:https://github.com/glzjin/CTFd-Whale

01

安装部署frps服务

步骤1. 安装启动frps

wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz tar -zxvf frp_0.36.2_linux_amd64.tar.gz cd frp_0.36.2_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

步骤2. 编辑frps.ini

sudo vim /etc/frp/frps.ini 
[common] bind_port = 7897 bind_addr = 0.0.0.0 token =thisistoken vhost_http_port=80 #如果是http动态域名需要这个。80端口开启需要systemmd使用root权限启用frp

步骤3. 启动frps服务

sudo systemctl start frps

步骤4. 创建网络并启动frpc容器


sudo docker network create ctfd_frp-containers sudo docker network ls

sudo docker run -d -v ~/frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"

注意:如果执行上述命令行,产生的frpc容器一直循环启动,通过指令docker logs 查看报错内容为缺少配置文件,则可以将根目录的frp_0.36.2_linux_amd64文件夹删除(注意是系统生成的空文件夹),在下载的frp_0.36.2_linux_amd64文件夹目录执行(本次操作在opt目录下)


sudo docker run -d -v frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"

步骤5. 创建网络frpcadmin用于ctfd容器和frpc容器通信


sudo docker network create frpcadmin sudo docker network connect frpcadmin  #将frpc和ctfd容器单独连接到网络frpcadmin,注意要等容器创建好之后再连接,因此ctfd将在稍后连接 docker network inspect frpcadmin  #查看frpcadmin网络的连接情况并记录frpc容器的网络IP

步骤6. 编辑frpc.ini


vim ~/frp_0.36.2_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 = ./frpc.log

编辑完之后记得重启frpc容器

02

安装靶场与插件

步骤1. 下载靶场与插件

将插件ctfd-whale 下载到CTFd/plugins目录:


git clone https://github.com/CTFd/CTFd.git cd CTFd/ git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard  #回滚到当前教程适合的版本 cd CTFd/plugins  #打开ctfd插件目录 git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale  #确保插件文件夹小写 cd ctfd-whale git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard  #回滚到当前教程适合的版本 cd ../..   #返回ctfd主目录 vim docker-compose.ym

步骤2. 配置docker-compose.yml


version: '2'services:  ctfd:    build: .    user: root    restart: always    ports:      - "8000:8000" #你自己的    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:         external:          name: frpcadmin    internal:        internal: true

步骤3. 重新build后启动ctfd


FROM python:3.6-alpineRUN 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 g++RUN adduser -D -u 1001 -s /bin/bash ctfdWORKDIR /opt/CTFdRUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploadsRUN pip3 config set global.index-url https://pypi.doubanio.com/simpleRUN pip3 config set install.trusted-host pypi.doubanio.comCOPY requirements.txt .RUN pip install -r requirements.txt -i  https://pypi.doubanio.com/simpleCOPY . /opt/CTFdRUN 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.shRUN chown -R 1001:1001 /opt/CTFdRUN chown -R 1001:1001 /var/log/CTFd /var/uploadsUSER 1001EXPOSE 8000ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]

步骤4. 构建启动镜像。


docker-compose build docker-compose up -d

步骤5. 将ctfd连接frpcadmin网络


docker network connect frpcadmin 

03

CTFd部署及插件配置

步骤1. 启动ctfd后进入管理页面选择插件

步骤2. 填写相关参数

进入后随便设置,然后进Admin Panel进行设置

属性

配置

Docker API URL

unix://var/run/docker.sock

Frp API IP

frpc的ip配置

Frp API Port

frpc的端口配置

Frp Http Domain Suffix

Docker API URL to connect(可填None)

Frp Http Port

80

Frp Direct IP Address

你的公网ip,本机即为127.0.0.1

Frp Direct Minimum Port

与之前frps最小端口呼应

Frp Direct Minimum Port

与之前frps最大端口呼应

Max Container Count

不超过最大-最小

Max Renewal Times

最大实例延时次数

Frp config template

填入frps的配置,只需填[common]

Docker Auto Connect Containers

ctfd_frpc_1

Docker Dns Setting

可填机器内DNS,没有可填个外网DNS

Docker Swarm Nodes

linux-1 与前面swarm集群呼应

Docker Multi-Container Network Subnet

内网题大子网ip配置/CIDR

Docker Multi-Container Network Subnet New Prefix

每个内网题实例的CIDR

Docker Container Timeout

单位为秒

最后附上我的配置图片

示例:接下来带领大家创建一个web容器:

首先通过命令行,下载容器镜像,记录好镜像名称,然后在challenge进行配置:

版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!

docker容器技术
本作品采用《CC 协议》,转载必须注明作者和本文链接
主要介绍了容器技术的发展、以Docker为代表的容器技术生态以及容器技术的应用场景。
容器安全是一个庞大且牵涉极广的话题,而容器的安全隔离往往是一套纵深防御的体系,牵扯到AppArmor、Namespace、Capabilities、Cgroup、Seccomp等多项内核技术和特性,但安全却是一处薄弱则全盘皆输的局面,一个新的内核特性可能就会让看似无懈可击的防线存在突破口。随着云原生技术的快速发展,越来越多的容器运行时组件在新版本中会默认配置AppArmor策略,原本我们在《红蓝对
在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。与此相反,Docker 技术鼓励应用程序各自独立运行其进程,并提供相应工具以实现这一功能。
目前发现并没有将kubernetes和Docker技术产生背景和需求进行比较的文章,本文从最纯正的官方定义角度出发并展开,阐述二者产生背景及与传统技术对比。官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
云原生安全工具合集
2023-04-11 10:06:28
以Docker+K8s为代表的容器技术得到了越来越广泛的应用,从安全攻防的角度,攻击者已经不再满足于容器逃逸,进而攻击整个容器编排平台,如果可以拿下集群管理员权限,其效果不亚于域控失陷。在云原生安全攻防的场景下,甲乙攻防双方对于安全工具的关注点也不一样。
在工业开发领域也有人提出了一种被称为 MLops 的新的开发范式,即机器学习时代的 Devops。Reproducible Machine Learning,顾名思义,即为可复现的机器学习。
一、前言 这篇文章可能出现一些图文截图颜色或者命令端口不一样的情况,原因是因为这篇文章是我重复尝试过好多次才写的,所以比如正常应该是访问6443,但是截图中是显示大端口比如60123这种,不影响阅读和文章逻辑,无需理会即可,另外k8s基础那一栏。。。本来想写一下k8s的鉴权,后来想了想,太长了,不便于我查笔记,还不如分开写,所以K8S基础那里属于凑数???写了懒得删(虽然是粘贴的:))
Docker容器入门指北
2022-05-11 06:43:31
Docker 是一种基于 Linux 的容器技术,类似于轻量的虚拟机。它采用 C/S 架构,使用Go语言开发。Docker 分为 2 个版本:社区版和企业版,社区版免费,企业版是收费的
声明 本文为笔者对实际容器安全事件的归纳,仅代表个人观点。 文末为容器安全事件排查与响应思维导图。 引子 定位初始入侵位置 首先要确认入侵是否发生在容器内,或者说只在容器内。 场景:zabbix告警一个进程占用非常高,像是挖矿程序/DOS了。 但是查看进程的PPID却发现是systemd,这种情况大概率是容器相关了。 首先获取程序PID,然后查看对应进程的进程树是否父进程为contai
软件定义安全毫无疑问是未来数据中心安全建设发展方向,在等保合规建设中发挥重要作用,需要安全厂商对等级保护标准深入理解和云计算安全领域的持续积累创新,需要网络安全行业进一步推进开放的生态圈建设,不断开发出适合各种场景的完备的解决方案,应对持续加大的合规、实战和投入的三重压力。
一颗小胡椒
暂无描述