Обход файерволов веб приложений 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.
Кстати, смотрите статьи:
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 1)
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 2)
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 3)
В подавляющем большинстве случаев исходный сервер (который пытаются защитить с помощью внешнего сервиса WAF) по-прежнему настроен принимать и обрабатывать запросы от кого угодно (а не только от WAF, который выступает в роли прокси). Поэтому можно полностью нивелировать попытку защититься сервисом WAF если всего лишь знать настоящий IP веб-сайта.
Поэтому «обход» Cloudflare, а также Incapsula, SUCURI и других сводится к поиску настоящего IP сайта. Эта тема (поиск настоящего IP сайта) уже несколько раз обсуждалась на сайте HackWare.ru, поскольку настоящий IP нужен и для других целей: сбор информации, исследование периметра, поиск других сайтов на этом же сервере и т. д. Кстати, по этим вопросам смотрите статьи:
- Сбор информации о владельце сайта. Поиск сайтов одного лица
- Как узнать настоящий IP сайта в Cloudflare
- Как узнать, сайт за CloudFlare или нет
- Препарирование скамерского сайта (КЕЙС)
- Поиск сетки вредоносных сайтов (кейс)
- Поиск человека по 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'а.
Связанные статьи:
- Исследование периметра партнёрки по установке Adware (КЕЙС) (56.7%)
- Сбор информации о владельце сайта. Поиск сайтов одного лица (52%)
- Веб-архивы Интернета: как искать удалённую информацию и восстанавливать сайты (51.8%)
- FinalRecon: простой и быстрый инструмент для сбора информации о сайте, работает и на Windows (51.8%)
- Как узнать, сайт за CloudFlare или нет (51.8%)
- Как обфусцировать JavaScript код (RANDOM - 22.8%)