Авторские курсы Михаила Тарасова

WAF на коленях: как громить защиту веб-приложений с минимальными танцами

WAF на коленях: как громить защиту веб-приложений с минимальными танцами

Вступление — зачем нам этот WAF вообще?

WAF (Web Application Firewall) — как тюремная решётка у веб-приложения. Он фильтрует запросы, блокирует инъекции, XSS и всякую рухлядь, чтобы ты не ломанулся к базе или шеллу. Но, это не значит, что он несокрушим. WAF — это как лабиринт с ловушками, и нам нужно прокрасться, чтобы отжать juicy данные.

Сегодня мы разберём реальные техники обхода трёх популярнейших WAF: ModSecurity, Cloudflare, AWS WAF. Будет много обфускаций, HTTP сплитов и грязных приёмов.

1. Точка входа — как искать дырки с WAF на подходе?

Прежде чем лезть, смотри, что ты имеешь:

  • URL и параметры — куда лезть? GET, POST, headers, cookies, JSON-поля?

  • Попытайся прокинуть payload’ы из базовых списков (SQLi, XSS), но отслеживай 403/406 ошибки.

  • Логи WAF могут не показывать всего, но по ответу сервера можно понять, где фильтр срабатывает.

Пример быстрой проверки:

Если получаем 403 Forbidden или бан — значит WAF не слабака.

2. Базовые фишки обхода WAF — грязь и обфускация

A. HTTP Сплитты и кодировки

WAF может фильтровать простые ' OR '1'='1, но часто не умеет, когда ты:

  • инъектишь через URL encoding (например, %27 вместо ')

  • используешь double URL encoding: %2527 вместо %27

  • внедряешь HTTP request smuggling через нестандартные заголовки.

Пример:

Cloudflare, например, порой не успевает раскодировать двойной энкодинг.

B. Разделение payload

Инъекция дробится на несколько частей, которые WAF не свяжет:

Комментарии, неразрывные пробелы, табы — WAF часто тупит на этом.

C. Обфускация через Unicode и UTF-8

Можешь подменять обычные символы на их юникод-аналоги — WAF не всегда переваривает такие фишки.

3. Payload’ы-шахматы — реальные коды, которые работают

SQLi на ModSecurity

Обход с комментами:

Пример в curl:

XSS под Cloudflare

Cloudflare блокирует классические <script>, но вот payload с обфускацией:

Плюс вариант с encoded entities:

AWS WAF

AWS WAF часто блокирует инъекции с ключевыми словами, но иногда пропускает через JSON поля с base64.

Payload с base64 инъекцией:

Сервер декодирует, WAF не понимает.

4. Многоуровневый инъекшен — цепная реакция

Делаешь:

  1. Пробиваешь XSS или SQLi.

  2. Используешь XSS для CSRF атаки.

  3. Через CSRF запускаешь RCE или меняешь параметры.

Например, цепочка:

Потом через session_token делаешь панель управления.

5. Кейсовая разборка — «накатил, отжег, забыл»

Был сайт под AWS WAF, который блокировал все прямые SQLi с черными словами UNION, ' OR '. Вот что я сделал:

  • Внедрил payload с разделением слов через комментарии и двойным URL-кодированием:

Использовал заголовок X-Original-URL для обхода:

AWS WAF воспринял это как разные запросы и забыл заблокировать.

Результат: получил вывод БД, залив шелл через SQLi + LOAD_FILE().

Итог — WAF не вечен

  • Обязательно тестируй разные кодировки, разделяй payload.

  • Лови баги в самом WAF (Request smuggling, X-Original-URL).

  • Ищи нестандартные поля (headers, cookies, json).

  • Помни: WAF — это не защита от умного пентестера, а просто фильтр для лохов.

Мои курсы