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

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

Command Injection: Обход Blacklist WAF

Функция ping защищена blacklist-фильтром, блокирующим пробелы и ключевые слова. Фильтр обходится через ${IFS}, brace expansion и другие техники.

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Сложно+90 XP ~65 мин python
CWE-77 · A03:2021 Pro
Обложка: Command Injection: Обход Blacklist WAF Обложка: Command Injection: Обход Blacklist WAF
Задача
# Инъекция команд ОС: обход чёрного списка ## Сценарий **PingTool** — магазин инструментов для сетевой диагностики. В панели администратора есть форма проверки доступности хоста; осознавая опасность инъекции команд, разработчик прикрыл её фильтром на основе чёрного списка: пробел и несколько «опасных» слов блокируются. Владелец поручил вам проверить, выдерживает ли такая защита профессиональный аудит. ## Цель 1. Войдите в панель администратора и изучите логику фильтра: какие строки он блокирует и как именно сравнивает ввод. 2. Подтвердите, что рядовая инъекция команд фильтром останавливается. 3. Обойдите чёрный список и выполните на сервере произвольную команду. 4. Выведите значение флага из переменной окружения лаборатории. ## Теория Blacklist-фильтр отклоняет ввод, содержащий запрещённые подстроки, но не убирает оболочку из цепочки выполнения: если проверка пройдена, введённая строка по-прежнему становится частью системной команды. Оболочка же позволяет записать одну и ту же команду десятками способов — через синонимы утилит, подстановку переменных и альтернативные разделители, — и ни один список запрещённых написаний не покрывает их все. **Уязвимый паттерн:** ```python # если ввод не содержит запрещённых подстрок — он уходит в оболочку: output = os.popen(f"ping -c 3 {host}").read() ``` Фильтр к тому же сравнивает строки буквально: чувствителен к регистру и видит только точные написания. Всё, что записано иначе — другой регистр, другая запись того же разделителя, команда-синоним, — проходит мимо проверки и исполняется оболочкой с правами приложения. Класс проблемы — OS Command Injection (CWE-78; OWASP A03:2021) с ложным ощущением защищённости. ## Точка входа атаки `POST /admin/ping` — форма диагностики сети с полем `host`; доступна после входа администратором. * **Администратор:** `admin` / `lab-secret` * **Обычный пользователь:** `demo` / `demo`

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

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

Command Injection: Слепая инъекция команд (Timing-based)

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

+60 XP
Python Pro
Exploit Fix
Обложка лабы: Command Injection: eval() Injection Обложка лабы: Command Injection: eval() Injection
CMD Injection

Command Injection: eval() Injection

Калькулятор на e-commerce сайте вычисляет выражения через eval(), позволяя любому авторизованному пользователю выполнить произвольный Python-код.

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

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

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

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

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

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

+90 XP
Go Pro
Exploit Fix