* NIX formato della password del file shadow

7

Sto cercando di ottenere l'accesso alla shell su un router e sono riuscito a recuperare il suo file / etc / shadow :

root:$1$$N76hdwGfg11g0KdKbtyh21:0:0:root:/root:/bin/bash

Ho provato a utilizzare john per craccarlo ma non è stato possibile:

$ ./john --show passwd
0 password hashes cracked, 1 left

Ho anche creato un account di prova e sono riuscito a craccarlo su ubuntu / debian:

$ ./john --show passwd_test 
testtesttest:test:16626:0:99999:7:::

1 password hash cracked, 0 left

dove testtesttest è l'utente e verifica la password. In che formato è inserito l'hash della password?

Modifica:

Trovato qui . Sarebbe bello sapere il suo formato però.

    
posta Sebi 10.07.2015 - 22:41
fonte

2 risposte

15

Il formato più comune per gli hash su sistemi Unix ha la forma $ALG$SALT$OUTPUT dove ALG è un piccolo numero che identifica l'algoritmo, SALT è un sale per hash e OUTPUT è l'output della funzione di hash. SALT e OUTPUT sono codificati in base64.

Algorithm 1 è "MD5 crypt", un costrutto basato sull'iterazione della funzione hash MD5. Questo algoritmo non era (e non è ancora, per quanto ne so) definito da uno standard formale. Era introdotto da Poul-Henning Kamp in FreeBSD nel 1994 .

Le normali API aggiungono un sale. L'implementazione originale ha forzato un sale a 48 bit. Il conteggio delle iterazioni è fisso su 2477, che l'autore ha confrontato per 34 μs su un PC di fascia alta del tempo. Il tuo hash è vuoto, il che è inusuale e ha richiesto allo sviluppatore o all'amministratore che lo ha configurato di ignorare i soliti strumenti e probabilmente chiamare direttamente una funzione di libreria.

Gli attuali sistemi Linux solitamente usano algoritmi 5 e 6 , che sono basati sull'iterazione di SHA-256 e SHA-512 rispettivamente. Questi costrutti sono ampiamente basati sullo stesso principio di PBKDF2 , ma calcolano l'hash iterato in modo diverso.

Puoi trovare una grande quantità di informazioni sugli algoritmi di hash delle password nella documentazione della libreria passlib , e ovviamente la libreria ti dà implementazioni Python. Questo algoritmo è passlib.hash.md5_crypt .

    
risposta data 10.07.2015 - 23:24
fonte
10

Supponendo che il router segua lo standard glibc per gli hash delle password, il secondo campo ( $1$$N76hdwGfg11g0KdKbtyh21 ) è la password ed è codificato come segue:

  • $1$ : hash MD5 iterato
  • $ : senza sale
  • N76hdwGfg11g0KdKbtyh21 : la password con hash, nella codifica base64. Nella codifica esadecimale, sarebbe 37bea177019f835d60d0a74a6edca1db
risposta data 10.07.2015 - 23:24
fonte

Leggi altre domande sui tag