Обход файерволов веб приложений Cloudflare, Incapsula, SUCURI


Файерволы веб приложений (Web Application Firewall — WAF) — это надстройки (модули) веб-серверов (как например mod_security для Apache), либо сервисы (как например Cloudflare, Incapsula, SUCURI), которые до того, как передать полученный от пользователя запрос веб-серверу, анализируют его и, в случае если он может представлять опасность, блокируют, либо модифицируют его.

Файерволы приложений дополнительно могут выполнять функции выявления и предотвращения вторжений.

Если WAF является модулем веб-сервера, то данное программное обеспечение работает на том же самом сервере (компьютере). Если же WAF является отдельным сервисом, то схема работы следующая:

1) Веб-сайт, который нужно защитить, работает на том же самом сервере без защиты.

2) В DNS записи A в качестве IP данного сайта указываются IP адреса файервола веб приложений, то есть сервиса Cloudflare, Incapsula, SUCURI или какого-то другого

3). После этого при обращении к защищаемому веб-сайту все запросы уже направляются в сервис Cloudflare, Incapsula, SUCURI или аналога

4) Данный сервис получает запрос, обрабатывает его и делает запрос на исходный сервер (который, напомню, даже не защищён), получает с него нужную страницу/данные и перенаправляет запросившему пользователю.

Для нормального посетителя, подключающегося к веб-сайту, нет никакой разницы, всё происходит незаметно. Но для целей аудита веб-сайта, файловые файерволы могут стать проблемами. WAF блокируют вредоносные запросы и защищают от (D)DoS атак. При этом никакие запросы от скриптов (ботов) могут вообще не приниматься — отфильтровываться на начальном этапе, либо на этапе прохождения капчи, что делает невозможным использованиео таких инструментов, как WPScan, sqlmap и других программ для поиска уязвимости и оценки безопасности веб-сайта. Если в случае встроенных в сервер WAF (к примеру, mod_security) возможен только один вариант обхода — конструкция таких запросов, которые обманывают правила, основанные на паттернах (образцах), то для WAF-сервисов возможно целых два варианта:

1) Такой же, как и для обычных WAF, - то есть попытка перехитрить правила;

2) Отправка запросов напрямую к серверу, минуя WAF.

Кстати, смотрите статьи:

В подавляющем большинстве случаев исходный сервер (который пытаются защитить с помощью внешнего сервиса WAF) по-прежнему настроен принимать и обрабатывать запросы от кого угодно (а не только от WAF, который выступает в роли прокси). Поэтому можно полностью нивелировать попытку защититься сервисом WAF если всего лишь знать настоящий IP веб-сайта.

Поэтому «обход» Cloudflare, а также Incapsula, SUCURI и других сводится к поиску настоящего IP сайта. Эта тема (поиск настоящего IP сайта) уже несколько раз обсуждалась на сайте HackWare.ru, поскольку настоящий IP нужен и для других целей: сбор информации, исследование периметра, поиск других сайтов на этом же сервере и т. д. Кстати, по этим вопросам смотрите статьи:

Этим задача посвящены специализированные инструменты, такие как CloudFail. В указанных статьях я часто применял такой метод: посмотреть на SecurityTrails историю DNS записей для домена и проверял (с помощью cURL и указания имени хоста), какой из найденных IP адресов ответит должным образом.

Эта техника, а также некоторые другие, автоматизированы в скрипте Bypass firewalls by abusing DNS history (это такое название у программы).

В работе используются следующие сервисы:

Этот скрипт пытается узнать настоящий IP разными методами:


  • анализ истории DNS
  • поиск субдоменов и анализ IP адресов субдоменов

Ко всем найденным IP адресам делаются запросы для проверки.

Установка Bypass firewalls by abusing DNS history в Kali Linux:


sudo apt install jq
git clone https://github.com/vincentcox/bypass-firewalls-by-DNS-history
cd bypass-firewalls-by-DNS-history/
bash bypass-firewalls-by-DNS-history.sh --help

Установка Bypass firewalls by abusing DNS history в BlackArch:

sudo pacman -S bypass-firewall-dns-history jq

Использование программы очень простое — всего одна обязательная опция -d после которой нужно указать анализируемый домен:

bypass-firewall-dns-history -d anti-malware.ru

В результате для домена anti-malware.ru найден настоящий IP адрес сервера:

Столбец [IP] — этот тот самый адрес, к которому можно обратиться напрямую, минуя WAF. [Confidence] — это степень уверенности, что данные адрес является верным (может быть несколько вариантов IP с разной степенью уверенности). [Organisation] — кому принадлежит найденный IP (какой организации).

Программа соберёт список IP и будет проверять их только для основного домена. Если же вы хотите проверить, подходят ли найденные IP для обнаруженных субдоменов, то используйте опцию -a:

bypass-firewall-dns-history -d seo-fast.ru -a

Чтобы сохранить результаты в файл, используйте опцию -o, после которой нужно указать имя файла, например:

bypass-firewall-dns-history -d seo-fast.ru -a -o found_ip.txt

В файл будут сохранены только найденные IP.

Для более сложных случаев, когда программа не смогла с наскока определить настоящий IP адрес, ей можно помочь. Дело в том, что хотя скрипт bypass-firewall-dns-history и использует быстрые сервисы поиска субдоменов, они не всегда показывают самые полные результаты. Вы можете собрать свой собственный список субдоменов с помощью других програм и сервисов. К примеру с помощью Amass:

amass enum -d seo-fast.ru -o subdm.txt

Найденные субдомены будут сохранены в файл subdm.txt. Теперь используя опцию -l можно указать путь до файла с дополнительными поддоменами, которые также будут использоваться для поиска настоящего IP сайта:

bypass-firewall-dns-history -d seo-fast.ru -l subdm.txt

В данном случае настоящий IP был определён даже и без поиска субдоменов внешней программой — это просто пример алгоритма действия для сложных случаев.

Как использовать найденный IP (последующая эксплуатация)

Когда вы нашли способ обойти файервол веб-приложения (узнали настоящий IP сайта), то у вас есть две опции:

Первый вариант: отредактируйте ваш файл host — в результате любые запросы из вашей ОС от любой программы будут отправляться напрямую к сайту, минуя файервол. В системах Linux/Mac это файл /etc/hosts, а в Windows это файл c:\Windows\System32\Drivers\etc\hosts. Добавьте в него примерно такую запись:


80.40.10.22 vincentcox.com

Второй вариант: настройка Burp Suite. Выполните настройку по аналогии со скриншотом:

С этого момента ваш HTTP трафик пойдёт напрямую к оригинальному веб-серверу. Теперь вы можете выполнять тест на проникновение обычным образом, ваши запросы не будут блокироваться в WAF.

Как защититься от этого скрипта?

  • Если вы используете файервол веб приложений, убедитесь, что вы принимаете только трафик, проходящий через файервол. Отклоняйте весь трафик, пришедший напрямую из интернета. К примеру, Cloudflare имеет список IP, которые вы можете добавить в белый список iptables или UFW. А весь другой трафик блокируйте.
  • В первую очередь убедитесь, что нет старых серверов, которые доступны через глобальную сеть и по-прежнему принимают подключения.

Онлайн поиск настоящего IP сайта за Cloudflare, Incapsula, SUCURI и другими WAF

В этой статье я показал как пользоваться довольно простой программой Bypass firewalls by abusing DNS history. Также на SuIP.biz добавлен сервис на основе этого скрипта: https://suip.biz/ru/?act=bypass-waf

Вы всегда можете им воспользоваться если под рукой нет Linux'а.


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *