--[ 14. Le saviez-vous ? La réponse ]------------------------------------ Prenons par exemple un type d'empreinte MD5 où le sel est composé de l'identifiant de l'utilisateur suivi du caractère non affichable '\n' (0x0A). Soit : empreinte := md5($login.\n.$password) * Solution avec John Avec l'outil John The Ripper (http://www.openwall.com/john/), il est possible d'utiliser le format dynamic_n afin de spécifier de manière générique n'importe quelle variante d'empreinte MD5 un tant soit peu exotique. Ainsi, il devient possible de casser des empreintes du type md5(sha1($login.$password)) ou md5(md5($login).md5($salt).md5($password)) entre autres. Dans notre cas, il nous faut créer une nouvelle section dans le fichier de configuration de JtR (john.conf) afin de déclarer notre format bien particulier : [List.Generic:dynamic_1030] Expression=dynamic_1030: md5($u.\x0A.$p) [eZ Publish] Flag=MGF_USERNAME Func=DynamicFunc__clean_input Func=DynamicFunc__append_userid Func=DynamicFunc__append_input1_from_CONST1 Func=DynamicFunc__append_keys Func=DynamicFunc__crypt CONST1=\x0A Test=$dynamic_1030$c78e3b0f3d9244ed8c6d1c29464bdff9:publish:admin Ces directives permettent d'indiquer que l'empreinte MD5 est calculée à partir de la concaténation de l'identifiant suivi du caractère '\n' et enfin du mot de passe (pour plus d'informations, lire john/doc/DYNAMIC). Puis, il faut formater correctement notre fichier d'empreintes à casser avec : :$dynamic_1030$ Par exemple, pour l'utilisateur 'foobar', on aura la ligne suivante : $ cat demo_jtr.pw foobar:$dynamic_1030$9dbd9a8c732fe79da116588afb97f2e6 Enfin, on exécute JtR avec : $ john demo_jtr.pw Loaded 1 password hash (dynamic_1030 dynamic_1030: md5($u.\x0A.$p) [eZ Publish] [128x1 (MD5_Body)]) test123 (foobar) Le mot de passe est rapidement retrouvé. * Solution avec Hashcat Avec la suite Hashcat (http://hashcat.net), ce n'est pas aussi simple. Il faut indiquer que l'empreinte MD5 est de type md5($salt.$pass) et construire le fichier d'empreintes avec les sels encodés en hexadécimal. Ainsi, on aura pour le même utilisateur 'foobar' : $ cat demo_hc.pw 9dbd9a8c732fe79da116588afb97f2e6:666f6f6261720a Pour le moment, seul l'outil oclHashcat-0.26 permet de casser notre variante d'empreinte MD5 parce que : - l'option --hex-salt n'existe pas dans hashcat-0.37 ; - le format md5($salt.$pass) n'existe ni dans oclHashcat-lite-0.08 ni dans oclHashcat-plus-0.06. Par conséquent, nous ne pouvons pour le moment pas faire d'attaques par dictionnaire, mais uniquement des attaques par force brute ou hybrides (avec accélération GPU tout de même). Exemple d'attaque hybride avec oclHashcat : $ /opt/oclHashcat/cudaHashcat -m 2 --hex-salt demo_hc.pw password.lst ?d?d?d cudaHashcat v0.26 by atom starting... Digests: 1 entries, 1 unique Salts: 1 entries, 1 unique Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes Platform: NVidia compatible platform found Watchdog: Temperature limit set to 90c Device #1: GeForce GTX 460, 1023MB, 1300Mhz, 7MCU NOTE: gpu-accel auto-adjusted to: 80 Device #1: Kernel /opt/oclHashcat/kernels/4318/m0002.sm_21.32.cubin 9dbd9a8c732fe79da116588afb97f2e6:666f6f6261720a:test123 [s]tatus [p]ause [r]esume [q]uit => Status.......: Cracked [...] Exemple d'attaque par force brute : $ /opt/oclHashcat/cudaHashcat -m 2 --hex-salt demo_hc.pw ?l?l?l?l ?d?d?d cudaHashcat v0.26 by atom starting... [...] 9dbd9a8c732fe79da116588afb97f2e6:666f6f6261720a:test123 [s]tatus [p]ause [r]esume [q]uit => Status.......: Cracked -- Sebastien Macke