Crackear Passwords en Unix Por Zebal ------------------------------------------------------------------------ Introducción. Para entrar en sistemas Unix se necesita un username y un password, y qué mejor lugar para conseguirlos que en un /etc/password :-) Este es el fichero que en Unix contiene la lista de los usernames y los passwords, asi como otra información asociada a cada username... El problema es que los passwords están ecriptados. Veamos la pinta que tiene un fichero de estos: root:XY53yyh3gMvvE:0:3::/root:/bin/sh daemon:*:1:5::/:/bin/sh bin:*:2:2::/bin:/bin/sh adm:*:4:4::/usr/adm:/bin/sh uucp:*:5:3::/usr/spool/ucppublic:/usr/lib/uucp/uucico lp:*:9:7::/usr/spool/lp:/bin/sh hpdb:*:27:1:ALLBASE:/:/bin/sh user1:g.um3CCF4uVIk:247:25:José Antonio Martín:/disc/users/pepito:/bin/csh user2:RckFa8/idTCFg:248:24:Antonio Fuentes:/disc/users/fulanito:/bin/csh user3:axX/MxQZr37tA:0:3:Manuel Pérez:/disc/users/menganito:/bin/csh Como veis, cada linea del fichero corresponde a un usuario, y contiene, por orden, el username, el password encriptado, el user_id, el group_id, el nombre real, el directorio en el que está su cuenta y el shell que se carga al inicio... El formato puede variar un poco, pero básicamente es éste. Como veis, cada campo está separado por ":" del anterior y del siguiente. En algunas líneas, el campo password es "*". Este password encriptado es inválido, o sea, no se corresponde con ningún password; por tanto, las cuentas que tienen alguna "*" en el campo password son cuentas a las que no podreis entrar. Otro detalle a considerar son los usuarios cuyo user_id es "0", como el ROOT. Estos usuarios son ROOT a todos los efectos, o sea, tienen los mismos derechos que el ROOT. Como podeis ver, "user3" tiene user_id=0, o sea, es ROOT. Los usuarios que sin tener el user_id=0 tienen el mismo group_id que el ROOT, también tienen algunos privilegios por el hecho de pertenecer al grupo del ROOT. Bien, ahora hay que desencriptar los passwords. El problema es que el mecanismo de encriptación de Unix no es reversible, esto es, no se puede desencriptar. Entonces... ¿cómo lo hace el LOGIN para comprobar si el password que le pones es el correcto? Pues lo que hace es encriptarlo y comparar el password encriptado con lo que hay en el fichero... Si coincide es que el password que has puesto es el password del fichero desencriptado. La forma de atacar un fichero de passwords de Unix es precisamente la misma que usa el LOGIN para verificar un password. Lo que se hace es encriptar muuuuchas palabras y comprobar cada una de ellas si coincide con el password encriptado. Si coincide, ya tenemos un password, y si no, probamos la siguiente palabra. Para hacer esto necesitamos tres cosas: una lista de palabras a probar, una lista con los passwords encriptados y un programa que haga las pruebas. ------------------------------------------------------------------------ Paso 1: Conseguir listas de palabras. Se imaginativo. Puedes hacerte tus propias listas de palabras con nombres, apellidos, deportistas, colores, números, meses, dias de la semana, insultos, empresas, nombres de servidores, y cualquier otra cosa que se te ocurra que alguien puede haber puesto como password en el sistema que estas intentando hackear. Además, puedes encontrar en internet listas de palabras a punto para que pruebes. Uno de los sitios más interesantes para obtener listas de palabras es ftp://sable.ox.ac.uk/pub/wordlists/. Hay montones de listas de palabras, pero es un poco lento. Afortunadamente hay un mirror de este servidor en España, en ftp://sun.rediris.es/mirror/sable/wordlists/, y éste va mucho más rápido, sobretodo si tu conexión a Internet es desde dentro de la red española. De todas formas, siempre puedes buscar en el Yahoo o en el Lycos por "dictionar" o por "wordlist" y aparecerán montones de sites con las mismas listas. Un buen truco es probar con los nombres y apellidos de los usuarios del sistema que estais intentado crackear... Hay muchííííísima gente que se pone de password el apellido, el nombre, o el nombre de la novia, así que una lista con los nombres y apellidos de los usuarios es una buena garantía de obtener passwords. Otra cosa que suele ser habitual como password es el username. También mucha gente se pone el username de password. Así que una buena recomendación es que extraigais todas las palabras del fichero de passwords que vais a crackear y las probeis como password. Para extraer todas las palabras de un fichero hay bastantes utilidades, algunas de las cuales incluso se distribuyen en el mismo paquete que el crackeador. No creo que os cueste demasiado localizar alguna utilidad para extraer los nombres, los apellidos y los usernames de los usuarios en un fichero /etc/passwd. Incluso hay utilidades sueltas cuya única función es la de tratar listas de palabras... ------------------------------------------------------------------------ Paso 2: Conseguir la lista de passwords. Esto es algo más complicado. Si teneis una cuenta en el sistema que vais a hackear siempre podeis hacer un "cat /etc/passwd". Si no tienen Shadow Passwords o NIS aparecerá una lista como la que habeis visto al principio. Sino, aparecerá algo similar a esto: root:XY53yyh3gMvvE:0:3::/root:/bin/sh daemon:*:1:5::/:/bin/sh bin:*:2:2::/bin:/bin/sh adm:*:4:4::/usr/adm:/bin/sh uucp:*:5:3::/usr/spool/ucppublic:/usr/lib/uucp/uucico lp:*:9:7::/usr/spool/lp:/bin/sh hpdb:*:27:1:ALLBASE:/:/bin/sh user1:g.um3CCF4uVIk:247:25:José Antonio Martín:/disc/users/pepito:/bin/csh user2:RckFa8/idTCFg:248:24:Antonio Fuentes:/disc/users/fulanito:/bin/csh user3:axX/MxQZr37tA:0:3:Manuel Pérez:/disc/users/menganito:/bin/csh donde el password será algo como "*", o "x" o cualquier cosa que contenga un "*" como "*NOPASSWORD*". En este caso el fichero "/etc/passwd" no contiene nada útil, ya que está instalado Shadow Passwords o NIS. Entonces, podeis provar de hacer un "ypcat /etc/passwd". Con esto probablemente obtendreis por pantalla la lista real de passwords. En caso de que no tengais privilegios para ejecutar el "ypcat", o en caso de que el "ypcat" no esté o por si acaso lo que aparece al ejecutar el "ypcat" vuelve a ser basura otra vez, tendreis que recurrir a otros programas para obtener los passwords. Os recomiendo el PWGET. Lo podreis encontrar en muchos sitios de internet. Buscad PWGET.TAR.GZ o PWGET.TGZ en cualquier archie, o en el lycos, o en el yahoo. Seguro que lo encontrais. Una vez lo teneis, solo hay que subirlo al servidor que quereis hackear, descomprimirlo ("gzip -d -f PWGET.TGZ"), desarquearlo ("tar -x -f PWGET.TAR"), compilarlo ("cc -o pwget pwget.c"), y ejecutarlo ("./pwget"), con lo que obtendreis por pantalla la lista de passwords. Si quereis la lista en un fichero, solo teneis que redireccionar la salida de la pantalla a un fichero: $ ./pwget > fichero o bien $ ypcat passwd > fichero o bien $ cat /etc/passwd > fichero es decir, como redireccionariais la salida bajo DOS... Ahora para bajaros el fichero podeis usar el FTP o el Kermit o el ZModem/Ymodem/Xmodem. Para bajar el fichero vía Kermit o Zmodem necesitareis que vuestro programa de telnet soporte esos protocolos (como el NetTerm), y que la máquina Unix en la que estais también los soporte (o sea, tenga los programas instalados). El programa de Kermit suele estar en casi todos los sitios: $ kermit kermit> set file type ascii (o "text", segun las máquinas) kermit> set send pack 1000 kermit> set rec pack 1000 kermit> set file type 2 (o 3, como querais) kermit> send fichero ... Download->Kermit CTRL+C kermit> quit $ aunque podeis usar el ZModem, si es que está instalado: $ sz fichero ... Download->ZModem $ ------------------------------------------------------------------------ Paso 3: Petar la lista de passwords. Ahora que ya teneis la lista de passwords y unas cuantas listas de palabras falta un programa que encripte las palabras y las compare con los passwords encriptados del fichero de passwords. Para ello hay muchos programas que podeis usar. Ahora comentaré brevemente las características de los programas (y sus nombres, para que los podais buscar por la red), pero antes quiero dar algunos truquillos para que consigais passwords en menos tiempo. •Elimina del fichero de passwords todas las lineas cuyo password sea inválido ("*", "*NOPASSWORD*", etc) •Ordenad las lineas del fichero de password por los dos primeros caracteres del password encriptado. Algunos de los programas que comento ya hacen esto al cargar el fichero de password, pero algunos no lo hacen. Con estos dos pasos os podeis ahorrar bastante tiempo si usais estos petadores. •Aquellos usuarios que tienen el campo de password vacío (user1::101:1:Manolito:/usr/user1:/bin/sh) no tienen password, así que son una cuenta que podeis eliminar del fichero, ya que no os hace falta petar el password para entrar. Al hacer login, simplemente poneis el username, y si os llega a preguntar por el password, le dais al ENTER sin poner nada... :-) Petadores: •Cracker Jack 1.4 (JACK14*.*, CJACK*.*) Es el más extendido, al menos que yo sepa. Está en prácticamente cualquier site de internet dedicado al hacking. Funciona para DOS y para OS/2, y es bastante rápido. Incluye en el mismo paquete varias utilidades para tratar listas de palabras. •Puedes buscarlo en el web. •Brute 2.00 (BRUTE*.*) Otro petador bastante popular pese a su lentitud. Creo que existe otra versión más rápida, pero usa un algoritmo de encriptación que no es del todo correcto (aunque es más rápido), y no pilla todos los passwords que debiera. No he podido localizar ninguna copia de esa versión así que no la he podido probar. Funciona para DOS. •StarCrack 0.64ß (STARCRAK*.*) Este es un petador con multitud de opciones, que permite manipular palabras mientras se prueban. Es más rápido que el Cracker Jack, funciona para DOS y es muy completo. Es bastante nuevo, y además es una Beta, o sea que supongo que pronto saldrá alguna versión mejorada... :-? Es bastante completo y permite hacer de todo •Ésta es la homepage del StarCrack: http://www.chez.com/thes/starcrak.html •Hades 1.00a (HADES*.*) Otro petador para DOS. Este hace las pruebas de una forma distinta al resto de petadores. En vez de encriptar una palabra y comparar con los passwords de todos los usuarios, prueba de encriptar todas las palabras y compara cada palabra con el password de un usuario. Una vez ha acabado con un usuario, prueba lo mismo con otro. Debido a esta forma de actuar, realiza mucha entrada/salida de disco, lo cual ralentiza el proceso. Sus prestaciones mejoran notablemente si ordenamos el fichero de passwords por el campo password encriptado, ya que así prueba varios usuarios a la vez. También se puede mejorar su rendimiento teniendo todas las listas (palabras y passwords) en un disco virtual en memoria. •Guess 2.1 (GUESS*.*) Petador para DOS, extremadamente lento. Tiene problemas de memoria si se intenta usar con ficheros de passwords de más de 1000 lineas. •PCUPC 2.01 (PCUPC*.*) Otro petador para DOS. Este tiene problemas de memoria si se intenta usar con ficheros de passwords de más de 600/700 lineas. •Killer Cracker 9.5 (DJKC95*.*, KC*.*) Al igual que el Guess, es un petador para DOS bastante lento y que da problemas si se usa con ficheros de passwords de más de 1000 lineas. •Xit 2.0 (XIT20*.*) Petador para DOS. Es lo más lento que me he encontrado. Como su nombre indica, es una shit! :-) •HellFire Cracker 1.3 (HC130*.*) Petador para DOS. Necesita 386 con coprocesador para funcionar, pero por algún extraño motivo se cuelga en mi pentium y en mi 486, así que no os puedo decir qué tal está. Quizás si teneis un 386 lo podais usar con éxito. El programa incluye un emulador de 387 por si no teneis coprocesador. De todas formas, es un programa muy antiguo que seguramente no será muy rápido. •John the ripper 1.4 (UCFJOHN3*.*) Petador para DOS/Win32/Linux y cualquier otra cosa, ya que viene con las fuentes. Funciona de una forma muy similar al Cracker Jack pero incluye más opciones y es bastante más rápido. Ha salido hace poco, cortesía de UCF (United Cracking Force) y quizás os cueste de localizar, pero es realmente útil y rápido. No tiene tantas opciones como el Star Crack, pero es bastante más rápido. Además permite un montón de opciones para tratar las listas de palabras que usáis... •Ésta es la homepage del John the Ripper: http://www.false.com/security/john/ Aquí teneis una comparativa de estos petadores, en la misma máquina y con los mismos ficheros de passwords y de palabras. Algunos de ellos tardaban demasiado, y aborté el proceso de petar passwords. En estos casos, calculé el tiempo estimado que tardarían en acabar en función del tiempo que llevaban (1 hora) y las palabras que habían provado hasta el momento. Estos son los resultados, ordenados por velocidad: CrackerTiempoComparaciones por SegundoObservacionesJohn the ripper 1.46'15''26667c/s.John the ripper 1.316'30''25641c/s.John the ripper 1.08'05''20619c/s.Star Crack 0.64ß9'15''18018c/s.Star Crack 0.51ß11'25''14599c/s.Cracker Jack 1.413'33''12300c/s.Cracker Jack 1.3 38614'55''11173c/s.Cracker Jack 1.3 808622'22''7452c/s.Hades 1.00a47'05''3540c/s.Brute 2.00(est)59'54''2782c/s.PCUPC 2.01(est)135'37''1229c/sSólo soporta ficheros de passwords de menos de 500 linias.Guess 2.1(est)141'58''1174c/sSólo soporta ficheros de passwords de menos de 1000 linias.Killer Cracker 9.5(est)151'12''1105c/sSólo soporta ficheros de passwords de menos de 1000 linias.Xit 2.0(est)195'37''852c/s.Hellfire Cracker 1.3infinito0c/sSe colgó y no pudo ser provado. Este test fue realizado en un Pentium 133, con 16 Mb de RAM, con los datos en el disco duro, con una cache de lectura de 2 Mb y sin hacer ningún preprocesado en el fichero de passwords ni en el de palabras. El fichero de palabras contenia 10000 palabras y el de passwords 1000 passwords. Tenian que encontrar 554 passwords. Algunos de ellos no los dejé acabar ya que tardaban demasiado y estimé el tiempo en función de lo que habían crackeado hasta el momento de pararlos, por lo tanto no sé si hubieran encontrado todos los passwords. Sólo los he incluido en la comparativa por si alguno de vosotros los usa, para que vea que hay cosas mejores. Como se puede ver, el John the ripper encripta casi el doble de passwords por segundo que el Cracker Jack. He de reconocer que el fichero con el que hize la prueba parece ser especialmente adecuado para el John the ripper, ya que 20000c/s no se consiguen habitualmente. De todas formas, la comparativa es significativa de la velocidad a la que se petan passwords con cada uno de los programas. ------------------------------------------------------------------------ Espero que con esta mini-introducción al arte de petar passwords en Unix podais pasar un buen rato; y espero no haberos aburrido demasiado. Si teneis alguna duda/comentario/sugerencia/crítica-destructiva, podeis enviar un e-mail a z3b4l@hotmail.com. Saludos! ;-)   Volver a la pagina principal