Hoy vamos a ver cómo podemos generar un diccionario.
Este diccionario nos puede servir para intentar averiguar la contraseña de un usuario (para averiguar un nombre de usuario, o para lo que se nos ocurra que pueda sernos útil un diccionario) sin probar todas las posibles combinaciones.
Hay que tener en cuenta, que con un diccionario no nos aseguramos encontrar el dato que buscamos, en este caso una contraseña, sino que probaremos un conjunto de datos que puede contener el dato que estamos buscando.
También podemos hacer un diccionario con todas las combinaciones para hacer un ataque por fuerza bruta “clásico”con el cual si que nos aseguramos de encontrar el dato que estamos buscando, al fin y al cabo estamos probando todos los datos posibles.
Nos vamos a centrar en la creación de un diccionario de contraseñas, pero siguiendo la misma lógica, podríamos crear diccionario de usuarios o de cualquier otra cosa que necesitemos.
Lo primero que tenemos que hacer es investigar nuestro objetivo. Y como vamos a genera un diccionario de contraseñas, tenemos que investigar tanto al sistema como al usuario.
Respecto al sistema, algunas de las preguntas que tenemos que responder son:
- ¿Qué longitud de contraseña mínima permite el sistema?
- ¿Qué longitud de contraseña máxima permite el sistema?
- ¿Qué caracteres permite introducir el sistema?
- ¿El sistema obliga a la utilización de algún carácter especial?
- ¿El sistema obliga a la utilización de mayúsculas y números?
- ...
Es decir, tenemos que averiguar que cuales son los requisitos de contraseña del sistema para no generar entradas en el diccionario que no sean válidas para el sistema.
Una vez hecho esto, tenemos que estudiar a nuestro usuario objetivo.
- Nombre y apellidos
- Fecha de nacimiento
- Nombre de los hijos
- Fecha de nacimiento de los hijos
- Nombre de sus mascotas
- Nombre y apellidos de su pareja y/o amigos
- Series de televisión y película favorita
- Empresa en la que trabaja
- …
Toda la información que podamos adquirir de nuestro objetivo es bienvenida. Para esto podemos ponernos creativos, pero un clásico es utilizar las redes sociales ;)
¿Para qué queremos toda esta información?
Para responder a esta pregunta, primero hay que pensar que las contraseñas tienen que ser datos fácilmente recordables, y para el usuario común lo más fácil de recordar es todo lo que le rodea en su vida cotidiana (es decir, los datos que hemos visto anteriormente).
Un detalle importante aquí, es que debido a los requisitos de complejidad de contraseña de los sistemas, los usuarios tienden a añadir una mayúscula, o un numero a los datos que conocen.
Por ejemplo, si un usuario tiene un perro que se llama “fuego”, y el sistema requiere que la contraseña tenga un número, una posible modificación seria “fu3go”.
Siguiendo esta lógica, las modificaciones mas comunes son:
- Cambiar:
- “a” por “4”
- “a” por “@”
- “e” por “3”
- “s” por “$”
- “o” por “0”
- “1” por “1”
- “t” por “7”
- …
- Eliminar las vocales de las palabras.
- Añadir el año de nacimiento al final de una palabra
- …
Todo esto sin descuidar que puede utilizar uno de los datos anteriores sin modificar, ya que puede que cumpla los requisitos del sistema.
Una vez vista la teoría, vamos a hacer un diccionario. Para ello, utilizaremos el sistema operativo Kali, ya que trae instaladas y configuradas las herramientas “crunch” y “John the ripper”, que son las que vamos a utilizar.
Para este ejemplo, vamos a suponer que los datos de nuestro usuario son:
Nombre: Juan
Apellidos: Informatico Averno
Empresa en la que trabaja: AvernizateSA
Fecha de nacimiento:13-1-1950
Y que los requisitos de las contraseñas del sistema son:
- Longitud de 8 caracteres como minimo
- Al menos un numero
Es un programa que nos permite generar un diccionario en función de unas especificaciones que le indiquemos.
Es decir, podemos pedir que nos genere un diccionario con las letras "a", "b" y "c" y los números "1","2" y "3". y que las palabras que nos genere tengan una longitud comprendida entre 8 y 9 caracteres.
crunch 8 9 abc123 > diccionarioFuerzaBruta.txt
El diccionario generado contendrá entre otras las siguientes entradas:
aaaaaaa2 aaaaaaa3 aaaaaaba aaaaaabb aaaaaabc aaaaaab1 aaaaaab2 aaaaaab3 aaaaaaca aaaaaacb aaaaaacc aaaaaac1 aaaaaac2 aaaaaac3 aaaaaa1a aaaaaa1b |
Otra opción es utilizar los patrones de caracteres, de forma que nos inserte automáticamente todas las mayúsculas, todas las minúsculas todos los números o todos los símbolos en una posición determinada.
Teniendo en cuenta que los patrones se definen con las siguiente nomenclatura:
- "@" = Letra minúscula
- "," = Letra mayúscula
- "%" = Número
- "^" = Símbolo
Podemos crear patrones del tipo:
crunch 8 8 -t @@@@,%%^ > diccionarioFuerzaBruta2.txt
Si sabemos que la contraseña del usuario empieza por ejemplo por "AV", podemos generar un diccionario que contenga todas las entradas que empiecen por "AV".
crunch 8 8 -t AV@@,%%^ > diccionarioFuerzaBruta2.txt
NOTA: Hay que tener en cuenta, que el patrón que propongamos, tiene que ser de la misma longitud máxima y mínima que indiquemos en los primeros parámetros.
Cambien podemos hacer que crunch nos genere un diccionario realizando una concatenación de palabras formando todas las permutaciones posibles entre ellas. Esto se haría mediante el comando:
crunch 1 1 -p Juan Informatico Averno AvernizateSA 1950 > diccionario.txt
NOTA: Hay que tener en cuenta que la longitud que utilicemos sea 1 como máxima y mínima.
El diccionario generado contendra entre otras, las siguientes entradas:
JuanInformaticoAvernizateSA1950Averno JuanInformaticoAvernizateSAAverno1950 JuanInformaticoAverno1950AvernizateSA JuanInformaticoAvernoAvernizateSA1950 |
John the ripper es una herramienta que entre otras cosas que ahora no vienen al caso ;) nos permite realizar modificaciones a un diccionario de forma que sea mucho mas completo.
Podemos tomar como partida un diccionario creado con crunch, o con cualquier otra herramienta, o un diccionario que creemos "a mano".
Las modificaciones que John The Ripper aplicara al diccionario original, están definidas en el fichero /etc/john/john.conf
En concreto están justo después de la linea
[List.Rules:Wordlist]
Aquí podemos añadir nosotros nuestras propias reglas, como pueden ser:
#Cambiar “A” por “4” /AsA4[:c] #Cambiar “a” por “4” /asa4[:c] #Cambiar “A” por “@” /AsA@[:c] #Cambiar “a” por “@” /asa@[:c] #Cambiar “E” por “3” /EsE3[:c] #Cambiar “e” por “3” /ese3[:c] #Cambiar “S” por “$” /SsS$[:c] #Cambiar “s” por “$” /sss$[:c] #Cambiar “S” por “5” /SsS5[:c] #Cambiar “s” por “5” /sss5[:c] #Cambiar “A” por “@” y “E” por “3” /AsA@/EsE3[:c] #Cambiar “a” por “@” y “e” por “3” /asa@/ese3[:c] #Cambiar “A” por “@” y “e” por “3” /AsA@/ese3[:c] #Cambiar “a” por “@” y “E” por “3” /asa@/EsE3[:c] |
Estos son algunos ejemplos, pero podríamos generar tantas reglas como necesitemos en función de lo completo que queramos que sea nuestro diccionario.
Para utilizar a John The Ripper para mejorar nuestros diccionarios por medio de las reglas que tengamos definidas, haremos uso del comando
john --stdout --wordlist=diccionario.txt --rules > diccionarioCompleto.txt
Si introducimos el diccionario que hemos generado en el ejemplo del comando crunch, el resultado tendrá entre otras, las siguientes entradas:
Por ultimo, en ocasiones puede que se generen diccionarios con entradas duplicadas, para eliminar las entradas duplicadas de un diccionario, podemos hacer uso del comando:
Ju@nInform@tico@verniz@teS@1950@verno Ju@nInform@tico@verniz@teS@@verno1950 Ju@nInform@tico@verno1950@verniz@teS@ Ju@nInform@tico@verno@verniz@teS@1950 |
Por ultimo, en ocasiones puede que se generen diccionarios con entradas duplicadas, para eliminar las entradas duplicadas de un diccionario, podemos hacer uso del comando:
cat diccionario.txt | sort | uniq > diccionarioSinDuplicados.txt
Pues con esta entrada ya sabemos como generar un diccionario y como hacerle mas o menos completo en función de nuestras necesidades. Proximamente veremos como utilizar nuestro diccionario.
Hasta la siguiente! ;)
Buen post, como siempre. Ya se echaban en falta ;)
ResponderEliminarQUIERO HACER UN DICIONARIO QUE GENERE MAYUSCULAS MINUSCULAS NUMEROS Y SIMBOLOS
ResponderEliminarEJEMPLO:
AAAAAAAAAA
AAAAAAAAAB
AAAAAAAAAa
AAAAAAAAAb
AAAAAAAAA1
AAAAAAAAA2
AAAAAAAAA$
AAAAAAAAA#
y que lo haga entre 10 y 20 caracteres
Mira una herramienta que se llama crunch. Esa herramienta puede ayudarte con lo que necesitas.
Eliminarhttps://www.kali.org/tools/crunch/