No soy muy fan de los ataques de diccionario porque la probabilidad real de encontrar el password es ínfima. Sin embargo, cuando hacemos diccionarios personalizados, que tienen en cuenta el idioma e información relevante de la víctima, las cosas pueden mejorar (un poco). El rollo está en que incluso con estos últimos podemos tener archivos muy grandes e ineficientes por contener tanta basura.
En esta entrada les voy a enseñar a crear diccionarios depurados que les sirvan de forma específica para el ataque que van a realizar. Es muy sencillo, veamos.
Uní varios diccionarios en español con el diccionario Real Human y me resultó un archivo de un poco más de 1GB. Eso no supone un problema. Sin embargo, al utilizarlo en un ataque contra la vulnerabilidad xmlrpc de WordPress noté que el tiempo se iba probando combinaciones que no tenían ningún sentido como las siguientes:
[-] 150.116.90.61:80 - Failed: 'admin:10' [-] 150.116.90.61:80 - Failed: 'admin:11' [-] 150.116.90.61:80 - Failed: 'admin:12' [-] 150.116.90.61:80 - Failed: 'admin:13' [-] 150.116.90.61:80 - Failed: 'admin:14' [-] 150.116.90.61:80 - Failed: 'admin:15' [-] 150.116.90.61:80 - Failed: 'admin:16' [-] 150.116.90.61:80 - Failed: 'admin:17' [-] 150.116.90.61:80 - Failed: 'admin:18' [-] 150.116.90.61:80 - Failed: 'admin:19'
No creo que el password del administrador de un blog grande sea 11 ó 17. Por muy estúpido y desprolijo que sea el admin utilizaría una contraseña más compleja. Además, muchos sistemas no permitirían usar contraseñas cortas. Si vamos a atacar, por ejemplo, una red WiFi actual, sabemos que nuestro diccionario debe contener líneas de 8 caracteres en adelante.
Por eso creé un script en Python que me permite crear diccionarios depurados para cada ocasión. Esto hace que los ataques tomen menos tiempo y tengan mayores probabilidades de éxito. El código es:
El script es interactivo y lo creé para que hiciera lo siguiente:
- Me pregunte la ubicación de un directorio que contiene los archivos en formatos .dic y .txt.
- Me pregunte el número mínimo y máximo de caracteres que debe tener cada palabra.
- Cree un nuevo diccionario solo con palabras que contengan el mínimo y máximo de caracteres señalados.
- Me informe el progreso que está teniendo el proceso.
- Elimine las palabras repetidas.
- Me informe la cantidad de líneas que contiene el nuevo archivo.
Probé el script en un directorio que contenía 9 diccionarios los cuales, en conjunto, tenían 19.064.744 líneas. Le pedí al script que uniera esos diccionarios en un nuevo archivo, que las palabras tuvieran un mínimo de 6 caracteres y un máximo de 14. El resultado fue el siguiente:
Bienvenido al script de manipulación de archivos de texto. Por favor, proporciona la ubicación del directorio que contiene los archivos de texto y diccionario: /home/karniv0r3/Tools/Scripts/Dics Mierda, me diste archivos pesados. Introduce el número mínimo de caracteres por palabra: 6 Introduce el número máximo de caracteres por palabra: 14 Progreso: 100.00%, Archivo: spanish_es_ES.dic-probable-v2.txt El archivo 'new.txt' se ha creado exitosamente con 16206489 líneas. Se procesaron un total de 16206489 palabras únicas.
En tiempo récord el script combinó y depuró los diccionarios en un solo archivo de 16.206.489 palabras únicas. Casi 3 millones de líneas menos que ya no tendrán que ser probadas una por una en el ataque.
Con el comando cat
le di una mirada somera al archivo. Después, lancé nuevamente el ataque y ahora cada palabra probada tenía el mínimo y el máximo de caracteres que le indiqué al script:
[-] 150.116.90.61:80 - Failed: 'admin:rapero' [-] 150.116.90.61:80 - Failed: 'admin:quimica' [-] 150.116.90.61:80 - Failed: 'admin:princesa6' [-] 150.116.90.61:80 - Failed: 'admin:powerade' [-] 150.116.90.61:80 - Failed: 'admin:pinki1' [-] 150.116.90.61:80 - Failed: 'admin:pinguino' [-] 150.116.90.61:80 - Failed: 'admin:pelanga' [-] 150.116.90.61:80 - Failed: 'admin:patch1' [-] 150.116.90.61:80 - Failed: 'admin:pass1234' [-] 150.116.90.61:80 - Failed: 'admin:omarbravo'
Estas pendejadas son muy fáciles de hacer y hacen más eficientes las pruebas de penetración. Que la contraseña buscada esté en el diccionario ya es otra canción. Si alguien quiere el script me envía un email y con gusto se lo comparto. Hasta la próxima.