Que es crunch.

Crunch es un programa que basandose en criterios establecidos por el usuario (input) es capaz de generar diccionarios para ser usados en fuerza bruta (output), el resultado de Crunch puede ser visto en pantalla, puede ser guardado en un archivo .txt ó puede enviarse a otro programa en tiempo real para su uso.

La version 1.0 fue creada por mima_yin (mimayin@ACiiiD.ath.cx) y todas las versiones posteriores fueron actualizadas y desarrolladas por bofh28 ([email protected]) a ellos todo el agradecimiento y el respeto por tan maravillosa herramienta.

Página oficial:  http://sourceforge.net/projects/crunch-wordlist/files/

Usar crunch nivel 1.

Basta con escribir “crunch” en una terminal para conseguir informacion:

 

 

 

 

Donde podemos leer claramente lo que podemos hacer.

Es tan sencillo como decirle la cantidad de caracteres que estamos buscando seguido de alguna opción, vamos a lanzarlo de una forma basica a ver que tal, probemos con generar todas las posibles combinaciones para una palabra de 4 caracteres:

 

 

 

 

Como se aprecia en la imagen crunch informa de una froma muy educada cuantas lineas serán generadas y cuanto espacio ocupará, a continuacián les comparto las primeras 50 lineas de la salida en pantalla:

Vamos a analizar esto..

Tenemos que crunch ha generado todas las posibles combinaciones para una palabra de 4 caracteres, pero… ¿ notan alguna particularidad?

No ha utilizado:

  • Números,
  • Símbolos,
  • Mayúsculas
  • Ni espacios en blanco.

La razón se explica a continuación:

Crunch utiliza una variable llamada charset (character setting) y es como el conjunto de caracteres que serán usados para la generación del diccionario/wordlist, por defecto el charset es lalpha (lower alphabet) pero que tal si configuramos otro charset.

Como siempre, al presionar enter crunch indicará cuantas líneas y cuanto espacio será utilizado, analicemos las primeras 50 líneas:

Todo ha ido bien, pero ahora notamos una pequeña diferencia, solo ha generado números, eso es justo lo que queríamos ¿ no ? Y como lo hemos logrado pues con la opción -f.

Esta opción indica dónde buscar el fichero de variables, es decir, donde están preestablecidas todos los charsets, debemos especificar la ruta al archivo así como nuestra selección dentro del mismo, en mi caso tengo el charset.lst en mi directorio home, por ello no específico ruta hasta el mismo.

Cuantos charsets podemos elegir además de  ¿ lalpha y de numeric ?

De no querer especificar ningún charset, simplemente pasar a crunch cuales caracteres desean usar, por ejemplo:

la salida sería:

Empiezan a entender el sentido de la palabra “Flexibilidad” para referirse a crunch.

Usar crunch nivel 2.

Hasta ahora hemos aprendido a usar crunch, es decir generarando diccionarios especificando el tamaño y el conjunto de caracteres a usarse, y muchos pensaran que esa es toda la magia de generar diccionarios…..

Recuerdan aquella película de hackers en la que el estelar mira el teclado del administrador de sistemas y logra ver la clave digitada en el teclado.

En la vida real quizás no sea tan sencillo ver toda la clave digitada y solo logramos recordar parte de la misma y quizás su tamaño (si su tamaño, yo suelo contar las pulsaciones en el teclado asi me hago una idea del tamaño) pues supongamos que queremos generar una clave que inicia con “Und……” pero no sabemos el resto, pues podríamos decirle a crunch:

Y esto generará:

Si nos fijamos crunh ha generado palabras sin modificar los 3 primeros caracteres, con lo cual si la palabra clave es “undercode” eventualmente será generada, pero….

¿ Qué pasaría si el admin del sitio ha querido complicarla y ha puesto “underc0de” como password ?

Podemos hacerlo de dos formas, una sencilla y otra un poco mas compleja, para la forma compleja podriamos hacerlo al especificar un charset alfanumerico escribiendo:

Ó tal vez especificando los caracteres a utilizar:

Con ambos comandos tendríamos el mismo resultado, simplemente son dos formas de hacer lo mismo.

Ahora viene la forma sencilla que es simplemente cambiar el símbolo “@” por el tipo de carácter que queremos insertar en la generación de diccionario, recuerden que con la opción -t, podemos especificar un patrón de caracteres que serán los únicos en cambiar al generar el diccionario, así los caracteres que podemos especificar para el patrón son:

  • @  Insertará minúsculas.
  • ,  Insertará mayúsculas.
  • %  Insertará números.
  • ^  Insertará símbolos.

Sabiendo esto vamos a suponer que queremos generar un diccionario donde la primer letra sea mayúscula, pero que a lo largo del mismo, tanto el segundo como el tercer caracter se queden fijos, para hacerlo agregamos una “,” ésto insertará mayúsculas, recordar qué había un número en la contraseña, así que también necesitamos insertar un solo número en el septimo carácter de nuestra palabra, pues sólo contamos hasta el lugar número siete e insertamos un “%” solo insertará números, el comando final quedaría:

Toda esta flexibilidad hemos logrado con la opción -t.  No piensen que hemos terminado, Ohh no mis amigos!!! Esto continúa y se pone mejor!!!

Vamos a generar un diccionario concatenando palabras, a imaginarse por cual razón algunas personas usan como password una serie de palabras unidas, por ejemplo alguien que le guste harry potter podría usar los nombres de:

  • Harry
  • Hermione
  • Ron

Como password y en ese caso generar simplemente por caracteres sería casi imposible dada la longitud final “harryhermioneron” así que en crunch existe una opción que nos permite concatenar palabras, veamos como:

 

 

 

 

 

 

Como se habran fijado con la opción -p es posible lograr concatenar palabras, pero hay una particularidad y es que fijense que en la parte donde se especifican la longitud menor y la mayor he colocado “1 1” y pues la verdad es que cuando se usa la opcion -p los números no son procesados, pero son necesarios para el argumento, es decir que podremos colocar cualquier cosa y sera irrelevante para la salida.

Usar crunch nivel 3.

Ya sabemos generar diccionarios con distintos charsets, sabemos aplicar patrones en la generación, concatenar palabras, así como especificar con cuales caracteres queremos generar, así que considero que estamos avanzando en la tarea de desnudar a crunch.

Al inicio indicaba que crunch puede mandar los resultados a la pantalla, puede crear un archivo ó pasarle la salida a otro programa (generalmente un crackeador como aircrack) pero hasta ahora solamente hemos sacado los resultados en pantalla, es decir no se han creado ningun archivo ni nada parecido.

Enviando el output de crunch a un archivo.txt ó a un comprimido.

La idea básica de crear un diccionario es poder usarse posteriormente para dar con el hash valido en una prueba de fuerza bruta, asi que de alguna forma debemos poder generar un fichero a partir de la salida, esto es posible usando la opcion -o (output) seguido del nombre del archivo, tomemos como ejemplo el ejercicio de: Harry Hermione y Ron y creemos un fichero, el comando sería:

 

 

 

 

 

 

 

Opcionalmente podríamos especificar la ruta donde volcar el diccionario, por ejemplo:

 

 

 

 

 

 

 

 

 

Avanzando un poco más y hagamos que cada 5000 líneas crunch genere un fichero, para que, dependiendo el entorno en el que se vaya a auditar necesitamos seccionar el ataque, es decir, dividir el diccionario en una cantidad específica, para lograr mejor acoplamiento con los temporizadores de los crackeadores, para lograr esa división de un diccionario en varios ficheros de menor tamaño usamos la opción -c (esta opción solo funciona si el -o START está presente en la linea) por ejemplo:

Esto inicia el proceso de crear multiples ficheros con 5000 lineas cada uno, tal y como podemos ver en la imagen:

 

 

 

 

 

 

 

 

 

Y la carpeta documentos encontraría:

 

 

 

 

 

 

 

 

 

 

 

¿Sencillo?

Aclaraciones:

  • El START funciona como nombre de archivo para el primer fichero a crear, a partir de ahi los ficheros tomaran el nombre de la ultima linea del archivo anterior + la primera linea del archivo posterior.
  • Aunque debo aclarar que en algunos caso es posible llenar el disco duro al generar un diccionario, todo depende de lo que le digamos a crunch, por ejemplo:

Se fijan en el tamaño del fichero? 2744 PB !!!

Eso sería demasiado.txt para cualquier disco duro.

Entre tanta generación, si creamos un fichero y lo comprimimos a bzip, de un solo golpe, suena complicado sería simplemente agregar la opción -z seguido del tipo de compresión, por ejemplo:

De esta forma se iniciaria el mismo proceso anterior solo que en comprimidos gzip u en cualquier otro formato soportado por crunch (gzip, bzip2, lzma, and 7z ).

Agradecimientos.

A la comunidad de Underc0de y a CloudswX por compartir el trabajo realizado en el siguiente post.