Академический Документы
Профессиональный Документы
Культура Документы
Resumen
La naturaleza de las aplicaciones Web, principalmente por el amplio mercado que
ofrecen y por la capacidad de permitir su acceso a personas de todo el mundo las
ha convertido en un flanco de ataque por parte de delincuentes cibernticos, entre
las tcnicas encontradas para vulnerar los sitios Web se encuentra la inyeccin
SQL la cual generalmente involucra las base de datos de un sitio Web, de ah su
nombre y se basa principalmente en explotar la relacin que existe entre la
aplicacin y el servidor de base de datos. Esta relacin es explotada para atacar
la base de datos directamente a travs de la aplicacin, utilizando el servidor de
base de datos para atacar otros sistemas en la organizacin. Con el presente
artculo se busca proveer la suficiente informacin para que el lector pueda
entender sta tcnica de ataque, adems que logre dimensionar su alcance,
causas y consecuencias. Este artculo no cubre la sintaxis SQL de base de base
datos. Se supone que el lector tiene una slida comprensin de estos temas. Este
documento se centrar en definir qu es una inyeccin SQL, identificar una
metodologa de pruebas, identificar las tcnicas de evasin y la forma de
defenderse.
Palabras claves
Inyeccin SQL, ataque, seguridad, aplicaciones Web.
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
1. Introduccin
Las aplicaciones en ambiente Web ofrecen a todo tipo de atacantes cibernticos un mercado
amplio y exquisito porque encuentran en ellas un punto de convergencia de un nmero muy
importante de organizaciones y usuarios a nivel mundial ms an cuando stas cada da se
enriquecen cada vez con mejores contenidos como multimedia, msica, informacin de todo
tipo, entretenimiento, entre otras muchas ventajas, adicionalmente porque comercialmente
tienen gran acogida por todo tipo de empresas independientemente de su objeto social.
Lograr vulnerar estos sitios de encuentro comn con el fin de obtener determinados beneficios
es una tarea que cada vez mejoran ms los atacantes cibernticos, una tcnica utilizada con
gran frecuencia y con buenos resultados es la inyeccin SQL. Esta tcnica permite que un
atacante logre con esta vulnerabilidad de inyeccin SQL recuperar el contenido de la base de
datos detrs de un firewall y de esta manera penetrar en la red interna, adems puede causar la
contaminacin de toda la informacin sensible almacenada en la base de datos de una
aplicacin, incluida la informacin til como nombres de usuario, contraseas, direcciones,
nmeros de telfono, datos de la tarjeta de crdito, entre otros.
Entre los grandes problemas que enfrentan los administradores ante ataques de este tipo, es
que es una de las vulnerabilidades ms devastadoras para el impacto de un negocio ya que
permite a los usuarios remotos acceder a informacin confidencial.
La mayor importancia que se le da a este ataque radica en que el atacante aprovecha la
sintaxis y las funcionalidades que le brinda el SQL2 en s mismo, para la ejecucin de dichas
consultas, lo cual lo hace potencialmente peligroso ya que con ello puede realizar en el servidor
2
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
2. Qu es la inyeccin SQL?
La inyeccin SQL es un tipo de ataque en el que el atacante incluye declaraciones SQL
malintencionados, a travs de campos de entrada de cualquier tipo de software que precise del
uso de base de datos, o una aplicacin web que interacte con una base de datos para funcionar,
el cual se aprovecha de las vulnerabilidades que tienen dichas aplicaciones debido a que el
desarrollador acepta que los datos del usuario se almacenen o depositen directamente en una
sentencia SQL y no filtran correctamente los caracteres peligrosos.[1][2][3][4].
Tabla 1. Comandos DCL, DDL, DML,
Clusulas y Operadores de Comparacin
Tomado de:
http://www.siclabs.com/descargas.php
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
La Inyeccin SQL recibe su nombre debido a que hace uso del lenguaje llamado SQL. Estas
sentencias SQL pueden modificarla estructura de las bases de datos (usando instrucciones del
lenguaje de definicin de datos, o DDL) y manipular el contenido de las bases de datos
(usando instrucciones del lenguaje de manipulacin de datos, o DML). Dentro de los
comandos bsicos de SQL, se identifican cuatro grupos principales: Figura 1, Tabla 1 a), b), c),
d), e). [5] [6]
Los ataques de inyeccin SQL son ayudados la mayora de las veces por los mensajes de error
detallados y datos sin filtrar devueltos por la aplicacin que se muestran en la interfaz del
usuario. Con cada error, ayuda al atacante obtener informacin sobre la base de datos y a crear
y a refinar el ataque. Algunos administradores desactivan estos errores (SHOW_ERRORS y
SHOW_WARNINGS) para que no se muestren posibles errores provocados en el intrprete
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Aunque la tarea inicial para el atacante es identificar los sitios que poseen este tipo de
vulnerabilidad. Casi todas las bases de datos y lenguajes de programacin son potencialmente
vulnerables: MS SQL Server, Oracle, MySQL, PostgreSQL DB2, MS Access, Sybase, Informix,
etc, porque se trata de un problema de validacin de entrada que tiene que ser considerado y
programado por el desarrollador de aplicaciones web. [9]
3. METODOLOGA DE PRUEBAS PARA LA INYECCIN SQL
3
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Pasos a seguir:
3.1 Entender el Funcionamiento de la Aplicacin Web.
Aunque las diferentes aplicaciones se comportan de diferentes maneras, el fundamento es el
mismo, debido a que todos los entornos son basados en Web. Hay que observar cmo el
navegador enva las peticiones al servidor Web. Las peticiones que se envan al servidor Web
pueden ser de dos posibles formas: Visibles (Mtodo GET) u ocultos (Mtodo POST).
Como se observa en la figura 2. El usuario realiza a travs del navegador la peticin de una
pgina Web. El servidor Web identifica la solicitud que para este caso, es una pgina dinmica,
por lo tanto esta debe ser interpretada por el motor de PHP el cual ejecuta el cdigo. Dentro del
cdigo se obtiene el valor de las variables enviadas por el usuario, con base en ello procede a
conectarse al servidor de base de datos para realizar la respectiva consulta. Finalmente el
resultado de la ejecucin del cdigo PHP, es tomado por el servidor Web para ser enviado al
navegador del usuario como respuesta a su solicitud. Algunas veces, la respuesta incluir un
error de SQL de la base de datos, esto ayuda a obtener informacin importante, sin embargo,
otras veces hay que estar concentrado y detecta diferencias sutiles. [6][12][13]
3.2
La Inyeccin SQL se puede presentar en cualquier parte de la aplicacin Web, por esta razn
se identifican todas las entradas de datos en la aplicacin web, qu tipo de solicitud podra
provocar anomalas y detectar las anomalas en la respuesta del servidor. Se realizan las
validaciones para de esta manera encontrar una entrada vulnerable en la aplicacin Web. Una
vez detectadas las anomalas el siguiente paso es reunir la mayor informacin posible acerca
de la aplicacin Web a travs de lo siguiente:
Los mensajes de error: Estos mensajes de error generan informacin valiosa. Diversas bases
de datos permiten y requieren diferentes sintaxis SQL. Definir el tipo de motor de base de datos
es fundamental para las siguientes etapas. La mayora de los mensajes de error indican con
qu base de datos estn trabajando. Al identificar el sistema operativo y el servidor web a veces
es ms fcil deducir la posible base de datos.
Entender la consulta: La consulta, puede ser un "SELECT", "UPDATE", "INSERT" o algo ms
complejo. Es importante determinar lo que el formulario o la pgina est tratando de hacer con
la entrada para determinar en qu parte modificar la consulta. [6][9][11][12][13]
3.3 Determinar el Nivel de Privilegios de Usuario, el Nombre y la Versin de la Base de
Datos.
Con el uso de caracteres especficos (@@version) puede saber con certeza la versin de la
base de datos. Pero para esto es fundamental identificar el nmero de columnas de la tabla o
campos seleccionados en la consulta. Esto se logra a travs de la utilizacin de la clausula
ORDER BY. La cual le permite ordenar los resultados en funcin de los campos que hayan sido
seleccionados en la consulta.
La consulta anterior (Ejemplo 1) ordena los campos por apellido. Otra alternativa para indicar el
nombre del campo es utilizando su posicin.
Con esta consulta (Ejemplo 2) se podr ir ordenando por el primer campo, luego por el segundo
y as de forma incremental hasta generar un error de este tipo:
La posicin 3 no existe
porque
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
solo
se
La unin de estas dos consultas (Ejemplo 3) muestra como resultado los datos de los usuarios
con id 1 y 2. SQL integra varias funciones que funcionan en la mayora de las bases de datos:
user or current_user
session_user
system_user
' and 1 in (select user )
Estas funciones devuelven el nombre de usuario dentro de un mensaje de error. Para tener el
mayor xito en la inyeccin SQL se requiere altos niveles de privilegios de usuario. Esto nos
indica lo que puede o no puede hacer el usuario, que al final servir para ahorrar tiempo.
[6][8][9][13]
3.4 Realizar el Ataque.
Conociendo la informacin bsica de la base de datos, la estructura de la consulta y los
privilegios, se procede a iniciar el ataque. Descubrir la estructura de la base de datos. MySQL
guarda los metadatos de las bases de datos en una base de datos llamada
INFORMATION_SCHEMA (Figura 3), la cual es la base de datos de informacin, donde se
almacena informacin sobre todas las otras bases de datos que mantiene el servidor MySQL.
Dentro de INFORMATION_SCHEMA hay varias tablas de slo lectura. Aunque se puede
seleccionar INFORMATION_SCHEMA como base de datos por defecto con el comando USE,
slo se puede leer el contenido de las tablas, no efectuar operaciones INSERT, UPDATE o
DELETE. [6][9] [11][12]
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Enumeracin de la base de datos. En MySQL un esquema es una base de datos, por lo tanto
la tabla SCHEMATA (Figura 4), proporciona informacin acerca de las bases de datos. En el
campo SCHEMA_NAME se encuentran los nombres de todas las base de datos.[6][9]
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
En ambos casos se ver restringido por los privilegios y permisos del usuario con el que se
ejecuta el motor de base de datos. No siempre es posible evadir al sistema operativo para la
ejecucin directa de comandos a travs de la inyeccin SQL. En la mayora de base de datos,
la ruta de acceso al sistema operativo no es directa. Se debe realizar la bsqueda de
contraseas y en algunos casos reemplazar archivos de configuracin para lograr acceder
indirectamente. Otra forma de ejecutar comandos es a travs de la automatizacin de Scripts
para ActiveX. [9][13]
3.7 Ampliar la influencia.
En esta etapa final el atacante puede ampliar su influencia saltando a otras aplicaciones o
servidores de base de datos. Vincula estos servidores remotos para comunicarse de forma
transparente con ellos y de esta manera realizar consultas distribuidas e incluso controlar estos
servidores de base de datos de forma remota y utilizar esa capacidad para acceder a la red
interna. Tambin es posible subir archivos a travs de una conexin inversa y de una inyeccin
SQL y ejecutar de forma remota procedimientos almacenados, debido que algunos servidores
estn configurados nicamente para permitir la ejecucin remota de dichos procedimientos.[9]
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Al observar la URL de la aplicacin se identifican los parmetros que van despus del signo de
interrogacin (?) separados entre si por el signo et (&), estos parmetros indican exactamente
el nmero de ID a consultar en la pgina Web (Figura 8). Se identifica que el mtodo utilizado
es el mtodo GET donde claramente se observa la variable y su valor en la URL 01020304.
4.2 Validar Entradas y Recopilar Informacin: Los mensajes de error. Con el mensaje de
error suministrado se puede determinar que la base de datos utilizada en la aplicacin es
MySQL (Figura 9).
Entender la consulta.
Identificado en el paso anterior que se utiliza el mtodo GET, se puede deducir en las lineas del
codigo PHP (Ejemplo 4) que los valores enviados no tienen ninguna validacin. Esta es una
posible forma como se obtienen los valores enviados por el usuario:
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Luego se puede deducir que ms adelante se concatena el valor de la variable $id para formar
la consulta SQL (Ejemplo 5).
Si por ejemplo el $id fuera 1 la consulta quedara de la siguiente manera (Ejemplo 6):
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Enumeracin de las columnas de las tablas de diferentes bases de datos. Figura 15.
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Subir archivos a travs de una conexin inversa o de una inyeccin SQL. Figura 20.
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Implementar varias capas de validacin, es decir, validar los datos especificados por el
usuario en la interfaz de usuario y, despus, en todos los puntos posteriores que
atraviesen un lmite de confianza.
No concatene los datos especificados por el usuario que no se hayan validado.
Rechazar los datos que contengan diversidad de caracteres. [17] [20]
La peticiones que son enviadas a la aplicacin Web, se envan a travs del puerto de escucha
de GreenSQL (Puerto 3305), el cual las analiza y las reenva al servidor de base de datos. [23]
Se recomienda para su configuracin inicial habilitar en modo aprendizaje con el objetivo de no
generar ningn impacto en las consultas que son enviadas o generadas para la aplicacin Web.
En este modo todas las consultas se aaden automticamente a una lista blanca (Whitelist) o
lista permitida. Una vez determinadas las consultas que son importantes para la aplicacin Web
se puede proceder a cambiar al modo de proteccin activa. Ofrece una intrerfaz grfica de
gestin compatible con los navegadores ms comunes, con un conjunto de opciones para su
configuracin. [23]
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
[Online].
Disponible
en:
[2]. Sagar, Joshi (2005). SQL Injection Attack and Defense. [Online]. Disponible en:
http://www.securitydocs.com/library/3587
[3]. Kenkeiras (2010). SQL Injection. [Online]. Disponible en: http://talleres.hackxcrack.es/
[4]. Litchfield, David (2005). Data-mining with SQL Injection and Inference. [Online]. Disponible
en: http://www.databasesecurity.com/webapps/sqlinference.pdf
[5]. Anley, Chris (2002). Advanced SQL Injection In SQL Server Applications. [Online].
Disponible
en:
http://www.ngssoftware.com/Libraries/Documents/Advanced_SQL_Injection_in_SQL_Server_Ap
plications.sflb.ashx
[6]. Racciatti, Hernn (2005). SQL Injection. Tres aos despus Deteccin y Evasin.
[Online].
Disponible
en:
http://www.sicinformatica.com.ar/media/SQL%20Injection%20%20Deteccion%20y%20Evasion.zip
[7].
Blindfolded
SQL
Injection
(2009).
http://www.imperva.com/docs/Blindfolded_SQL_Injection.pdf
[Online].
Disponible
en:
[8]. Ka0x (2008). Tcnicas de inyeccin en MySQL. [Online]. Disponible en: http://www.exploitdb.com/wpcontent/themes/exploit/docs/216.pdf
[9]. Chapela, Vctor (2005). Advanced SQL Injection.
http://www.owasp.org/images/7/74/Advanced_SQL_Injection.ppt
[Online].
Disponible
en:
[10]. OWASP (2010). Open Web Application Security Project. [Online]. Disponible en:
http://www.owasp.org/index.php/Main_Page
[11]. Martorella, Christian (2008). Principales vulnerabilidades en aplicaciones Web. [Online].
Disponible en: http://www.edgesecurity.com/docs/Edge-Security_Rediris2008.pdf
[12]. Clarke, Justin (2009). SQL Injection Attacks and Defense. Ed. Syngress Publishing, Inc.
[13].
McCray,
Joe.
Advanced
http://www.toorcon.org/tcx/9_McCray.pdf
SQL
Injection.
[Online].
Disponible
en:
[14]. Warneck, Brad (2007). Defeating SQL Injection IDS Evasion. [Online]. Disponible en:
http://www.giac.org/certified_professionals/practicals/gcia/1231.php
[15]. Inyeccin SQL en Aplicaciones Web (I) (2007). [Online]. Disponible en:
http://informaticapractica.net/solocodigo/index.php/2007/09/05/inyeccion-sql-enaplicacionesweb-i/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
[16]. Anley, Chris (2002). (more) Advanced SQL Injection. [Online]. Disponible en:
http://www.ngssoftware.com/Libraries/Documents/more_Advanced_SQL_Injection.sflb.ashx
[17]. Cerullo, Fabio (2010). OWASP Top 10 2010, Los diez riesgos ms importantes en
aplicaciones
web.
[Online].
Disponible
en:
http://www.owasp.org/images/1/19/Owasp_top10_spanish.pdf
[18]. Nystrom, Martin (2007). SQL Injection Defenses. Ed. Oreilly Media.
[19].
Fisk,
Harrison
(2004).
Prepared
Statements.
[Online].
http://dev.mysql.com/techresources/articles/4.1/preparedstatements.html
Disponible
en:
Disponible
en:
[21]. Ramos, Alejandro (2010). Fortificacin de MySQL 1/3. [Online]. Disponible en:
http://www.securitybydefault.com/search?q=sql+1
[22].
OWASP
Testing
Guide
V3.0
(2008).
[Online].
http://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdf
[23]. GreenSQL. [Online]. Disponible en: http://www.greensql.net/about
[24]. Modsecurity. [Online]. Disponible en: http://www.modsecurity.org/
Revista
Digital
Apuntes
de
Investigacin
|
ISSN:
2248-7875
Vol
3
Septiembre
2012
Disponible
en:
http://apuntesdeinvestigacion.upbbga.edu.co/
Disponible
en: