Назад к обновлениям
New releaseJul 27, 2026

cmdchamp v1.2.14

тренажёр bash CLI — 30 уровней от ls до повышения привилегий

Поделиться

cmdchamp

Bash CLI-тренажёр — 30 уровней от ls до повышения привилегий.

demo

Каждый вопрос просит вас ввести реальную команду — мгновенная обратная связь, двигайтесь дальше. Промахнулись — и вам не просто показывают ответ: показывают, что напечатала ВАША команда, в сравнении с ожидаемым результатом, а для конвейера — количество строк на каждом этапе, чтобы вы видели, где именно он «умер». Для вопросов с текстовым сравнением указывается, к какому принятому ответу ваш был ближе всего, и какой именно флаг вы упустили. Ответили правильно длинным путём — и вам покажут короткий: cat f | grep -c X заслуживает подсказку Shorter: grep -c X f, которая срабатывает и на меньшее число этапов конвейера, и на меньшее число символов, потому что урок — в сэкономленных процессах. Многие вопросы выполняются на реальных файлах в песочнице, и все принимают несколько корректных синтаксисов (sort -u или sort | uniq). Tab переключает man-страницу, когда нужна справка, — сокращённые страницы для каждой команды, которую выполняет ответ, плюс синтаксис shell, на который он опирается (x=$(cmd), ${var:-default}, ${path##*/}), так что в вопросе не остаётся ничего, что нужно угадывать. Порядок рандомизируется при каждом запуске, чтобы вы не могли его заучить. Мастерство отслеживает, что вы знаете: ответьте на вопрос правильно дважды, чтобы освоить его, промахнётесь — и он понижается, чтобы вернуться раньше. Серия из 5 правильных ответов запускает fire mode — баннер, который действует, пока вы не промахнетесь.

Каждый уровень завершается босс-раундом — без man-страниц, таймер 30 секунд, 4/5 для прохода. Провалили — можно сразу повторить босса или вернуться к практике. Пройдите все 30, и откроется challenge mode — финальное испытание: многоступенчатые цепочки команд, которые собирают инструменты со всей игры в один конвейер. 30 секунд на каждую, одна жизнь, без man-страниц, ваш лучший результат — рекорд. Каждая цепочка оценивается по реальному выводу в песочнице, так что любой корректный конвейер проходит. Каждый запуск также создаёт новую рандомизированную песочницу — другие IP, счётчики, хосты и данные логов — и выбирает из 50+ шаблонов цепочек с меняющимися разделителями, порядком сортировки и агрегатами, так что самый загруженный IP, топовый URL, наибольший счётчик никогда не повторяются дважды. Первый запуск включает короткий обучающий курс и тест на определение уровня, который позволяет пропустить уже знакомые уровни.

С bubblewrap команды выполняются в реальной изолированной файловой системе и оцениваются по фактическому выводу. Внутренняя «коробка» синтетическая — пользователь sandbox, хост sandbox, собственные /etc/passwd и командная строка ядра — так что ничто из введённого вами не выведет на экран ваше реальное имя пользователя, имя машины или структуру диска, а id, whoami и hostname отвечают одинаково везде. Это распространяется и на уровень криминалистики: уровень 28 выдаёт вам реальный образец бинарника (samples/target.bin) и оценивает, действительно ли вы извлекли из него флаг, домен эксфильтрации и утёкший API-ключ — то же самое для вопросов jq на реальном JSON. Финальное испытание собирает эти извлечения в цепочки с таймером. Уровни 24–25 теперь тоже выполняются по-настоящему: внутри собственного сетевого пространства имён песочницы запускается небольшой HTTP-сервис на localhost:8080, пока выполняется ваш ответ, с тремя слушающими портами, так что curl, jq по HTTP, ss и nmap оцениваются по тому, что они реально вернули. Ничего не открывается вашей машине — пространство имён по-прежнему блокирует все исходящие соединения, а порт невидим снаружи. Только инструменты, которые физически не могут работать в песочнице — wifi/RF, захват трафика в реальном времени и крупномасштабная криминалистика памяти/диска — остаются с текстовым сравнением. Уровни поиска (16–17) принимают и синтаксис rg/fd, и grep/find. Встроено редактирование строк в стиле Vi — движения, операторы, счётчики, регистры, отмена и визуальный режим (v/V, o для смены конца), с ? для полной карты клавиш.

Установка

Arch (AUR):

paru -S cmdchamp   # or: 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

Опционально: bubblewrap (bwrap) для режима песочницы (только Linux) — большинство дистрибутивов для десктопа включают его. Без него ответы сравниваются только по тексту

Опционально: python3 — обслуживает HTTP-сервис localhost песочницы, поэтому вопросы live api / live box на уровнях 24–25 оцениваются по реальному выводу. Без него эти вопросы возвращаются к текстовому сравнению; больше ничего не меняется

Доступность: Учитывает NO_COLOR и TERM=dumb. Раскладка адаптируется к COLUMNS / tput cols. Полосы мастерства несут и цвет, и символ / ~ / x — читаемы и без цвета.

Терминалы: Работает на настоящих последовательных терминалах, а не только эмуляторах. cmdchamp проверяет, что терминал реально может отобразить, и выбирает один из трёх уровней отрисовки — Unicode, DEC ACS псевдографика или чистый ASCII, — так что рамки остаются целыми на VT100/VT220/VT320/VT420 или Wyse. На монохромном экране цветовые различия перекодируются в жирный/инверсный. Принудительно задайте уровень через CMDCHAMP_ASCII=1 или CMDCHAMP_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 уровнями: к чему вы реально тянетесь, привычки, от которых стоит отказаться, с вашим собственным счётчиком рядом с каждой (cat в grep, find в xargs без -print0, chmod 777, curl | sh), сколько команд, которым учит игра, вы когда-либо запускали, и самый ранний уровень с пробелом. Он выводит только паттерны и счётчики — никогда строку, фрагмент или «пример» из вашей истории, потому что в истории хранятся токены и пароли, введённые как аргументы. Ничего не покидает машину, и нет флага, чтобы заставить его выводить вашу историю.

Меню содержит продолжение, новую игру, сценарии, испытание, ежедневный забег, практику, статистику, настройки, справку и выход на фиксированных горячих клавишах 19 и 0. Строка, которую вы ещё не разблокировали, затемняется, а не скрывается, поэтому цифра рядом с меткой никогда не сдвигается по мере прогресса. j/k или стрелки перемещают курсор, Enter выбирает, а q (или Esc) выходит. Площадка находится вверху списка Сценариев — это единственная запись, которая никогда не блокируется. Справка — это справочник на трёх страницах: все клавиши, что стоит и открывается на каждом режиме, как работают подсчёт очков и затухание, что означают отметки в статистике, как оценивается ответ и каждая переменная окружения. Обучающий курс первого запуска по-прежнему в одном нажатии клавиши на последней странице.

Ежедневный забег (после ROOT) — это забег с посевом по дате: посев управляет и цепочками, и рандомизированной песочницей, так что все и везде получают байт-идентичные вопросы и данные в этот день, одна засчитанная попытка, серия подряд идущих дней и копируемый счёт, которым можно поделиться. Практика отрабатывает любой достигнутый уровень (показан с его % мастерства) с подсказками и без таймера, не затрагивая основной прогресс. Площадка — это скомпрометированная машина, которую вы разбираете настоящим shell: кто-то проник, использовал её, затем попытался прибраться, и каждое действие оставило след на диске. Команды выполняются по-настоящему в песочнице, и ничего не оценивается. До 8 токенов flag{...} спрятаны по дереву (больше открывается по мере прохождения уровней), map раскладывает взлом по фазам и отмечает, где вы находитесь, learn — это учебная программа по безопасности из 8 модулей за этим, hint углубляется на уровень с каждым запросом, а Tab объясняет, что вы ввели. Заголовок всегда называет фазу, которую вы ищете, и файлы, которые она оставила, так что вы никогда не смотрите на приглашение, не зная, куда направить команду, — а если шесть команд прошли без находки, первая подсказка приходит сама.

Статистика

Две страницы. Первая — тридцать полос уровней: как далеко вы продвинулись. Вторая — то же мастерство, спроецированное на команды, от самых слабых, потому что уровень — слишком крупная единица для отработки: один уровень 13 обучает cp, mv, ln, chmod, ACL, du, tar и diff, и одна красная полоса не скажет, какие из них вы продолжаете упускать. Учитываются только достигнутые уровни, а сетка ограничена одним экраном — список задач, который нужно прокручивать, не список задач. Под ней названы три самые слабые команды с уровнем, который обучает каждой, так что страница заканчивается там, где начинается Практика, — названия уровней тематические, и xargs 0/4 — тупик, если приходится угадывать, что он живёт в Batch Ops.

Уровни

#НазваниеФокус
Основы
1Первые шагиpwd, ls, echo, cd, mkdir
2Основы файловcp, mv
3Сохраните работу>, >>, tee
4Чтение файловcat, head, tail, less
5Базовые конвейерыpipes, grep, wc, sort, uniq
6Ввод и here-строки<, <<<, 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, ACL, 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Продвинутые regexlookahead, sed, awk
DevOps и безопасность
23Gitветки, удалённые репозитории, rebase, stash, 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, выживание офлайн

Сценарии

Многошаговые задания в песочнице — состояние сохраняется между шагами. Доступны из меню Сценарии после прохождения босса-разблокировки, который перечисляет их в порядке открытия под площадкой. Числа ниже — это id сценариев, которые никогда не меняются.

#НазваниеОткрывается послеШагов
1Блокировка правбосс L136
2Архив и извлечениебосс L136
3Найди иголкубосс L167
4Грязный CSVбосс L184
5Инцидентбосс L185
6Сломанный деплойбосс L217
7Авария в логахбосс L215
8Хирургия конфиговбосс L215
9Спасение Gitбосс L236
10Пакетный рефакторингбосс L216
11Криминалистическая зачисткабосс L226
12Резервное копирование с wildcardбосс L294
13Перехват PATHбосс L294

Сценарии 12–13 — это эксплойт-боксы: вы внедряете реальную tar-checkpoint инъекцию / перехват PATH и оцениваетесь по артефакту, который она создаёт (появляется файл, эксфильтрируется секрет). Эффект эксплойта выполняется по-настоящему в песочнице; граница привилегий симулируется — ничего не выполняется как настоящий root.

Тест на определение уровня

После обучающего курса первого запуска вас спрашивают, хотите ли вы пройти тест на определение уровня, чтобы перепрыгнуть вперёд. Согласитесь — и он задаёт 2 вопроса на уровень, по 30 секунд на каждый, без man-страниц. Один промах — и это ваш стартовый уровень.

Пасхальные яйца

8 скрытых достижений. Экран статистики показывает, сколько вы нашли.

Управление

КлавишаДействие
EnterОтправить ответ
TabПереключить man-страницу
Ctrl+dВыход (сводка сессии)
EscVi обычный режим
?Все привязки клавиш (обычный режим)

Данные

Прогресс сохраняется в ${XDG_DATA_HOME:-~/.local/share}/cmdchamp/.

Лицензия

MIT

Категории