Los WAFs o Web Application Firewalls se han convertido en la solución de seguridad elegida de varias empresas hoy en día. Algunas empresas incluso, ignoran la verdadera vulnerabilidad y dependen únicamente del firewall para protección. Desaforturnadamente, la mayoría de los firewalls pueden ser evadidos. En este post explico como utilizar las nuevas funciones de SQLMap para evadir WAFs y IDSs.
Recientemente tuve el placer de trabajar en unos tamper scripts para
SQLMap que pueden encontrar en la última versión de desarrollo que esta
en el repositorio de subversion:
svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev
El propósito de los tamper scripts es modificar la petición de tal forma
que evada la detección de las reglas del WAF. En algunos casos es
necesario combinar algunos scripts para poder engañar al WAF. Para una
lista de los tamper scripts puedes visitar
https://svn.sqlmap.org/sqlmap/trunk/sqlmap/tamper/
https://svn.sqlmap.org/sqlmap/trunk/sqlmap/tamper/
Los primeros scripts que mostraré son space2hash.py y space2morehash.py
que sirven para MySQL (aún no he terminado el de MSSQL). Estos scripts
convierten todos los espacios a comentarios con texto aleatorio. La
versión extendida del script (space2morehash.py) agrega adicionalmente
comentarios en los nombres de funciones y el paréntesis.
Para utilizar los tamper scripts tienes que usar la opción --tamper seguida por el nombre del script.
./sqlmap.py -u http://192.168.0.107/test.php?id=1 -v 3 --dbms "MySQL" --technique U -p id --batch --tamper "space2morehash.py"
La imagen 1 muestra como el tamper script remplaza los espacios en la
petición por %23randomText%0A, y después es cifrado con URL encoded. Las
funciones CHAR(), USER(), CONCAT() cambian a FUNCTION%23randomText%0A() ya que la configuración de IGNORE_SPACE_AFFECTED_KEYWORDS lo permite. Esto es por la forma en la que MySQL realiza Function Name Parsing and Resolution y por como trata las llamadas a funciones e identificadores.
Otros dos scripts que transforman los espacios son space2mssqlblank.py y space2mysqlblank.py. MySQL permite que los caracteres 09, 0A-0D, A0 se usen como espacios, mientras que MSSQL permite un rango mucho mayor, de 01-1F.
Ahora tenemos unos scripts que juegan con el cifrado:
charencode.py y chardoubleencode.py. Son útiles para evadir filtros por palabras clave, por ejemplo, cuando se bloquea la palabra "table_name".
Si la aplicación realiza URL decode por alguna razón (algunas lo hacen),
el script chardoubleencode.py puede resultar de utilidad.
Adicionalmente, si la aplicación esta programada en ASP/ASP.NET, los scripts charunicodeencode.py y percentage.py pueden ser utilizados para esconder el verdadero payload.
Una característica interesante de ASP es que puede tomar como válido
sentencias que tengan muchos simbolos de porcentaje entre los
caracteres. Por ejemplo: AND 1=%%%%%%%%1 es completamente válido!
Para concluir, he mostrado algunos de muchos tamper scripts de SQLMap.
Recomiendo
que los prueben ya que cada uno puede ser utilizado en situaciones
diferentes. Estaré desarrollando algunos nuevos este mes así que estén
pendientes.
0 comentarios:
Publicar un comentario