Qual è la differenza tra questo formato:
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
e i seguenti:
5f4dcc3b5aa765d61d8327deb882cf99
E inoltre,
Come trasformare il primo formato hash nel secondo?
Grazie a anticipo.
Commenti
Risposta
Il primo esempio ha laspetto di un file shadow in: ID (admin
) Algoritmo (1
= MD5) Salt (nessuno) Hash (oLN1UCc1Y3T30QkMcKMSx0
), con lhash in quello che sembra essere il formato Base64.
Il secondo (5f4dcc3b5aa765d61d8327deb882cf99
) sembra essere una stringa esadecimale di 128 bit coerente con essere un hash MD5 come bene.
Tuttavia, convertendo entrambi in binario & e poi di nuovo nei loro formati opposti, i due hash non corrispondono:
-
Base64 del valore binario rappresentato dalla stringa esadecimale (
5f4dcc3b5aa765d61d8327deb882cf99
) èX03MO1qnZdYdgyfeuILPmQ
. -
Al contrario, la stringa esadecimale dellhash base64 (
oLN1UCc1Y3T30QkMcKMSx0
) èa0b3755027356374f7d1090c70a312c7
.------- Edit -----
Come user1686 sottolineato: oLN1UCc1Y3T30QkMcKMSx0 è MD5crypt, che è un migliaio di round di MD5 con extra ad ogni round. Se entrambi questi hash provengono dalla stessa password, dovrebbe essere possibile convertire lhash MD5 semplice nel suo equivalente no-salt MD5Crypt bypassando il primo calcolo MD5 in MD5Crypt e inserendo lhash invece della password.
Answer
La parte dopo lultimo $ è codificata in base64, che è un modo ragionevolmente compatto (quattro caratteri diventano tre byte) per rappresentare i dati binari come caratteri comuni e stampabili (non codici di controllo ASCII o qualsiasi cosa che richieda il bit alto). Il secondo hash è semplicemente codificato in esadecimale, che è meno efficiente (quattro caratteri diventano due byte) ma più facile da leggere, specialmente per i programmatori (che usano sempre esadecimale).
EDIT: Inoltre, il primo lalgoritmo è quasi certamente md5 crypt , che è un MD5 iterato con alcune cose aggiuntive fatte. Quindi, non produrrà lo stesso output dellMD5 di base per un dato input. E infatti vediamo che non lo fa: se converti la parte dopo lultimo $ in esadecimale, viene visualizzato a0b3755027356374f7d1090c70a312c7. Anche questo potrebbe almeno in parte) perché penso che md5crypt utilizzi un base64 personalizzato, che ha gli stessi caratteri del normale base64 in un ordine diverso.
Il primo hash è un esempio del formato / etc / shadow della password. $1
significa MD5crypt e la mancanza di qualcosa tra i prossimi due $ caratteri significa che non è salato. Non abbiamo tali informazioni per il secondo; potrebbe essere salato, o forse una password diversa, un algoritmo hash diverso o entrambi. Tuttavia, è più probabile che sia un semplice MD5 rispetto a md5crypt.
Modificato per riflettere la differenza tra MD5 e md5crypt
Commenti
- Anche se ' non è salato, $ 1 $ non è ancora solo un semplice MD5, ma ' s md5crypt , che prevede 1000 round di MD5 con laggiunta di altri condimenti.
- Il secondo hash è solo md5 (' password ').
echo -n 'password' | md5sum
produce5f4dcc3b5aa765d61d8327deb882cf99
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
. Ho anche trovato un caso simile qui link