Newsgroup: it.comp.lang.perl
Titolo: come saqpere se una pw è corretta per un utente.

vorrei mostrare quanto vunerabile è la politica delle pw
scelta in un laboratorio (utilizza la data di nascita dell'utente).
gli "amministratori" non credono alla vulnerabilità a cui è soggetta la
loro rete.
il mio obbiettivo è quindi quello di scoprire le pw conoscendo tutti gli
utenti.
data un pw $pw e un utente $utente quale è il modo più rapido per
verificare che l'utente abbia la pw=$pw?
Grazie in anticipo, MArio.



Ma vuoi il codice o qualche suggerimento?
Per il codice mo mi scoccio :)
Per qualche suggerimento:
Prendi uno dei vari moduli sul tempo(ma non necessariamente, puoi
farti la generezione delle date da te, noto il formato della data),
genera tutte le date a partire da. che so, dipende dall'età media
delle persone, 1960-80 e le provi tutte sequenzialmente.
Se ho capito bene il msg, dovrebbe solo essere una questioni di
minuti.
Ciaz
--
www.pigmalion.info
www.pigmalion.info/perl/

> Ma vuoi il codice o qualche suggerimento?
una parte del codice:
quella che data $pw e $utente verificha che la coppia di valori
($utente,$pw) va bene: il mio problema è che non saprei come verificare la
cosa. 
Grazie in anticipo, Mario.

 verificare che l'utente abbia la pw=$pw? Grazie in anticipo, MArio.
Non ci dici di che tipo di password si tratti, ne` di quale sistema
operativo parli, quindi defaulto ad un *nix, con password crittate
vecchio stile.
Se non e` cosi` peggio per te, cosi` impari ad essere tuo-OS-centrico
:-)
man perlfunc, cerca la descrizione di crypt.
In pratica devi avere la password crittata, cosi` come e` presente nel
file delle password, devi crittare la password candidata e confrontare
le due stringhe.
Occhio ai primi due caratteri della password: sono quello che la
documentazione chiama "salt".
-- 
Rev. Nando Santagata
To send me an e-mail change "seemysignature" into "ipers"

 le due stringhe.
Stupendo!!!!
ma le password nei sistemi più recenti non sono nel file:
/etc/passwd
dove posso trovarle per fare quello che hai detto?
sono accessibili tramite utente?
Grazie per avermi risposto.
Mario.

 sono accessibili tramite utente?
secondo te?
-- 
                         Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Sex is not the answer. Sex is the question. "Yes" is the answer.

 secondo te?
ho provato: no!
quindi se non posso leggerli, non posso neanche usarli come utente!
il problema resta: data $id e $pw come fare a sapere se la coppia $id e
$pw costituiscono una login e pw corretta?
Grazie per avermi risposto, Mario.

 secondo te?
Non non lo sono, /etc/shadow non e' world-readable se non non ci sarebbe
nessuna differenza con il mantenere le pwd in /etc/passwd.
-- 
Saluti,
Giancarlo

 costituiscono una login e pw corretta? Grazie per avermi risposto,
In /etc/shadow possono esserci sia password "old style", che password
MD5.
Le password MD5 sono facilmente riconoscibili, perche` piu` lunghe e
perche` cominciano con "$1$".
In ogni caso, usa questo comando per generare le password:
openssl passwd -1 -salt salt password
Per individuare il salt guarda la password che trovi in /etc/shadow e
considera gli otto caratteri dopo $1$ e prima del $ successivo.


 openssl passwd -1 -salt salt password
Scusate, per avere la stessa cosa in pure Perl:
use Crypt::PasswdMD5
print unix_md5_crypt("password","salt"), "\n"


 print unix_md5_crypt("password","salt"), "\n"
Ma basta la semplice funzione crypt senza caricare moduli aggiuntivi.
Se il sistema usa le password cryptate in md5 la funzione crypt delle
libc (da cui la funzione perl eredita il comportamento) e' tale che con
un salt corretto (ovvero che inizia con qualcosa del tipo $1$asdfghjk$)
restituisce una stringa cryptata md5. Se invece la funzione c crypt
nmon supporto la cifratura md5 allora le password in passwd o shadow
sono per forza cifrate con l'argoritmo unix standard.
Inoltre non serve prendere i primi n (2 o 12 a sweconda dell'algoritmo)
della password scritta nel file di sistema, ma si puo' usarla tutta
come salt. Cioe'
crypt("pippo","pippo") o crypt("pippo","$1$asdfghjk$pippoqwertyuio...")
sono equivalenti a
crypt("pippo","pi") e crypt("pippo","$1$asdfghjk$")
-- 
Saluti,
Giancarlo