Impossibile ottenere la base corretta per crackare Crypt3 SHA-512 su Linux con Python

5

Sto leggendo un libro e mi dà un semplice script Python per decifrare /etc/shadow di password che sono state crittografate con la funzione crypt() . Quindi ti sfida a modificare il programma Python per lavorare con il più recente algoritmo Crypt3 SHA-512 usato nei moderni sistemi Linux.

Mi sto bloccando sull'output dello stesso hash che è memorizzato in /etc/shadow . Ho un utente test1 con una password di password e /etc/shadow assomiglia a questo:

cat /etc/shadow | grep test1
test1:$6$sRgBNCzw$A3IHWJz./hdhPa1FHuN.Kn.P/2InPqGjZxxGnNUxY2I2b0t4xpogCKWkq9.Ra.XDaFSpNOb5UYhwjQMzBWrtp.:16792:0:99999:7:::

La forma più semplice del mio script assomiglia a questo:

import hashlib
dk = hashlib.pbkdf2_hmac('sha512',b'password',b'sRgBNCzw',5000)

Ispezionare dk assomiglia a questo:

>>> dk
'.YQ\xf0\xf1\x1f\x08\x0e\x9c\xa9-E\x90\x89\xebZ\xb1\x04ao:\x00;\x9a\xcb?\xaa\x04H\x14\xb6&\x9c\x0e}#\xbd\xf5\xe6\xa5\xd6\xda|xu\x1e\xa1\xd1\x95D\x94\x15\x19 \xccEX\\xf0g\x97|\\xee'

Quale credo sia il miglior sforzo di Python per rappresentare un blob binario come testo. Tuttavia, ho bisogno di confrontare questo con il valore hash della funzione Crypt3 che è:

A3IHWJz./hdhPa1FHuN.Kn.P/2InPqGjZxxGnNUxY2I2b0t4xpogCKWkq9.Ra.XDaFSpNOb5UYhwjQMzBWrtp.

Ora osservando il valore dell'hash nel file shadow posso vedere che sembra base64 quindi lo uso:

binascii.b2a_base64(binascii.hexlify(dk))

E ottieni questo:

'MmU1OTUxZjBmMTFmMDgwZTljYTkyZDQ1OTA4OWViNWFiMTA0NjE2ZjNhMDAzYjlhY2IzZmFhMDQ0ODE0YjYyNjljMGU3ZDIzYmRmNWU2YTVkNmRhN2M3ODc1MWVhMWQxOTU0NDk0MTUxOTIwY2M0NTU4NWNmMDY3OTc3YzVjZWU=\n'

Ulteriori letture mi hanno insegnato che la funzione Crypt3 utilizza una versione leggermente modificata di base64 che elimina il padding e '='.

Qualcuno può aiutare con il modo in cui posso ottenere che il mio hash corrisponda all'hash in /etc/shadow usando Python?

    
posta 0x7c0 23.12.2015 - 22:49
fonte

1 risposta

4

In base alle informazioni contenute in questa domanda , Sono riuscito a riprodurre con successo un hash.

Dopo aver impostato la mia password su password , ho eseguito questi comandi

$ sudo grep neil /etc/shadow
neil:$6$GpNiWKnm$aToSshPrg45wXFuP/Hmkkpf8/GUYg0d/C4eU/BH7iG2QwM.C59NIVr/izGUGXzf7HjqQNmpFXhxtIxGtXNrmj0:16793:0:99999:7:::
$ python -c 'import crypt; print crypt.crypt("password", "$6$GpNiWKnm$")'
$6$GpNiWKnm$aToSshPrg45wXFuP/Hmkkpf8/GUYg0d/C4eU/BH7iG2QwM.C59NIVr/izGUGXzf7HjqQNmpFXhxtIxGtXNrmj0
$ python --version
Python 2.7.10

Va notato che l'algoritmo di hash che è in uso può essere determinato dal valore tra la prima coppia di segni del dollaro. In questo caso, $6$ significa che è sha-512 ( reference ) .

    
risposta data 24.12.2015 - 07:20
fonte

Leggi altre domande sui tag