CommandsStyle

martes, 26 de septiembre de 2017

Crea tu diccionario personalizado

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.

Diccionario


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:

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! ;)