In quest’articolo vorrei spiegare come concatenare alla destra di una wordlist dei numeri generati dal programma Crunch. Lanciando il comando

[CC lang="bash"]
crunch -v
[/CC]

Possiamo verificare la presenza del programma sulla nostra distribuzione linux. Se non otteniamo la versione del programma, allora vorrà dire che dovremo provvedere a scaricarla con un gestore dei pacchetti, oppure direttamente dai sorgenti (verrà mostrata questa scelta).

Dopo aver scaricato il tarball da http://sourceforge.net/projects/crunch-wordlist/ possiamo eseguire i seguenti comandi per l’installazione

[CC lang="bash"]
tar xczf crunch-3.2.tgz
cd crunch3.2
make
make install

[/CC]

Per l’ultimo comando potrebbe essere necessario essere root. L’arternativa al make install potrebbe essere quella di copiare anche semplicemente l’eseguibile su /usr/bin od un’altra directory nella PATH

Installato crunch possiamo procedere alla realizzazione di un semplice shell script scritto ad hoc proprio per il nostro scopo.

[cc escaped=”true” lang=”bash”]

#!/bin/sh

echo > newwordlist.txt

while read WORD
do
LEN=${#WORD}
LEN1=$((LEN+1))
LEN2=$((LEN+2))
crunch $LEN1 $LEN1 -f charset.lst numeric -u -t $WORD% >> newwordlist.txt
crunch $LEN2 $LEN2 -f charset.lst numeric -u -t $WORD%% >> newwordlist.txt
done < wordlist.txt

[/CC]

Lo script legge ogni riga del file wordlist.txt, per ciascuna riga letta genera in successione su un nuovo file newwordlist.txt, tante righe quante sono le combinazioni risultati dalle istruzioni date.
La prima linea di comandi passati a crunch esegue le combinazioni aggiungendo un solo carattere dal charset specificato tramite il parametro -f. Il secondo comando similmente ne aggiunge2 alla volta. Il parametro -u evita di mandare in output informazioni statistiche sulla generazione dei dati che crunch sta per effettuare. Il parametro -t permette di specificare un pattern da seguire nelle regole di generazione della wordlist.

Crunch prevede tante altre opzioni, la cui spiegazione va oltre lo scopo di quest’articolo, per cui vi rimando al relativo manuale.

Da una wordlist tal composta:

[CC lang=”bash”]
lun
mar
mer
gio
ven
sab
dom
[/CC]

ecco le prime 20 linee generate dal precedente shell script:

[CC lang=”bash”]
lun0
lun1
lun2
lun3
lun4
lun5
lun6
lun7
lun8
lun9
lun00
lun01
lun02
lun03
lun04
lun05
lun06
lun07
lun08
lun09
[/CC]