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

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

Bypass Filters: Строгий WAF

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

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Средне+60 XP ~35 мин golang
CWE-77 · A03:2021 Pro
Обложка: Bypass Filters: Строгий WAF Обложка: Bypass Filters: Строгий WAF
Задача
# OS Command Injection: обход чёрного списка ## Сценарий Вы продолжаете аудит **ByteBazaar** — магазина электроники с админ-панелью. После прошлого инцидента с сетевой диагностикой команда добавила «WAF»: перед запуском пинга обработчик ищет во вводе пробел и несколько точных имён команд чтения файлов, а при совпадении показывает сообщение о блокировке. Проверки регистрозависимы и не нормализуют ввод. Архитектор уверен, что проблема закрыта. Но чёрные списки против внедрения команд — известный антипаттерн: после проверки строка всё так же уходит в системную оболочку, которая разбирает её по собственным правилам. ## Цель 1. Войдите в админ-панель и изучите фактические проверки инструмента диагностики: какие строки блокируются, в каком регистре, что декодируется до проверки. 2. Постройте полезную нагрузку, не содержащую ни одной запрещённой подстроки: обойдите запрет пробела и запрет нужных имён команд. 3. Прочитайте секретную переменную окружения процесса и получите флаг. ## Теория Чёрный список проигрывает по той же причине, что и в SQL-инъекциях: приложение ищет несколько строковых совпадений, а затем отдаёт весь ввод другому парсеру — оболочке. Синтаксис оболочки богат, и одно и то же намерение выражается множеством способов: * аргументы разделяются не только явным пробелом — есть служебная переменная-разделитель; * разделителем команд служит не только точка с запятой — подходит и перевод строки, попадающий во ввод при декодировании значения формы; * слово, отсутствующее в списке в точном виде, собирается из частей, например вставкой пустых кавычек. **Уязвимый паттерн (двойная ошибка):** ```go blacklist := []string{" ", "cat", "flag", "tail", "less", "more"} // при совпадении любой подстроки ввод блокируется, иначе — строка уходит в оболочку: cmd := exec.Command("sh", "-c", fmt.Sprintf("ping -c 3 %s", host)) ``` Список конечен, а синтаксис оболочки — нет: фильтрация опасного всегда проигрывает ограничению допустимого. ## Точка входа атаки `POST /admin/ping` — форма в админ-панели с полем `host` (защищена CSRF-токеном). * **Администратор:** `admin` / `LabAdmin2024!` * **Флаг:** секретная переменная окружения процесса лабы

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

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

Basic Command Injection: Сетевой пинг

Простая OS Command Injection через инструмент сетевой диагностики в админ-панели.

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

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

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

+90 XP
Go Pro
Exploit Fix
Обложка лабы: Blind Command Injection через сетевую диагностику Обложка лабы: Blind Command Injection через сетевую диагностику
CMD Injection

Blind Command Injection через сетевую диагностику

Обработчик сетевой диагностики передаёт пользовательский ввод в sh -c без фильтрации. Результат команды не отображается — используйте time-based технику для подтверждения инъекции.

+90 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