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

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

Command Injection: обход blacklist-фильтра WAF

Админ-панель содержит функцию ping с blacklist-фильтром (пробел, ;, cat, flag). Фильтр обходится через ${IFS}, $(), backticks и регистр имени переменной окружения.

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Средне+60 XP ~35 мин php
CWE-77 · A03:2021 Pro
Обложка: Command Injection: обход blacklist-фильтра WAF Обложка: Command Injection: обход blacklist-фильтра WAF
Задача
# Инъекция команд: обход чёрного списка фильтра ## Сценарий «Хостфорсаж» — провайдер бюджетного хостинга с интернет-магазином тарифов. После прошлогоднего аудита, нашедшего инъекцию команд в диагностике сети, сисадмин Толик Басов закрыл форму чёрным списком «опасных» символов и слов и рапортовал руководству о полном устранении. Руководитель службы безопасности не верит в защиту списком и попросил вас показать, что фильтр обходится, пока ввод по-прежнему доходит до оболочки. ## Цель 1. Войдите администратором, откройте инструмент проверки хоста и экспериментами определите, какие символы и слова блокирует фильтр. 2. Подберите запись дописываемой команды, эквивалентную исходной, но не содержащую запрещённых элементов, и подтвердите её исполнение. 3. Прочитайте значение флага из окружения процесса — строка флага появится на странице диагностики. ## Теория Чёрный список для оболочки неполон по построению: это язык, в котором одно действие записывается множеством способов. Пробел заменяется раскрытием переменной-разделителя полей или разворачиванием списка в фигурных скобках; последовательный запуск — не только точкой с запятой, но и конвейером либо переносом строки; имя переменной окружения нечувствительно к регистру, а имя утилиты можно разорвать кавычками — склейка произойдёт при исполнении. Фильтр сравнивает байты входной строки, оболочка интерпретирует синтаксис — эти две картины не совпадают. **Уязвимый паттерн:** ```php // VULNERABILITY: blacklist-фильтр — обходим через эквиваленты $blacklist = [' ', ';', 'cat', 'flag', 'tail', 'more', 'less']; // VULNERABILITY: после прохождения фильтра — прямая shell-конкатенация $output = shell_exec("ping -c 3 " . $host . " 2>&1"); ``` Механика атаки: сначала восстанавливается перечень блокируемого по реакции формы, затем выбирается эквивалентная запись — без пробелов и запрещённых слов, но с тем же эффектом. Введённое значение проходит байтовую проверку, а при исполнении оболочка раскрывает подстановки и запускает дописанную инструкцию с правами процесса приложения. ## Точка входа атаки `POST /admin/ping` — форма проверки хоста в админ-панели, поле `host`. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `lab-secret`

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

другие лабы по этой уязвимости
Обложка лабы: Command Injection: Базовая инъекция команд Обложка лабы: Command Injection: Базовая инъекция команд
CMD Injection

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

Панель администратора содержит функцию ping, передающую ввод напрямую в shell без фильтрации.

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: Code Injection через eval() в PHP-калькуляторе Обложка лабы: Code Injection через eval() в PHP-калькуляторе
CMD Injection

Code Injection через eval() в PHP-калькуляторе

Пользовательский ввод передаётся в eval(), позволяя выполнить произвольный PHP-код.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: Bypass Filters: Строгий WAF Обложка лабы: Bypass Filters: Строгий WAF
CMD Injection

Bypass Filters: Строгий WAF

Обход фильтрации пробелов и черного списка команд для RCE.

+60 XP
Go 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