返回更新列表
新发布Jul 27, 2026

cmdchamp v1.2.14

bash CLI 训练器 — 从 ls 到权限提升的 30 个级别

分享

cmdchamp

Bash CLI 训练器 — 从 ls 到权限提升,共 30 个关卡。

demo

每个问题都要求你输入一条真实的命令 — 获得即时反馈,然后继续。答错时它不只是给你看答案:它会展示你的命令输出与期望输出之间的差异,对于管道命令还会显示每个阶段的输出行数,让你看到它在哪一步出了问题。对于文本匹配的问题,它会指出你的答案最接近哪个可接受答案,以及你遗漏的具体标志。用繁琐的方式答对后,它会展示简洁方式 — cat f | grep -c X 会得到 Shorter: grep -c X f,不仅在字符数更少时触发,在管道阶段更少时也会触发,因为你节省的进程本身就是一课。许多问题针对沙箱中的真实文件运行,并且所有问题都接受多种有效语法(sort -usort | uniq)。当你需要参考时,按 Tab 可切换手册页 — 为答案运行的每条命令以及它所依赖的 shell 语法(x=$(cmd)${var:-default}${path##*/})都提供了精简页面,因此问题中的任何内容都不需要你去猜测。每次运行的顺序都是随机化的,所以你无法死记硬背。精通度会跟踪你的掌握情况:同一问题答对两次即可精通,答错则会降级,使其更快再次出现。连续答对 5 题会触发火焰模式 — 一个持续到你答错为止的横幅。

每个关卡都以 Boss 回合结束 — 无手册页,30 秒计时器,5 题中答对 4 题即可通过。失败后你可以立即重试 Boss 或返回练习。通关全部 30 关后,挑战模式解锁 — 终局试炼:将整个游戏中的工具组合成一条管道的多命令链。每题 30 秒,只有一条命,无手册页,你的最佳成绩就是纪录。每条链都根据其在沙箱中的真实输出进行评分,因此任何正确的管道都能通过。每次运行还会构建一个全新的随机化沙箱 — 不同的 IP、计数、主机和日志数据 — 并从 50+ 个链模板中抽取,带有轮换的分隔符、排序顺序和聚合方式,因此最繁忙的 IP、排名最高的 URL、最高的计数永远不会重复出现。首次运行包含一个简短的教程和一个分级测试,让你跳过已经掌握的关卡。

借助 bubblewrap,命令在真实的沙箱文件系统中运行,并根据其实际输出进行评分。内部的盒子是合成的 — 用户 sandbox、主机 sandbox、它自己的 /etc/passwd 和内核命令行 — 因此你输入的任何内容都不会将你的真实用户名、机器名或磁盘布局打印到屏幕上,并且 idwhoamihostname 在任何地方都返回相同的答案。这现在也延伸到了取证层级:第 28 关会给你一个真实的示例二进制文件(samples/target.bin),并评分你是否真正从中提取出了 flag、外传域名和泄露的 API 密钥 — 对真实 JSON 的 jq 问题也是如此。终局试炼将这些提取组合成限时链。第 24-25 关现在也真实运行:一个小型 HTTP 服务在沙箱自己的网络命名空间内的 localhost:8080 上启动,同时你的答案运行,有三个端口在监听,因此 curl、通过 HTTP 的 jqssnmap 会根据它们实际返回的内容进行评分。你的机器不会暴露任何内容 — 命名空间仍然阻止所有出站连接,并且该端口从外部不可见。只有那些真正无法在沙箱中运行的工具 — wifi/RF、实时捕获和大内存/磁盘取证 — 才保持文本匹配。搜索关卡(16-17)同时接受 rg/fdgrep/find 语法。内置 Vi 行编辑 — 移动、操作符、计数、寄存器、撤销和可视模式(v/Vo 交换端点),? 查看完整映射。

安装

Arch(AUR):

paru -S cmdchamp   # 或:yay -S cmdchamp

任意位置(单文件):

mkdir -p ~/.local/bin && curl -sL https://raw.githubusercontent.com/mellen9999/cmdchamp/main/cmdchamp -o ~/.local/bin/cmdchamp && chmod +x ~/.local/bin/cmdchamp

如有需要,将 ~/.local/bin 添加到 PATH:echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

或克隆:

git clone https://github.com/mellen9999/cmdchamp.git
cd cmdchamp && make install

要求: bash 4.4+、coreutils、awk

macOS: 自带 bash 3.2 — 请先安装 bash 4.4+:brew install bash

可选: bubblewrapbwrap)用于沙箱模式(仅限 Linux)— 大多数桌面发行版都包含它。没有它,答案仅进行文本匹配

可选: python3 — 为沙箱的 localhost HTTP 服务提供服务,因此第 24-25 关的 live api / live box 问题会根据真实输出进行评分。没有它,这些问题会回退到文本匹配;其他一切不变

无障碍: 支持 NO_COLORTERM=dumb。布局适应 COLUMNS / tput cols。精通度条同时带有颜色和 / ~ / x 符号 — 无颜色也可读。

终端: 可在真实的串行终端上运行,而不仅仅是模拟器。cmdchamp 会探测终端实际能显示的内容,并从三种渲染层级中选择一种 — Unicode、DEC ACS 线条绘制或纯 ASCII — 因此框架在 VT100/VT220/VT320/VT420 或 Wyse 上也能保持完整。在单色屏幕上,颜色区分会重新编码为粗体/反显。使用 CMDCHAMP_ASCII=1CMDCHAMP_UNICODE=1 强制指定层级。./test_terminals.sh 可验证。

用法

cmdchamp                # 启动游戏菜单
cmdchamp explain 'CMD'  # 解释任何命令 - 每个标志,以及周围的 shell 语法
cmdchamp autopsy        # 读取你自己的 shell 历史并将其映射到课程上
cmdchamp daily          # 玩今天的每日试炼(每个人运行相同)
cmdchamp daily 2026-02-16   # 重放特定某天的运行(与朋友比赛)
cmdchamp play           # 自由练习沙箱:输入任何命令,查看其运行
cmdchamp --no-sandbox   # 禁用沙箱(仅文本匹配)
cmdchamp reset          # 清除所有进度
cmdchamp test           # 运行自测
cmdchamp version        # 打印版本
cmdchamp help           # 显示帮助

cmdchamp explain(或 cmdchamp x)是 Tab 面板的独立工具版本:约 300 条命令的手写页面以及周围的 shell 语法,离线、无网络、无依赖。它接受带引号的命令或裸词,当两者都没有时读取 stdin — 因此 history | tail -1 | cmdchamp x 会解释你刚刚运行的命令。认识该命令时退出码为 0,不认识时为 1。

cmdchamp autopsy 读取你的 shell 历史 — $HISTFILE,然后是 ~/.bash_history,然后是 ~/.zsh_history,或你指定的文件,或 - 表示 stdin — 并将其映射到 30 个关卡:你实际会使用什么、值得改掉的习惯(每个旁边都有你自己的计数)(catgrepfindxargs 但没有 -print0chmod 777curl | sh)、游戏教授的命令中你实际运行过多少条,以及最早出现空白的关卡。它只打印模式和计数 — 绝不打印你历史中的任何一行、片段或"示例",因为历史中保存着作为参数输入的令牌和密码。没有任何内容离开你的机器,也没有任何标志可以让它回显你的历史。

菜单包含继续、新游戏、场景、挑战、每日、练习、统计、选项、帮助和退出,使用固定热键 1-90。未解锁的行会灰显而不是隐藏,因此标签旁边的数字在你推进时永远不会移动。j/k 或方向键移动,Enter 选择,q(或 Esc)退出。练习场位于场景列表的顶部 — 它是唯一永远不会被锁定的条目。帮助是参考手册,共三页:每个按键、每种模式的花费和解锁条件、评分和衰减如何工作、统计标记的含义、答案如何被评判,以及每个环境变量。首次运行的教程在最后一页上仍然只需一次按键即可访问。

每日(ROOT 之后)是一个以日期为种子的试炼运行 — 种子同时驱动链和随机化沙箱,因此每个人在当天都会获得字节级相同的问题数据,一次计分尝试、连续天数记录,以及一个可复制的分数供你分享。练习可演练任何已到达的关卡(显示其精通度百分比),带提示且无计时器,不会影响你的主进度。练习场是一个被攻破的盒子,你用真实的 shell 将其拆解:有人入侵、使用,然后试图清理,每一步都在磁盘上留下了痕迹。命令在沙箱中真实运行,且不进行评分。树中埋藏了最多 8 个 flag{...} 令牌(随着你通关关卡会解锁更多),map 按阶段展示入侵过程并标记你所在的位置,learn 是背后的 8 模块安全课程,hint 每次询问都会深入一层,Tab 解释你输入的内容。标题始终标明你正在搜寻的阶段及其留下的文件,因此你永远不会面对一个不知道把命令指向何处的提示符 — 如果六条命令过去仍一无所获,第一个提示会主动出现。

统计

两页。第一页是三十个关卡进度条 — 你走了多远。第二页是将相同的精通度投射到命令上,最弱的在前,因为关卡作为练习的粒度太粗了:仅第 13 关就教授 cpmvlnchmod、ACL、dutardiff,一条红色进度条无法说明你一直遗漏的是哪一个。只计算你已到达的关卡,网格限制为一屏 — 需要滚动的工作清单不是工作清单。在其下方,三条最弱的命令会标注教授它们的关卡,因此页面在练习开始处结束 — 关卡名称是主题性的,如果你必须猜测 xargs 0/4 位于批处理操作中,那它就是一个死胡同。

关卡

#名称重点
基础
1第一步pwd, ls, echo, cd, mkdir
2文件基础cp, mv
3保存你的工作>, >>, tee
4读取文件cat, head, tail, less
5基本管道pipes, grep, wc, sort, uniq
6输入与 Here-Strings<, <<<, tr, cut, rev, bc
7错误处理2>, 2>&1, &>, /dev/null
8逻辑门&&, ||
9变量$VAR, 赋值, 展开
10特殊变量$$, $?, $!, $#, $@, $0
11作业控制bg, fg, jobs, &, Ctrl+Z, nice, ulimit
12测试条件-f, -d, -z, -n, -eq, -lt
13核心文件工具cp, mv, ln, chmod, ACLs, du, tar, diff
14系统管理ping, df, free, ss, systemctl, ip, sysctl, lsblk, getent
15多路复用器tmux: 会话、窗口、窗格
16文本搜索grep, ripgrep, regex
17文件查找find, fd, 按名称/大小/时间/类型
18数据处理sort, uniq, cut, awk, tr, comm, join, numfmt
19字符串与数组参数展开, 数组
20控制流if/else, 循环, case, 函数
21批处理操作find -exec, xargs, sed -i, crontab
22高级正则lookahead, sed, awk
DevOps 与安全
23Git分支、远程、变基、暂存、bisect
24网络工具tshark, curl, jq, ssh 隧道, openssl, SMB, 一个实时 HTTP 端点
25网络扫描nmap, 服务检测, 脚本, 一个实时目标
26WiFi 与 RFaircrack-ng, netcat, tcpdump, 无线侦察
27哈希破解hashcat, john, hydra, 编码
28取证strings, readelf, binwalk, volatility, exiftool
29权限提升SUID, capabilities, GTFOBins, 枚举
30ROOT紧急恢复, chroot, 离线生存

场景

多步骤沙箱挑战 — 状态在步骤之间持续存在。通关解锁 Boss 后可从场景菜单访问,该菜单按解锁顺序在练习场下方列出它们。下面的数字是场景 ID,永远不会改变。

#名称解锁条件步骤
1权限锁定L13 Boss6
2归档与解压L13 Boss6
3大海捞针L16 Boss7
4混乱的 CSVL18 Boss4
5事件L18 Boss5
6失败的部署L21 Boss7
7日志紧急情况L21 Boss5
8配置手术L21 Boss5
9Git 救援L23 Boss6
10批处理重构L21 Boss6
11取证清扫L22 Boss6
12通配符备份L29 Boss4
13PATH 劫持L29 Boss4

场景 12–13 是漏洞利用盒子:你植入真实的 tar-checkpoint 注入 / PATH 劫持,并根据其产生的工件进行评分(出现一个文件、一个秘密被外传)。漏洞利用的效果在沙箱中真实运行;权限边界是模拟的 — 没有任何东西以真实 root 身份运行。

分级测试

首次运行教程之后,系统会询问你是否要参加分级测试以跳过前面的关卡。接受后,每个关卡运行 2 个问题,每题 30 秒,无手册页。答错一个,那就是你的起始关卡。

彩蛋

8 个隐藏成就。统计屏幕会显示你已找到多少个。

控制

按键操作
Enter提交答案
Tab切换手册页
Ctrl+d退出(会话摘要)
EscVi 普通模式
?所有按键绑定(普通模式)

数据

进度保存到 ${XDG_DATA_HOME:-~/.local/share}/cmdchamp/

许可证

MIT

分类