El rincón de Zerial

Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio

Descifrando password encriptadas con shadow (md5 + salt)

Octubre 18th, 2008 · 10 Comentarios

En Linux las password o claves de los usuarios (incluyendo root) se almacenan en el fichero /etc/shadow, encriptadas y con un salt, que nos complica el descifrado. En pocas palabras una shadow password es un hash del password mas un salt (hashed and salted password).
Un ejemplo de una clave shadow es root:$1$xOqq7NEt$vDOA0jbLcaiRbGsj3ddz30:13911::::::, si la analizamos podemos darnos cuenta de lo siguiente:

  • Lo que nos interesa es solamente root:$1$xOqq7NEt$vDOA0jbLcaiRbGsj3ddz30.
  • Lo que esta antes de “:” corresponde al usuario: root; y lo que sigue es la password.
  • Si descomponemos la password podemos obtener:
  • $1$: Nos indica que corresponde a una encriptacion md5.
  • xOqq7NEt: Es el SALT que se usa para generar el hash del password
  • vDOA0jbLcaiRbGsj3ddz30.: Es el hash salteado de nuestra password.

Si analizamos todos estos datos podemos darnos cuenta que teniendo el salt podemos encriptar una palabra o frase y generar un hash similar al que estaba en el fichero /etc/shadow, por lo que solo nos queda crear un script y tener un diccionario de palabras a mano para empezar a crackear o descifrar las password en shadow.

El comando mkpasswd nos permite generar un password segun un salt especificado.
Ejemplo:

machine:~$ mkpasswd -H md5 miPassword -S DSfdsdaA
$1$DSfdsdaA$kOxgZsSAshG4W.dgGp28Y/

He creado un script para hacer mas eficiente y automatiza un poco el proceso.

  1. #!/bin/bash
  2.  
  3. ################################################################
  4. #
  5. # Crack for SHADOW PASSWORDS.
  6. # Usage:
  7. #       crack.sh SALT ENCRYPTED_PASS WORD_LIST
  8. # Example:
  9. #       crack.sh mAsCaLaZ 8E6sMbq.fRDo6nbQqIh.z1 wordlist.txt
  10. #
  11. # by Zerial – http://blog.zerial.org – fernando@zerial.org
  12. ################################################################
  13.  
  14. __SALT=$1;
  15. __HASH="md5";
  16. __FILE=$3;
  17. __RPWD=$2;
  18. echo "Cracking $__RPWD …";
  19. echo "Attempts: `wc -l $3 |cut -f1 -d ‘ ‘`";
  20.  
  21. for lista in `cat $__FILE`
  22. do
  23.         pass_temp=`mkpasswd -H $__HASH "$lista" -S $__SALT |cut -f4 -d ‘$’`;
  24.         #echo "Probing $lista …";
  25.         if [ "$__RPWD" = "$pass_temp" ]; then
  26.                 echo ""
  27.                 echo "Password Cracked."
  28.                 echo "Decrypted password is: $lista"
  29.                 exit
  30.         fi
  31.         i=`expr $i + 1`;
  32. done
  33. echo "Password not found. :-( ";

Funcionamiento: Lee palabras desde un fichero y por cada palabra leida genera un hashed and salted password y la compara con los parametros pasados al script.

machine:~$ sh crack.sh DSfdsdaA .NySZJPYFdPr0ETVpMeKx1 wordlist
Cracking .NySZJPYFdPr0ETVpMeKx1 …
Attempts: 161597

Password Cracked.
Decrypted password is: test

Descargar script

Posts relacionados

Etiquetas: GNU/Linux · Hacking · Programación · Seguridad

10 respuestas hasta ahora ↓

  • 1
    jcarlosn SPAIN Debian GNU/Linux Mozilla Firefox 3.0.1 // Oct 18, 2008 a las 11:04 am

    Hola!

    No sería mas fácil utilizar:

    http://www.openwall.com/john/

    el archiconocido john the ripper?

    Seguro que es muchísimo mas rápido.

    Está interesante el script, un saludo!

  • 2
    Zerial CHILE Linux Mozilla Firefox 3.0.3 // Oct 18, 2008 a las 1:31 pm

    Hola @jcarlosn:
    Si, es mucho mas rapido usar john, tiene muchas optimizaciones que hacen que los procesos sean mas rapidos.
    Estos codigos los hago muchas veces para entender y dar a conocer como funcionan estas cosas, sabiendo que existen cosas mucho mas optimas y “mejores”, no estoy pensando en reinventar la rueda.

    saludos!

  • 3
    jcarlosn SPAIN Debian GNU/Linux Mozilla Firefox 3.0.1 // Oct 18, 2008 a las 2:53 pm

    Claro, entiendo… está muy interesante este tipo de cosas, ya que mucha gente no sabe como funciona el john, ni nada de esto, y estos scripts lo ilustran muy bien.

    Felicidades por el blog, tienes un nuevo lector asiduo :)

  • 4
    deb CHILE Windows XP Mozilla Firefox 3.0.3 // Oct 21, 2008 a las 2:54 pm

    Y que pasa con el diccionario de palabras donde se puede conseguir uno o como crearlo

  • 5
    Zerial CHILE Linux Mozilla Firefox 3.0.3 // Oct 21, 2008 a las 9:41 pm

    @deb a ver si en estos dias publico un diccionario de palabras o quizas un script para generar uno …

    saludos

  • 6
    deb CHILE Debian GNU/Linux Galeon 2.0.2 // Nov 5, 2008 a las 6:21 pm

    ok ok :)

  • 7
    Nozelf CHILE Windows Vista Mozilla Firefox 3.0.3 // Nov 5, 2008 a las 11:48 pm

    publica mi super diccionario de 15gb :P

  • 8
    La importancia de la seguridad en la información | El ricón de Zerial UNITED STATES WordPress 2.7.1 // May 10, 2009 a las 3:15 am

    [...] e ir utilizando las palabras como password e intentar un login, hasta lograrlo. Tambien demostré como romper un hash cualquiera, con o sin salt, donde romper hashes de claves como las recien mensionadas era algo muy sencillo. [...]

  • 9
    Latin King! « /home/anouk UNITED STATES WordPress MU // Sep 25, 2009 a las 4:56 am

    [...] : contraseña (en realidad el hash) : días transcurridos desde el 1 de Enero de 1970 (cosas que quedan… estos frikis, xD) : [...]

  • 10
    g3n3tix-_-c0d3 CHILE Windows XP Mozilla Firefox 3.5.3 // Oct 26, 2009 a las 3:13 pm

    agregen alguien q sepa mucho de md5

    g3n3tix-_-c0d3@hotmail.com

Deja un Comentario