Wat is het verschil tussen dit formaat:
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
en het volgende:
5f4dcc3b5aa765d61d8327deb882cf99
En ook,
Hoe verander je het eerste hash-formaat in het tweede?
Bedankt in advance.
Opmerkingen
Answer
Het eerste voorbeeld ziet eruit als een schaduwbestand -formulier at: ID (admin
) Algoritme (1
= MD5) Zout (geen) Hash (oLN1UCc1Y3T30QkMcKMSx0
), met de hash in wat lijkt te zijn Base64-indeling.
De tweede (5f4dcc3b5aa765d61d8327deb882cf99
) lijkt een hexadecimale reeks van 128 bits te zijn, wat overeenkomt met een MD5-hash zoals goed.
Als je echter beide converteert naar binair & en vervolgens terug naar hun tegenovergestelde formaten, komen de twee hashes niet overeen:
-
Base64 van de binaire waarde die wordt vertegenwoordigd door de hexadecimale reeks (
5f4dcc3b5aa765d61d8327deb882cf99
) isX03MO1qnZdYdgyfeuILPmQ
. -
Omgekeerd is de hexadecimale reeks van de base64-hash (
oLN1UCc1Y3T30QkMcKMSx0
)a0b3755027356374f7d1090c70a312c7
.------- Edit -----
Als user1686 wees erop: oLN1UCc1Y3T30QkMcKMSx0 is MD5crypt, dat is duizend MD5-rondes met extras bij elke ronde. Als beide hashes in feite van hetzelfde wachtwoord zijn, zou het mogelijk moeten zijn om de gewone MD5-hash om te zetten in het equivalent ervan no-salt MD5Crypt door de eerste MD5-berekening in de MD5Crypt te omzeilen en deze de hash in plaats van het wachtwoord in te voeren.
Answer
Het gedeelte na de laatste $ is base64-gecodeerd, wat een redelijk compacte manier is (vier tekens worden drie bytes) om binaire gegevens weer te geven als gewone, afdrukbare tekens (geen ASCII-besturingscodes of iets anders dat de hoge bit vereist). De tweede hash is eenvoudig hex-gecodeerd, wat minder efficiënt is (vier tekens worden twee bytes) maar gemakkelijker te lezen, vooral voor programmeurs (die altijd hex gebruiken).
BEWERKEN: Bovendien, de eerste algoritme is vrijwel zeker md5 crypt , wat een herhaalde MD5 is met wat extra dingen gedaan. Het zal dus niet dezelfde uitvoer produceren als basis MD5 voor een bepaalde invoer. En inderdaad, we zien dat dit niet het geval is: als je het deel na dat laatste $ naar hex converteert, komt er a0b3755027356374f7d1090c70a312c7 uit. Dat kan ook (op tenminste gedeeltelijk) omdat ik denk dat md5crypt een aangepaste base64 gebruikt, die dezelfde tekens heeft als normale base64 in een andere volgorde.
De eerste hash is een voorbeeld van het / etc / shadow wachtwoordformaat. $1
betekent MD5crypt, en het ontbreken van iets tussen de volgende twee $ karakters betekent dat het ongezouten is. We hebben dergelijke informatie niet voor de tweede; het kan gezouten zijn, of mogelijk een ander wachtwoord, een ander hash-algoritme of beide. Het is echter waarschijnlijker kale MD5 te zijn dan md5crypt.
Bewerkt om het verschil weer te geven tussen MD5 en md5crypt
Reacties
- Zelfs als het ' ongezouten is, is $ 1 $ nog steeds niet zomaar een kale MD5 – het is ' s md5crypt , wat 1000 ronden MD5 omvat met wat andere smaakmakers toegevoegd.
- De tweede hash is gewoon md5 (' wachtwoord ').
echo -n 'password' | md5sum
produceert5f4dcc3b5aa765d61d8327deb882cf99
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
. Ik heb hier ook een vergelijkbaar geval gevonden link