venerdì 10 dicembre 2010

Creare un dizionario di password personale con john the ripper

Abbiamo già visto le funzionalità di questo stupendo programma, oggi cercheremo di fare un passo in più ,utilizzeremo alcune funzioni avanzate del tool in modo da generare un file dizionario personalizzato. La cosa migliore per capire i concetti che esprimerò è fare un bell' esempio, diciamo che ci occorre un dizionario di password di lunghezza nota ,5 caratteri, e che tutte le password del dizionario siano composte solo dai numeri compresi fra 0 e 9 e le lettere a,b,c,d,e,f. La prima cosa da fare è aprire ,con il vostro editor di testo preferito, il file john.conf scorrerlo fino alla linea "# Incremental modes" e copiare qui il vostro incremental:custom_1.

[Incremental:custom_1]
File = $JOHN/alnum.chr
MinLen = 5
MaxLen = 5
CharCount = 36

Con queste 5 linee si comunica a john quanto segue:

File = $JOHN/alnum.chr Dice a john di utilizzare solo caratteri alfanumerici.
MinLen = 5 Dice a john che la minima lunghezza della parola è 5 caratteri
MaxLen = 5 Dice a john che la massima lunghezza della parola è 5 caratteri.
CharCount = 36 E' il conteggio dei caratteri disponibili nel file "alnum.chr".

Questo non è sufficiente per raggiungere il nostro obiettivo, in quanto nel file alnum.chr sono presenti anche altre lettere oltre che a,b,c,d,e,f, quindi bisognerà scrivere un bel filtro da utilizzare con il parametro -external.Per scrivere i filtri di john si deve utilizzare un sottoinsieme del linguaggio C, in particolare:

-Come cicli è ammesso solo il ciclo "while".
-Solo i tipi int e void sono ammessi.
-Non sono ammessi puntatori.
-Le strutture non sono supportate.
-Gli array possono avere una sola dimensione.

Come parametro di input al nostro filtro riceveremo da john l'array "word" a cui è possibile accedere , per filtrare le lettere che non ci interessano il filtro è questo:

[List.External:Filter_custom_1]
void filter()
{
int i, c;
i = 0;
while (c = word[i++])
if ((c < 'a' || c > 'f') && (c < '0' || c > '9')) {
word = 0; return;
}
}

Per chi conosce il C il suo funzionamento è ovvio, ogni parola che arriva da john è controllata carattere per carattere, se ci sono caratteri esterni agli insiemi 0-9 e a-f ,la parola viene scartata (mettendo word=0), se invece la parola è composta solo dai caratteri scelti questa viene accettata e la funzione ritorna.Per redere attivo il filtro copiatelo nel file john.conf subito sotto il codice di incremental:custom_1, fatto ciò salvate il file e chiudetelo.Quello che resta da fare adesso è lanciare john con la seguente sintassi:

./john -incremental:custom_1 -external:Filter_custom_1 -stdout > mydiz.txt

Il file mydiz.txt conterrà tutte le parole contenenti solo i caratteri scelti.

2 commenti:

  1. ciao, scusa un' informazione:
    che tu sappia esiste uno script per jtr per creare una wordlist di disposizioni semplici?
    grazie

    RispondiElimina
  2. Non so è probabile che qualcuno lo abbia fatto, ma sinceramente non so dirti dove trovarlo. Se hai voglia e tempo puoi scrivere uno script bash utilizzando questi algoritmi http://d1966.blogspot.it/2012/10/algoritmi-per-attacco-bruteforce.html . Utilizzando combinazioni e permutazioni puoi ottenere facilmente le disposizioni semplici

    RispondiElimina