Перейти к содержимому

Поиск по платформе

Command Injection: Обход Blacklist-фильтра в Node.js

Функция ping в админ-панели защищена blacklist-фильтром, блокирующим пробелы и ключевые слова cat/flag/tail/less/more. Фильтр обходится через ;id, ;env и другие конструкции без пробелов.

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Сложно+90 XP ~65 мин nodejs
CWE-77 · A03:2021 Pro
Обложка: Command Injection: Обход Blacklist-фильтра в Node.js Обложка: Command Injection: Обход Blacklist-фильтра в Node.js
Задача
# Command Injection: обход blacklist-фильтра ## Сценарий Вы — пентестер на аудите **NightOps**, магазина снаряжения для специалистов по безопасности. В админ-панели есть функция диагностики сети: администратор вводит хост, сервер выполняет ping. Разработчики знают об опасности инъекции команд и поставили самописный WAF — чёрный список символов и слов. Заказчик просит проверить, устоит ли эта защита. ## Цель 1. Войдите в панель администратора и найдите функцию диагностики сети. 2. Изучите логику фильтра: какие символы и слова он блокирует. 3. Обойдите чёрный список и выполните произвольную команду на сервере. 4. Извлеките CTF-флаг из вывода выполненной команды. ## Теория Command Injection (CWE-78) возникает, когда пользовательский ввод попадает в системную команду, исполняемую через shell. Чёрный список здесь блокирует пробел и несколько «опасных» слов — но оболочка позволяет записать одну и ту же команду десятками эквивалентных способов, поэтому любой конечный список запрещённых строк обходится. **Уязвимый паттерн:** ```javascript const command = `ping -c 1 -W 1 ${host}`; const output = execSync(command, { timeout: 5000, encoding: 'utf8' }); ``` Ввод администратора вклеивается прямо в строку команды и исполняется оболочкой: всё, что фильтр пропустил, shell трактует по своим правилам. Разделители команд и формы подстановки, не попавшие в список, позволяют дописать к пингу вторую команду — без единого пробела и без заблокированных слов. ## Точка входа атаки `POST /admin/ping` — форма диагностики сети в админ-панели, поле `host`; доступна после входа администратором. * **Администратор:** `admin` / `SuperSecret` * **Обычный пользователь:** `demo` / `demo`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Code Injection: eval() в Node.js калькуляторе Обложка лабы: Code Injection: eval() в Node.js калькуляторе
CMD Injection

Code Injection: eval() в Node.js калькуляторе

Веб-калькулятор вычисляет пользовательские выражения через eval(). Это даёт атакующему полный RCE: доступ к process.env, child_process и любым модулям Node.js.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: Blind Command Injection: time-based инъекция без вывода в Node.js Обложка лабы: Blind Command Injection: time-based инъекция без вывода в Node.js
CMD Injection

Blind Command Injection: time-based инъекция без вывода в Node.js

API сетевой диагностики Express выполняет ping через child_process.exec, но вывод не возвращается клиенту. Уязвимость подтверждается через задержку ответа (timing-based blind injection).

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: Command Injection: Базовая инъекция команд в Node.js Обложка лабы: Command Injection: Базовая инъекция команд в Node.js
CMD Injection

Command Injection: Базовая инъекция команд в Node.js

Панель администратора содержит инструмент диагностики сети, передающий ввод напрямую в child_process.exec() без фильтрации.

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: Argument Injection в архиваторе файлов Обложка лабы: Argument Injection в архиваторе файлов
CMD Injection

Argument Injection в архиваторе файлов

Обработчик архивации файлов использует exec.Command без shell, но не фильтрует аргументы, начинающиеся с '-'. Атакующий может внедрить произвольные флаги команды tar.

+90 XP
Go Pro
Exploit Fix