Reproduzieren Sie die Passwörter / etc / shadow

385
imaibou

Ich versuche, einen / etc / shadow-Passwort-Hash manuell aus dem Klartext-Passwort und dem Salt zu reproduzieren. Nehmen wir als Beispiel den folgenden Schatteneintrag:

user:$1$/M$5GK8.h6z8o0WQLEOWC.YI/:16764:0:99999:7::: 

das Klartext-Passwort ist hier "toor". Ich habe versucht, das Salt an das Passwort anzuhängen (und vorauszusetzen) und es mit MD5 zu bearbeiten, aber ich bekomme nicht dasselbe Ergebnis wie in der Passwortdatei. Gibt es andere Transformationen, die das System im Klartext vornimmt, um den Hash abzuleiten? der Befehl, den ich verwendet habe, um den Hash zu generieren:

echo -n "/Mtoor"| md5sum 

Etwas anderes ist mir aufgefallen, dass der in der Datei gespeicherte Hash auf 176 Bits abbildet, während der herkömmliche md5 auf 128 Bits abbildet.

0
Es wird nicht mit MD5 gehashed, sondern [MD5Crypt] (https://en.wikipedia.org/wiki/Crypt_%28C%29#MD5-based_scheme). otus vor 8 Jahren 1

1 Antwort auf die Frage

0
grawity

Wie @otus feststellte, sind die Hashes kein reines MD5 - crypt () verwendet MD5Crypt, das einige Dutzend MD5-Iterationen umfasst (die genaue Menge hängt tatsächlich vom Hash selbst ab), etwas Bitshifting und etwas Pixie-Staub.

/* Then just as many characters of the MD5(pw,salt,pw) */

/* On a 60 Mhz Pentium this takes 34 msec */

/* Then something really weird... */

Kurz gesagt, es ist nicht etwas, das Sie mit basic reproduzieren können md5sum, sondern indem Sie die libc-Funktion crypt (3) aufrufen oder Tools wie mkpasswddie verwenden, die dasselbe tun:

# echo -n toor | openssl passwd -stdin -1 -salt /M $1$/M$5GK8.h6z8o0WQLEOWC.YI/ 

Sowohl der Salt- als auch der Hashwert in der crypt () -Ausgabe werden mit einem leicht modifizierten Base64 (6 Bit pro Byte) codiert, während md5sumder Hash im Hex-Format (4 Bit pro Byte) ausgegeben wird, so dass der Unterschied in der Ausgabelänge berücksichtigt wird .