jeudi 28 janvier 2010
Par défaut, lorsqu'on crée un utilisateur dans PostgreSQL, le mot de passe est encrypté en MD5 et stocké dans la table pg_shadow. On peut obtenir la liste des mots de passe en exécutant la requête SQL suivante :
SELECT usename, passwd FROM pg_shadowusername: code18
passwd: md5233737410cfd8ab44458c03a88f139ab
Sous Postgres, on sait que le nom d'utilisateur est ajouté comme salt à la fin du mot de passe, avant de l'encrypter (cliquez ici pour en savoir davantage sur l'encryption de mot de passe). Le md5 en début de chaîne indique le type d'encryption.
En retirant "md5", il reste ce hash à décrypter : 233737410cfd8ab44458c03a88f139ab
Pour le cracker et récupérer le mot de passe initial (pas seulement de Postgres), on peut utiliser un petit utilitaire de brute force très puissant, MDCrack, créé par Gregory Duchemin (un québécois, si on se fie à son adresse courriel @videotron.ca).
À titre d'exemple, si on encrypte un mot sur md5encrypter.com, on obtiendra le hash md5 (ce service crée une base de données des mots de passe encryptés et s'en sert pour donner une réponse rapide à l'équivalent décrypté. Il ne le fait pas en temps réel ou en utilisant du brute force). Par exemple, la chaîne de caractères "allo" encryptée en md5 donne : ce92c299bb5d344bdac1f9c03396b34f. Pour faire l'opération inverse, une simple ligne de commande suffit :
MDCrack-sse.exe --algorithm=MD5 ce92c299bb5d344bdac1f9c03396b34f
System / Thread #0: Collision found: allo
Info / Thread #0: Candidate/Hash pairs tested: 1 869 314 in 187 ms
MDCrack l'a résolu en 187 millisecondes. Cependant, à compter de 6 caractères, l'entropie augmente avec le nombre de possibilités et ça commence à être plus long. J'ai dû patienter 11 minutes pour cracker le mot de passe de mon utilisateur pour ce test. Avec le hash récupéré de pg_shadow pour le user code18, on indique l'information qu'on connaît et on exécute le tout :
MDCrack-sse.exe --algorithm=MD5 --append=code18 233737410cfd8ab44458c03a88f139ab
Le résultat (indiqué sous Collision found), après 6,3 millions de tests : gibsoncode18
En retirant le nom d'utilisateur code18, on déduit le mot de passe : gibson.