Técnicas de BLIND SQL INJECTION (I de III)

¿Quién hoy en día no conoce el archi-famoso ataque de SQL INJECTION?
Una variante que me fascina bastante de este tipo de ataque es el BLIND SQL INJECTION ó inyección de código a ciegas. Presentada hace solo un par de años en el Black Hat ha sido y es un dolor de cabeza más para los desarrolladores de aplicaciones web.

En esta primera entrada vamos a ver un poco que es esto del ataque a ciegas con un par de demos y en artículos próximos veremos como funciona realmente este tipo de ataque. Este ataque podría clasificarse bajo los ataques en base a error. El concepto del ataque es muy simple básicamente podemos saber cuando algo es cierto o no en base a roles de preguntas -me explico un poco más-.

Tenemos la siguiente URL:

asp:
http://vulnerable.com/vulnerable_parametro.asp?id_programa=166

E inyectamos código:

asp:
http://vulnerable.com/vulnerable_parametro.asp?id_programa=166 and 1=1

Como la condición 1=1 se cumple la aplicación no nos devolverá ningún error pero ¿ y si inyectamos 1=2 ?. Obviamente la condición 1=2 no se cumple, la aplicación generara una pantalla de error. Hasta aquí todo bien ¿y esto que riesgo puede tener, algún tonto que no sabe que 1=1?.

Tenemos infinidad de formas de explotar esto tipo de fallo ¿y si nos ponemos a enviarles peticiones con letras para adivinar en pocos minutos el nombre de la tabla de la base de datos ? o mejor aun la contraseña de administrador.

Hasta la próxima entrega 🙂

11 Replies to “Técnicas de BLIND SQL INJECTION (I de III)”

  1. Buah! Más variantes de sql injection ! aunque no me quedo muy clara... esperando a las demas entregas !

    Por cierto, quien eres jaime :s ?

  2. Hola Role ! Bueno si creo que se me olvido la presentación 😛

    Mi nombre es Jaime e intentare y por aquí soy nuevo (me contrato alex para escribir paga muy bien : P ). Nada que ver, intentare escribir lo que me parezca más interesante y aunque no creo pero intentare estar al nivel de Alex.

    Es muy simple el método de ataque te pongo un ejemplo más sencillo: Juan (tu) y X (aplicación) tu quieres saber el nombre de X, y X sonreirá cuando sea correcto y quedara igual cuando falles.

    Puedes ir probando: Tu nombre empieza por A? X no se inmuta, Y por B? X se rie, sabemos que el nombre de X empieza por B. Así podemos ir creando unos roles y sacar nombre de tablas de datos, contraseñas, usuarios, versiones de bases de datos... es un ataque con infinidad de posibilidades como ya comentes, veras en las próximas entregas !

    Saludos !

  3. Básicamente la variante "Blind" Sql Injection, como su nombre lo dice estas haciendo a ciegas la inyección...

    Quiere decir que no estas viendo algún error que te pueda ayudar a saber la estructura y luego asi comprometer la base de datos entera, realmente para ser bueno en SQL Injection solo falta conocer sobre SQL y prestar especial atencion a las "miniaturas" o las "cositas" que cada implementacion que existe, como son los objetos en MS SQL, algunas funciones en MySQL y la posibilidad de leer estructuras de tabla en postgre; todas esas "cositas" haran que la inyeccion sea sumamente facil.

    Saludos alex

  4. @g30rg3_x creo que te equivocas, en la inyección de código a ciegas claro que puedes ver el error que puede ir desde una pantalla en blanco hasta el típico error de llamada de una base de datos.. y para algunos que preguntaron si este error es multiplataforma afecta tanto a bases de datos ORACLE,MYSQL,MS SQL SERVER.....

    Saludos !

  5. Hola Jaime,

    interesante el tema, yo escribo el blog de "Un informático en el lado del mal" y una de mis principales "obsesiones" son las técnicas a ciegas.

    La primera aparición pública de las técnicas a ciegas es del año 2002 (Chish Anley de NGS en "(more) advanded sql injection". En el 2004 Cameron H. habla sobre las técnicas de automatización en Black Hat.

    Solo ese apunte. Si puedo ayudarte en algo estaré encantado. Me molan las variantes de esto. El primer Reto Hacking que está propuesto en mi blog es en un Blind. (está el solucionario publicado tb).

    Un cordial saludo!

  6. Yo creo que tu estas equivocado con respecto a que es considero un error...

    Los errores que me enlistas no son realmente errores si no son parte de completar un inyeccion que no devuelve resultados o rows (pantalla blanca) y el segundo puede deberse a un error de conexion u otros eventos no relacionados con la inyeccion en si, las verdaderas blind sql injection suelen no devolver un error mas que la informacion devuelta por la misma sentencia.
    No confundas un error con lo que debe devolver por naturaleza un software, no es lo mismo ver un error donde se enlista el codigo y posibles razones que provacaron el error, a ver una pagina con informacion en blanco ya que la sentencia no produjo resultados, no es lo mismo, asi que considero debes replantearte esa idea antes de seguir con el tema, ya que al menos yo no consideraria la variante blind si se produce algun error visible que nos pueda ayudar a optener datos de la estructura de base de datos.

    Saludos

  7. @Maligno: Si creo que te conozco un poco ! 😛

    @g30rg3: Te estas liando tu mismo, en la inyección de código a ciegas no obtenemos ninguna "información" con el error pero vemos si la condición que estamos inyectando (por ejemplo si la primera letra de la tabla master es "a" o "b", en el post no se menciona que se obtenga información del error) se cumple (que es lo que se hace con la inyección SQL a secas).

    Os dejo que no llego al tren !

    Saludos.

Comments are closed.