OneTrueJASH/ubuntu-terminal-ctf
GitHub: OneTrueJASH/ubuntu-terminal-ctf
一个以 Docker 镜像形式分发的游戏化 Linux 终端学习平台,通过 CTF 挑战帮助初学者在模拟环境中掌握 Ubuntu 基础命令。
Stars: 0 | Forks: 0
# Ubuntu 终端 CTF
**10 个黑客主题挑战 + 一个 Boss 关卡**,打包为 Docker 镜像。旨在教初学者掌握基础 Ubuntu 终端备忘单上的所有命令——而无需他们安装 Ubuntu、配置 SSH,甚至不需要知道什么是 Docker。
每个挑战都有一个故事背景(查找后门、清除诱饵、搜索访问日志),并奖励他们一个 `FLAG{…}`,他们可以通过内置的 `ctf` 命令进行提交。
## 面向学生 —— 开始入门(约 5 分钟)
你需要:
- 一台 Mac 或 Linux 电脑
- [已安装 Docker](https://docs.docker.com/get-docker/)
打开终端(在 Mac 上:`Cmd+Space → 终端`;在 Linux 上:`Ctrl+Alt+T`)并运行:
### 1. 下载 CTF 镜像
```
curl -LO https://github.com/OneTrueJASH/ubuntu-terminal-ctf/releases/latest/download/ubuntu-terminal-ctf.tar.gz
```
### 2. 加载镜像并启动容器
```
gunzip -c ubuntu-terminal-ctf.tar.gz | docker load
docker run -d --name ctf -p 2222:22 ubuntu-terminal-ctf:latest
```
### 3. 通过 SSH 登录容器
```
ssh hacker@localhost -p 2222
```
出现提示时:
- 输入 `yes` 以接受指纹(仅第一次需要)
- 密码:**`hacker`**
### 4. 开始黑客挑战
一旦你成功登录:
```
ctf list # show all challenges
ctf start 01 # open the first challenge's instructions
ctf hint 01 # need a hint?
ctf submit 01 FLAG{...} # turn in a flag
```
依次完成 01 → 10,然后挑战 **关卡 11**(Boss)。
## 你将学到什么
| 挑战 | 主题 | 命令 |
|---|---|---|
| 01 | 导航与隐藏文件 | `cd`, `ls -la`, `cat` |
| 02 | 查找文件 | `find` |
| 03 | 搜索文本 | `grep` |
| 04 | 首行与末行 | `head`, `tail` |
| 05 | 管道与计数 | `grep`, `wc`, `\|` |
| 06 | 权限 | `chmod +x` |
| 07 | 移动与重命名 | `mkdir`, `mv` |
| 08 | 重定向 | `>`, `>>` |
| 09 | 进程管理 | `ps`, `kill` |
| 10 | 网络请求 | `curl` |
| 11 | **BOSS** — 组合劫掠 | `ls -la`, `grep -r`, `head` + `tail` + `\|`, 组装 |
## 当你完成后
停止容器:
```
docker stop ctf
```
稍后再次启动它(你的进度会被保存):
```
docker start ctf
ssh hacker@localhost -p 2222
```
清除一切并重新开始:
```
docker rm -f ctf
docker run -d --name ctf -p 2222:22 ubuntu-terminal-ctf:latest
```
## 面向讲师/运营者 —— 从源码构建
如果你想修改挑战或重新构建镜像:
```
git clone https://github.com/OneTrueJASH/ubuntu-terminal-ctf.git
cd ubuntu-terminal-ctf
./build.sh # builds the docker image
./run.sh # runs it locally on port 2222
./export.sh # rebuilds the .tar.gz for distribution
```
### 修改挑战
每个挑战都位于 `content/challenges/NN_topic/` 目录中:
- `README.md` — 学生看到的内容
- `build.sh`(可选)— 在镜像构建时生成合成内容(日志、大海捞针等数据集)
- 静态数据文件
添加新挑战:
1. 创建 `content/challenges/NN_yourname/README.md`
2. 将你的 flag 的 SHA-256 哈希值添加到 `content/flags.sha256` 中:`printf %s 'FLAG{your_flag}' | sha256sum`
3. 在 `content/hints.txt` 中添加一行提示
4. (可选)在 `content/checks/NN.sh` 处添加一个基于状态的检查器
5. 重新构建
`ctf list` 命令通过 globbing 自动发现挑战,因此框架会自动加载新挑战。
### 安全说明
这是一个**学习沙盒**,而不是经过安全加固的生产级镜像。`hacker` 用户的密码很容易被猜到(`hacker`);不要将端口 2222 暴露到互联网上。请在学生的笔记本电脑上运行,或者在局域网盒子上的防火墙后面运行。容器内没有可用的 `sudo` ——除非 Docker 本身配置错误,否则学生无法逃逸到宿主机。
### 文件结构
```
.
├── Dockerfile # ubuntu:22.04 base + sshd + CLI tooling
├── build.sh # docker build
├── run.sh # docker run (local testing)
├── export.sh # docker save | gzip → tarball
├── README.md # this file
├── TERMINAL_CHEATSHEET.md # student companion reference
├── LICENSE
└── content/ # everything baked into the image
├── start.sh # container entrypoint (starts sshd + bg services)
├── install.sh # one-shot setup during image build
├── motd # SSH login banner
├── bashrc-additions # PS1, aliases, login hook
├── welcome.md # /home/hacker/README.md inside the container
├── flags.sha256 # hashed flag answers (one line per challenge)
├── hints.txt # one-line hints per challenge
├── bin/ # ctf, submit, progress, launch_bg (decoy spawner)
├── checks/ # state-based validators (07, 08, 09)
├── challenges/ # one folder per challenge
└── web/ # files served on :8080 (challenge 10)
```
## 许可证
MIT — 请参阅 [LICENSE](./LICENSE)。为高中生而作。你可以拿走它、fork 它,发布你自己的版本。
标签:Cutter, Docker, 内存分配, 安全防御评估, 应用安全, 请求拦截