CTF-nc-docker 配置指南
CTF-nc-docker
Github 仓库:CTF-nc-docker
使用 xinted
提供服务,构建便捷易用的 netcat
环境,一行命令启动,简单易用。
支持多个题目/服务同时共存于同一容器环境、对访问进行日志记录、可选的题目附件下载服务、可自定义的容器资源限制、针对于每个题目的自定义设置。
主要支持 python 脚本、node.js 脚本及二进制可执行程序,将其标准输入输出暴露于网络连接。对于每个访问的连接,均会产生一个新的程序实例进行处理。
本项目仅供测试及学习使用,应用于生产/外网访问存在一定安全风险!!
尽管进行了较为严格的权限限制,但是对于能够暴露 shell 的题目,本项目容器存在一定逃逸风险!!
构建与运行
在安装好 docker 后,克隆本仓库到本地并在根目录执行 python generate.py
或 python3 generate.py
。
运行过程中产生的访问日志可以由容器内目录的 /var/log/ctf/*.log
获取。
若开启文件附件下载服务,则可以通过 http://{hostname}:{download_port}
查看到全部题目及其对应端口。
初次运行脚本会在根目录生成 global.json
,请根据脚本提示进行操作。
配置说明
全局设置见 global.json
,题目特意化设置见各题目文件夹中的 config.json
。
global.json
mirrors_base_url
: Debian 软件源(域名)pypi_index_url
: PyPI 软件源npm_mirror_url
: NPM 软件源hostname
: 访问该容器的主机名port_range_start
: 起始端口号download_port
: 文件下载服务所开放的端口download_server
: 是否开启文件下载服务web_netcat_server
: 是否开启网络 netcat 终端服务server_port
: 服务器端口show_echo_msg
: 显示题目信息show_warn_msg
: 显示警告信息resource_limit
: 运行时容器资源限制enable
: 是否启用限制max_memory
: 最大占用内存max_cpu
: 最大占用 CPU
config.json
enable
: 是否启用该题目pip_requirements
: 需要使用 pip 安装的包all_copy
: 是否拷贝题目目录全部文件 (不拷贝config.json
)launch
: 启动程序args
: 启动参数extra_cmd
: 其余需要执行的指令 (如 pip)copy_files
: 当不全部拷贝题目文件时,需要拷贝的文件 (相对于题目目录的路径)echo_msg
: 执行程序前输出的说明download_file_name
: 提供需要下载的题目文件
示例题目展示效果
calculator never overflow
配置文件
题目效果
配置解释
这是一道密码学题目,需要通过交互计算得到 flag
,不需要获取远程服务器 shell
,但是需要安装依赖库。
启用该题目;此题目的 python 依赖库有 sympy
;拷贝目录下全部文件;启动命令行为 python3
;参数为 ["-u", "./src.py"]
; 部署期不需要执行额外命令;输出四行内容;不提供文件下载。
tictactoe
配置文件
题目效果
配置解释
这是一道二进制题目,题目目标为获取远程服务器 shell
并读取同目录下的 flag
文件。
启用该题目;此题目无 python 依赖库;拷贝目录下全部文件;启动命令行为 ./tictactoe
;无额外参数; 部署期不需要执行额外命令;输出一行内容;提供文件下载,位于attachments
中相对路径:examples/tictactoe.zip
。
生成文件解释
tmp/run/*
每道题目的启动脚本,由每道题目的config.json
生成。
负责改变执行目录、输出相关信息和题目描述、题目附件等,并最终执行题目启动命令。tmp/start.sh
服务启动脚本,在 Dockerfile 最后被执行。如果启用文件服务则在此文件中会执行python3 -m http.server
tmp/index.html
默认主页,在直接请求文件服务时,会显示此主页,并列出全部题目及相关访问命令Dockerfile
控制容器的构建过程。
经过几次选择,在保证容器大小更小的情况下,使用python:slim
作为基础进行构建。
在构建过程中:- 首先进行换源、建立文件夹并拷贝运行时库至下载目录。
- 升级并安装
xinted
,更新pip
并安装题目所需依赖库。 - 复制所需文件至相应目录。包括运行时脚本及服务配置文件等。
- 进行权限更改,将题目文件复制进入容器内的随机文件夹中,并阻止用户的遍历,防止越过题目获取
flag
。 - 给予相关文件及目录的可执行权限。
xinted
服务相关配置。
对于每道题目进行服务配置,对每道题目的执行用户、端口、启动脚本、日志位置等进行配置。
默认进行一定的资源限制和连接数限制。docker-compose.yml
控制容器的执行。
配置所需暴露端口、进行资源限制和网络配置。
TODO
- [ ] 使用
chroot
提供更好的安全性 - [x] 使用
xterm
提供网络终端的访问,类似可见Hackergame nc 类题目的网页终端