
Exploit personalizzato scritto per enumerare i nomi utente come da CVE-2016-6210
Exploit personalizzato (python 2.7) scritto per l'enumerazione dei nomi utente secondo CVE-2016-6210 (OpenSSH 7.2-p2 e versioni precedenti)
da utilizzare solo su sistemi autorizzati
Ho scritto questo programma come strumento per sfruttare CVE-2016-6210, una vulnerabilità in OpenSSH (prima della versione 7.3) segnalata da Eddie Harari
Da quello che ho capito, il problema è che il modo in cui OpenSSH funzionava in queste versioni fa sì che, quando viene fornita una password molto lunga (in questo caso 25kb), i tempi di elaborazione dell'hashing ci permettano di capire se un nome utente esiste o meno, poiché il tempo impiegato è maggiore per gli utenti validi
Questo programma aiuta a sfruttare questa vulnerabilità consentendo all'utente di inviare una serie di nomi utente (da una wordlist) e di calcolare quanto tempo è servito per elaborarli. L'utente può impostare una soglia di allarme per una quantità di tempo adatta alle proprie esigenze; il tempo e il nome utente verranno visualizzati se il tempo di elaborazione supera tale soglia.
L'utente può anche aggiungere un indirizzo IP o un'email per testare sia l'elemento della lista sia con e senza il suffisso email alla fine. Di default (se non viene fornito un suffisso), il programma testerà ogni parola della wordlist nelle forme parola e parola@IP. Se viene fornito un suffisso, farà lo stesso, ma sostituendo parola@IP con parola@suffisso.
Il numero di volte in cui ogni parola viene inviata e il tempo di risposta viene misurato può essere personalizzato; il programma genererà automaticamente un tempo di elaborazione medio che verrà poi utilizzato al posto dei singoli tempi, per motivi di affidabilità.
È anche possibile impostare un ritardo, per evitare che il programma invii troppe richieste troppo rapidamente.
Per quanto riguarda il codice della richiesta ssh, il merito va a Eddie Harari per la maggior parte del codice in cveCode.py: una versione modificata del codice di Harari viene usata per l'invio e
il calcolo dei tempi. La sua advisory e il codice di esempio si trovano qui
Nota: Il mio codice è stato testato solo come scatola nera su OpenSSH-7.2p2 (il client è kali linux), e necessita di ulteriori test. I risultati e i parametri sono controllati e interpretati dall'utente
python exploit_6210.py IP_ADDRESS [-h] [-a ALERT] [-w WORDLIST] [-e EMAIL] [-av ITERATE_AMOUNT] [-d DELAY]
Dove:
IP_ADDRESS è l'host contro cui stai testando il programma
-a ALERT (opzionale, default 0.1) è la quantità di tempo (in secondi) oltre la quale desideri ricevere un avviso se il tempo di elaborazione è maggiore
-w WORDLIST (opzionale, default usernamelist) è il percorso del file per la lista di nomi utente che desideri testare contro l'host
-e EMAIL (opzionale) è il suffisso ip o email (che dovrebbe avere questa forma: @IP_ADDRESS o @email.com) che desideri provare in coda a ciascun elemento della wordlist (nota che verranno provati sia l'elemento sia l'elemento + email)
-av ITERATE_AMOUNT (opzionale, default 1) è il numero di volte in cui interrogare il server ssh per ciascun nome utente, consentendo di utilizzare medie più affidabili per i tempi (più alto è il numero, più tempo richiederà, e di MOLTO)
-d DELAY (opzionale, default 0.5) è il ritardo approssimativo (in secondi) tra una richiesta e l'altra (più alto è il numero, più tempo richiederà, e di MOLTO)