Escenario

A quién no le ha ocurrido que, en algún momento, se ha vuelto paranoico y ha cifrado cualquier disco duro y/o pendrive que ha caido en sus manos. A quién no le ha ocurrido que no lo ha usado durante meses y no recuerdas la contraseña. A quién no le ha ocurrido que utilizas una lista de contraseñas y combinaciones de ellas.

A mí sí.

En este escenario es donde se nos ocurre: hagamos un crackeador para que pruebe todas las contraseñas que tenemos en nuestra lista mental. Así que, escribimos todas las contraseñas en un fichero de texto.

Seguidamente las combinamos. Esto con un simple script que las recorra en dos bucles anidados, está hecho:

#!/usr/bin/env python

f = open('lista.txt')
g = open('passwords.txt','w')
words = []

for i in f:
    words.append(i.rstrip('\n'))

for primera in words:
    for segunda in words:
        g.write( primera + segunda + '\n' )

f.close()
g.close()

El ataque de fuerza bruta

Una vez tenemos el fichero con las contraseñas, haremos un comprobador de contraseñas en una única línea de BASH (que aquí divido en varias por comodidad visual en el blog):

while read p; do 
   echo -n $p \
| sudo cryptsetup --test-passphrase -d - luksOpen /dev/sdb1 plainname \
   && echo $p && break
done < passwords.txt

A grosso modo, ésto lee cada línea del fichero passwords.txt que le pasamos por la entrada estándar y se lo pasa a cryptsetup por el pipe quien únicamente comprueba la contraseña en /dev/sdb1 (cambiar según las necesidades) y cuando no devuelva error imprime la contraseña y termina el bucle.

Y así es como crackeé un disco cifrado con un par de contraseñas de una lista y pue acceder al contenido de mi disco de 160GB que tenía olvidado por ahí.

Si conoces alguna otra forma de hacerlo o te ha ocurrido algo parecido, compártelo a través de los comentarios, por favor.