Documentos de Académico
Documentos de Profesional
Documentos de Cultura
htm
Instalacion de John the Ripper
cd scr
make
Con esto obtendras una lista de los sistemas soportados. Elige uno de ellos y teclea:
make SISTEMA
make generic
Ahora puedes copiar este directorio a donde quieras: estos son todos los
archivos que necesita John en tiempo de ejecucion.
Puedes necesitar los archivos run/{john.ini, *.chr, password.lst} de la distribucion del codigo
fuente para que la cosa funcione, a no ser que estos archivos ya esten presentes.
El archivo de configuracion tiene numerosas secciones. Cada seccion empieza con una linea
con su nombre entre corchetes. Las secciones consisten en asignar valores a algunas
variables (utilizando 'variable=valor'), o en a¤adir cualquier otra especificacion de texto en
alguna seccion en particular (los nombres de estas secciones empiezan con "list."). El uso de
mayúsculas o minusculas en los nombres de las secciones es indiferente, asi que utiliza la que
mejor te convenga. Las lineas que empiecen por '#', ';', o lineas en blanco son ignoradas asi
que pueden ser usadas para poner comentarios o para inutilizar lineas de opciones sin tener
que borrarlas.
Opciones Generales
Los valores por defecto para algunas de las opciones de la linea de comandos pueden ser
definidas en la seccion '[Default]'. Actualmente solo puedes definir aqui una variable:
Wordfile Especifica un archivo de palabras. Esto asumira el modo 'wordlist' por defecto (no
es necesario incluir el valor '-wordfile' en la linea de comandos a no ser que
quieras cambiar este valor por defecto).
Las reglas para los modos 'wordlist' y 'single crack' se definen en secciones separadas,
[List.Rules:Wordlist] y [List.Rules:Single] respectivamente (recuerda que no importan las
mayusculas). El programa usa la sintaxis de Crack (escrito por Alec Muffett), que os resultara
familiar a muchos de vosotros. Tambien se han a¤adido algunas reglas mas, y (lo que es mas
importante) un preprocesador, que puede generar multiples reglas para una sola linea de
codigo.
Cuando definas nuevas reglas, simplemente pon una regla por linea (línea que puede incluir
comandos para el preprocesador). Mira el archivo doc/RULES para mas informacion sobre la
sintaxis de las reglas o del prepocesador.
Para definir los parametros del modo incremental necesitas crear una sección llamada
[Incremental:MODO], donde MODO es el nombre que vas a asignarle a ese modo. Hay
algunos modos incrementales predefinidos en los archivos de configuracion por defecto que
vienen con John the Ripper que pueden ser usados como modelos para las personalizaciones.
CharCount Te permite limitar el numero de caracteres usados para hacer que John empiece
a probar los password mas largos antes.
Tambien puede ser usada para hacer que John imprima un aviso si el juego de
caracteres define menos caracteres que CharCount. Por defecto (cuando esta
opcion no se usa) se usan todos los caracteres definidos.
Extra Esta opcion puede ser usada para hacer que John pruebe algunos caracteres
extras que no aparezcan en el juego de caracteres. Simplemente pon todos esos
caracteres aqui. Seran considerados pero no como los mas probables.
========================================================================
========
Para definir un modo de crackeo externo necesitas crear una sección en tu archivo de
configuracion llamada [List.External:MODO], donde MODO es cualquier identificador que
quieras asignarle al modo. La seccion deberá contener algunas funciones programadas en un
sublenguaje de C. John las compilara y las usara si activas este modo via linea de comandos.
External Functions
Las siguientes funciones son usadas actualmente por John:
filter() llamada por cada palabra probada, puede filtrar algunas palabras
generate() llamada para generar palabras, cuando no se usa ningun otro modo de cracking
Todas son del tipo 'void', sin argumentos, y deben usar la variable global 'word'(predefinida
como 'int word[]'), excepto para init() que es llamada antes de que se inicialice 'word'. La
variable 'word' contiene la palabra que va a ser probada en ese momento, en formato ASCIIZ.
* generate() no puede asumir ningun valor particular para 'word' cuando es llamada, pero debe
establecer la siguiente palabra que sera probada, o en cero ('word[0]') cuando el proceso de
cracking esta completado (esto hara que termine el programa)
* restore() debera establecer las variables globales para continuar desde 'word'.
Puedes usar un modo externo externo separadamente, o con otros modos de crackeo, en cuyo
caso solo init() y filter() seran usadas (y solo filter() es requerida). Usar un filtro externo es
compatible con todos los otros modos de crackeo y con la opcion '-makechars'.
Recomiendo que no uses filter(), o que por lo menos no filtres demasiadas palabras cuando
uses un modo externo con tu propia generate(). Mejor modifica generate() para que no genere
las palabras que serian filtradas.
El Lenguaje
-------------
Una lista de los identificadores soportados: void, int, if, else, while,
continue, break, return. Puedes definir funciones estandar para ser llamadas
por John, definir variables locales y globales (incluyendo matrices
unidimensionales), usar todas las operaciones entre enteros soportados en
C y usar comentarios de C.
* solo las funciones estandar estan soportadas, no puedes definir las tuyas
propias;
* solo los bucles 'while' estan soportados;
* solo los tipos de datos 'int' y 'void' estan supported;
* solo se permiten matrices (arrays) unidimensionales;
* structs/unions no estan supported;
* los punteros no estan soportados (el nombre del array se refiere al primer
elemento)
* algunas cosas mas, probablemente...
You can find some external mode examples in the default configuration file
supplied with John.
========================================================================
========
Estas descripciones son cortas y solo cubren las opciones basicas. Lee
los otros archivos de ayuda para obtener informacion sobre como personalizar
los modo.
Este archivo no debe contener vacios. John no ordena las palabras para no usar demasiada
memoria, ya que esto necesitaria cargar toda la lista en la memoria, mientras que ahora se lee
directamente del disco mientras se crackea. Ademas, no ordenar las palabras te permite poner
las mas frecuentes al principio de la lista para que sean probadas antes.
words first. Sin embargo, si no tienes ninguna preferencia en el orden, es mejor que ordenes
las palabras alfabeticamente: John funciona un poco mas rapido si cada palabra difiere solo en
algunos caracteres, esto es especialmente aplicable si solo crackeas unos pocos passwords de
una vez.
John puede manejar estas situaciones (y solo probara el password una vez) cuando dichas
palabras esten una a continuacion de la otra (esto es, cuando la lista este ordenada). Es
preferible que no trunques la lista en 8 caracteres, ya que el resto pueden ser necesitados si
activas las reglas.
La manera recomendada de ordenar una wordlist para usarlo con las reglas por defecto de
dicho modo es:
Este es el modo con el que deberias comenzar a crackear. Este modo intentara usar la
informacion del login/GECOS como passwords. Como la información solo se usa en la cuanta
de la que se ha tomado (y solo con passwords con los mismos 'salts', lo que no consume
tiempo extra), el modo "single crack" es mucho mas rapido que el modo wordlist, y permite el
uso de muchas reglas (estas estan siempre activadas en este modo) en un tiempo razonable.
Los passwords encontrados tambien son probados en el archivo de passwords, por si hay mas
de un usuario con el mismo password. Por supuesto, esto solo cogera aquellos passwords que
esten basados en la informacion usada.
Hay que darse cuenta que, por las caracteristicas de este modo, se obtendrán mas cuentas
crackeadas si lo usas con multitud de archivos de passwords que si lo usas en cada archivo
por separado.
Modo Incremental
Este es el modo de crackeo mas potente, ya que probara todas las combinaciones de
caracteres posibles. Sin embargo, se asume que este modo nunca terminara de ejecutarse ya
que el numero de combinaciones son demasiado alto (actualmente, la unica posibilidad de que
termine en un tiempo razonable -- mientras sigas vivo :-) -- es limitar lla longitud del password,
o usar un juego de caracteres peque¤o), y tendras que interrumpirlo tu manualmente.
Este es el porque este modo trabaja con tablas de frecuencia de caracters, para coger el mayor
numero posible de passwords en un tiempo limitado.
Para usar este modo necesitas una definicion especial de los parámetros del modo (incluyendo
la longitud del password y los juegos de caracteres).
Modo Externo
---------------
Puedes definir un modo de crackeo externo para usarlo con John.
Esto se hace con la seccion del archivo ~/john.ini llamad [List.External:MODE]
donde mode es cualquier nombre que quieras asignar al modo. La seccion debera
contener algunas funciones, que John usara para generar las palabras que
usara cuando crackee. Las funciones seran escritas en un sublenguaje de C,
para ser compiladas por John al inicio (si tu activas el modo en la linea
de comandos, por supuesto). Lee doc/EXTERNAL.ES.
You can list any number of password files on John's command line, and also
specify some of the following options (all of them are case sensitive, but
can be abbreviated):
Shows the cracked passwords in a convenient form. You should also specify the password files.
You can use this option while another John is cracking, to see what it did so far.
Benchmarks all the enabled ciphertext format crackers, and tests them for correct operation at
the same time.
Allows you to filter a few accounts for cracking, etc. A dash before thelist can be used to invert
the check (that is, load all the users that aren't listed).
Additional Utilities
----------------------
mailer PASSWORD-FILE
A shell script to send mail to all the users who got weak passwords. You
should edit the message inside before using.
Codigos de Posicion
---------------------
Las posiciones de los caracteres son numeradas empezando por 0, y están especificadas en
las reglas por los siguientes caracteres:
Aqui 'max_lenght' es la longitud maxima en texto plano soportada por el actual formato de
cifrado.
Los mismos caracteres tambien son usados para especificar otros parámetros numericos.
Clases de caracteres
----------------------
?? indica '?'
?v indica vocales: "aeiouAEIOU"
?c indica consonantes: "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
?w indica espacios: "\t"
?p indica puntuacion: ".,:;'\"?!`"
?s indica simbolos: "$%^&*()-_+=|\\<>[]{}#@/~"
?l indica letras en minusculas [a-z]
?u indica letras en mayusculas [A-Z]
?d indica numeros [0-9]
?a indica letras [a-zA-Z]
?x indica letras y numeros [a-zA-Z0-9]
Comandos Simples
------------------
Comandos de Insercion/Eliminacion
-----------------------------------
Nota que '[' y ']' son caracteres de control del preprocesador: debes
'escaparlos' usando el caracter '\'.
M memoriza la palabra
Q rechaza la palabra a no ser que haya cambiado
Si usas algunos de estos comandos en una regla, esta solo procesara parejas de palabras
(nombres completos, desde la informacion de GECOS), y rechaza las palabras individuales. Se
asume '+' al final de cada regla que use cualquiera de estos comandos, a no ser que lo
especifiques manualmente.
El Preprocesador de Reglas
El preprocesador se usa para combinar reglas semejantes en una linea de codigo. Por ejemplo,
si necesitas que John pruebe palabras en minúsculas con digitos a¤adidos, puedes escribir una
regla por cada caracter, 10 en total. Ahora imagina que quieres a¤adir dos digitos: el archivo de
configuracion se volveria demasiado largo e incomprensible.
Con el preprocesador puedes hacer todo esto de una forma mas facil.
Simplemente escribe una linea de codigo con las partes comunes a todas estas reglas, y una
lista de los caracteres que tengas que poner en reglas separadas, entre corchetes (la forma de
las expresiones regulares). El preprocesador generara entonces las reglas por ti (al comienzo
para comprobar la sintaxis, y una vez mas mientras crackea, pero nunca mantiene las reglas
expandidas en memoria). Por ejemplo, para los casos de arriba, las lineas de codigo seria 'l$[0-
9]' (minusculas y a¤ade un digito) y 'l$[0-9]$[0-9]' (minusculas y a¤ade dos digitos). Estas lineas
de códigos se expanden a 10 y a 100 reglas respectivamente. Hay que tener en cuenta que se
procesan los comandos del preprocesador de derecha a izquierda, y los caracteres son
procesados de izquierda a derecha, con lo que se obtiene un orden normal de los numeros en
casos como el de a¤adir dos digitos.
Notese que solo se han usado rangos de caracteres a en estos ejemplos, sin embargo puedes
usar cualquier rango de la lista de caracteres, como '[aeiou]' que usara las vocales, o '[aeiou0-
9]' que usara vocales y numeros.
Si necesitas probar las vocales primero, y todas las demas letras despues, puedes usar
'[aeioua-z]': el preprocesador es lo suficientemente inteligente como para no producir reglas
duplicadas.
Hay algunos caracteres de control para las reglas ( '[' empieza la lista de caracteres del
preprocesador, '-' indica un rango dentro de la lista, etc).
Debes usarlos con el prefijo '\' si quieres usarlos como caracteres normales en vez de usar si
significado especial. Por supuesto, esto tambien se aplica al caracter '\'. Ademas si quieres
iniciar una lista de caracteres del preprocesador al principio de una linea, tendras que usar el
prefijo ':',
o sera tomada como el inicio de una nueva seccion.
Ejemplos de uso de John the Ripper
====================================
Estos ejemplos son para darte algunos trucos sobre como pueden ser usadas
las opciones del John. Algunos de ellos pueden no ser obvios; pido disculpas
si alguno lo es, pero es que estoy aburrido de contestar las mismas
preguntas.
Linea de comandos
-------------------
cp /etc/passwd passwd.1
aunque tambien pueden ser abreviadas las opciones (yo utilizare los nombres
completos en estos ejemplos):
o incluso:
o si quieres que John ignore alguna otra shell, por ejemplos '/etc/newuser':
o, con las reglas activadas (mas lento, pero mas potente; esto es lo que
deberas usar para localizar la mayoria de las claves debiles):
Como con cualquier otro modo de crackeo, es mas rapido hacerlo con todos los archivos de
claves posibles:
Algunas veces es preferible partir tus archivos de claves para que puedan ser
crackeados separadamente, como esto:
Esto hara que John intente 'salts' con dos o mas claves rapidamente, y
a continuacion probar el resto. El tiempo total de crackeo sera mas o menos
el mismo, pero obtendras algunas claves mas rapidamente, y puedes no
necesitar el resto. Tambien puedes probar todas las cuentas con un 'wordlist'
peque¤o, y solo aquellas que puedas probar mas rapido (con '-salts:2') con
uno largo. Usualmente es mejor probar un valor mayor que 2 para '-salts'
(algunas veces incluso un valor tan alto como 1000 lo hara); ajustalo a tu
caso particular.
Nota que la regla por defecto para el modo 'wordlist' incluye el comando
':' como primera linea (lo que significa "prueba las palabras como aparecen
en la lista"). Si ya has probado con un 'wordlist' sin usar las reglas, y
ahora quieres probar con la misma lista pero usandolas, mejor que comentes
este comando.
john -i passwd.1
Esto usara el modo por defecto especificado en la correspondiente sección del archivo
~/john.ini, [Incremental:All]. En el archivo de configuración suministrado con John estos
parametros usan la lista completa de 95 caracteres, y prueba con todas las longitudes posibles
para las claves, de
0 a 8 (cuando digo password de 0 caracteres me refiero a cadenas vacias, ya que esto algunas
veces ocurre). NO esperes que esto termine en un tiempo razonable (a no ser que todas las
claves sean realmente debiles), lee el archivo doc/MODES.ES para una explicacion
En algunos casos es preferible usar alguno de los otros modos incrementales predefinidos para
crackear algunas claves a partir de un un juego de caracteres limitado. El siguiente comando
probara solo 26 caracteres, claves desde 'a' hasta 'zzzzzzzz':
De nuevo, puedes crackear solo cuentas de root y usar algunas de las otras caracteristicas de
John con los modos incrementales. Este comando intentara crackear todas las cuentas root
(uid 0) en todos los archivos de claves, y solo aquellos que produzcan los salts marcados, asi
conseguiras casi el doble de rapidez si tienes un monton de archivos de password (100 o mas,
llamados '*.pwd' por ejemplo), sin embargo probablemente no habra cuentas de root con los
salts marcados:
6. Si tienes un archivo de claves, y ya has conseguido crackear muchos passwords, o los has
conseguido 'esnifandolos' (rastreandolos), y las claves del archivo no son usuales, puedes
generar un nuevo juego de caracteres en un archivo, basado en los caracteres de las claves
que ya has crackeado:
Si conseguiste muchos passwords de tu pais, tu universidad, etc, es útil usarlos todos a la vez
para generar el juego de caracteres que luego usaras para intentar crackear el resto:
john -makechars:all.chr
john -makechars:alpha.chr -external:filter_alpha
john -makechars:digits.chr -external:filter_digits
En el ejemplo anterior, John sobreescribira el archivo del juego de caracteres por unos nuevos
que estaran basados en el archivo ~/john.pot entero (John usara el archivo entero si no
especificas ningun otro archivo de claves). Nota que los filtros usados en el ejemplos vienen
incluidos en el archivo ~/john.ini incluido en la distribucion.
7. Finalmente, puedes querer enviar un mensaje a todos los u | de los que conseguistes claves
debiles, para que las cambies. Esta no es siempre una buena idea (desafortunadamente,
muchas personas parecen ignorar este tipo de mensajes, y pueden ser usados como ayuda
para crackers, etc.), pero de todas formas, asumire que sabes lo que estas haciendo. Edita el
script 'mailer' que se incluye con John: el mensaje que manda, y posiblemente el comando
'mail' (especialmente si el archivo de passwords procede de una 'box' diferente a la que usas
para ejecutar el John). Despues ejecuta:
mailer passwd.1
Archivo de Configuracion
--------------------------
1. Imaginemos que te das cuenta, en algunos archivos de claves, los passwords
consisten en el nombre de login con '?!' a¤adido. Ahora solo tienes que
crear una nueva regla para el modo 'single crack' (mira el archivo
doc/RULES.ES para mas informacion sobre la sintaxis) y ponerla en algun
lugar cerca del comienzo:
[List.Rules:Single]
$?$!
Truco: si quieres comentar temporalmente todas las demas reglas por defecto,
puedes renombrar la seccion a algo que John no utilice, y definir unas nuevas
con el nombre antiguo, pero asegurate que dejas la parte 'List.' del nombre,
u obtendras un error.
[Incremental:MIO]
File = MIO.chr
Esto hara que John solo utilice los caracteres que estaban en los passwords
usados para generar el nuevo juego de caracteres. Para hacer que john utilice
algunos caracteres extras:
Extra = !@#$%
Estos caracteres extras seran utilizados pero siempre considerando que seran
los menos probables. Si quieres asugurarte de que, a¤adiendo tus caracteres
extra, John pruebe los 95 caracteres, puedes a¤adir la linea:
CharCount = 95
Tambien puedes usar CharCount para limitar el numero de caracteres que probara
John, aunque el juego de caracteres tenga mas:
CharCount = 25
Para hacer que John pruebe passwords de una determinada longitud, usa:
MinLen = 6
MaxLen = 8
[List.External:Filter1]
void filter()
{
int i;
i = 0;
while (word[i] && word[i] >= 'a' && word[i] <= 'z') i++;
<XMP>if (word[i] != '1' || word[i + 1]) word = 0;
}
Este filtro solo dejara las palabras con caracteres alfabeticos y a¤adira
un '1' al final. Ahora puedes usar este filtro con algun otro modo de craking,
pero la mayoria de las veces sera demasiado lento, ya que la mayoria de las
palabras seran rechazadas por el filtro. Es mejor usarlo para generar los
juegos de caracteres y usar estos (siempre que tengas suficientes passwords
que pasen el filtraje).
Si no puedes usar las tablas de frecuencia por alguna razon, puedes usarlas
programando totalmente un nuevo modo externo:
[List.External:Suffix1]
int length, current[9];
void init()
{
int i;
void generate()
{
int i;
i = length + 1;
while (i--) word[i] = current[i];
i = length - 2;
while (++current[i] > 'z')
if (i) current[i--] = 'a'; else current = -1;
}
void restore()
{
int i;
i = length + 1;
while (i--) current[i] = word[i];
}
</XMP>
Q: ¨Por que muestra John los valores de c/s, en vez que los valores reales de
crypt() por segundo?
A: Los valores presentados indican las combinaciones (de login y passwords)
por segundo, no crypts() por segundo. Esta es la velocidad efectiva de crackeo
en un determinado archivo de passwords, y puede ser utili, por ejemplo, para
ajustar el valor que uses para la opcion '-salts'. Si solamente quieres hacer
un banco de pruebas de las rutinas de control de passwords, usa la opcion
'-test'.
Q: Me acabo de dar cuenta de que los valores de c/s que son mostrados cuando
uso los modos incrementales son mucho menores que en otros modos de cracking.
Son incluso menores de lo que eran en la version v1.0. ¨Que ha ocurrido?
A: Probablemente habras usado John solamente unos segundos. Mi nueva
implemententacion del modo incremental usa juegos de caracteres bastante
largos que necesitan ser expandidos cada vez que John cambia entre
distintas longitudes de passwords. Afortunadamente, esto solo se nota
cuando John acaba de ser iniciado, ya que raramente cambia esta longitud
cuando lleva trabajando varias horas. Creo que no es un precio demasiado alto
a cambio de un mejor orden en los intentos de crackeos.