elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 16:40  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking Avanzado
| | |-+  Hacking Básico (Moderadores: zhyzura, kamsky, TRICKY)
| | | |-+  [SOLUCIONADO]Ayuda modo "External" de john the ripper
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO]Ayuda modo "External" de john the ripper  (Leído 2,109 veces)
nacho87

Desconectado Desconectado

Mensajes: 71


Ver Perfil WWW
[SOLUCIONADO]Ayuda modo "External" de john the ripper
« en: 2 Noviembre 2009, 10:39 »

Hola!
      Alguien sabe de algún manual en el que se explique como crear modos externos para john the ripper? Esque quiero hacer un método que añada el o los caracteres que tú quieras al principio y/o al final de cada password que prueba ya que hay precabidos administradores por el mundo que antes hashear un password le añanden un caracter al principio y al final y el crackeo se vuelve más complicado. Con el modo wordlist no hay problema ya que con una línea se arregla pero para usar los modos incrementales no he conseguido hacerlo.

      A modo de "workarround" he hecho un pequeño script en python (filtro.py) que lee el password por la entrada estandar y lo escupe con los caracteres que le quieras añadir por la salida estandar. El código es es siguiente (suponiendo que el administrador ha añadido el caracter "*" al principio y al final del password:
Código:
#!/usr/bin/python
while True:
passwd = raw_input()
print "*"+passwd+"*"

      Para hacerlo funcionar con john por ejemplo con el modo alfanumérico hay que ejecutar los siguientes comandos:
Código:
./john --incremental:alnum --stdout | ./filtro.py | ./john --stdin pass.pswd --session:misesion

      En uno de los dos johnes que se ejecutan hay que especificar un nombre de sesión, sino dará el error "Crash recovery file is locked: ./john.rec".

      El problema de éste método es que se relentiza mucho el crackeo al tener que pasar por el programa en python por lo que me gustaría hacer un modo externo que seguro hace que funcione más rápido.
Un saludo!
« Última modificación: 3 Noviembre 2009, 21:11 por nacho87 » En línea
kamsky
Moderador
***
Desconectado Desconectado

Mensajes: 2.210


Como no sabían que era imposible, lo hicieron...


Ver Perfil
Re: Ayuda modo "External" de john the ripper
« Respuesta #1 en: 2 Noviembre 2009, 21:42 »

si, es un poco chapucero, pero no soy el más indicado para decir esto, porque siempre ando haciendo cosas similares! :P

a ver si esto te puede servir:
http://www.openwall.com/john/doc/EXTERNAL.shtml

en la configuración por defecto del JtR viene algún ejemplo si no recuerdo mal

salu2
En línea

----NO HAY ARMA MÁS MORTÍFERA QUE UNA PALABRA BROTADA DE UN CORAZÓN NOBLE, Y UN PAR DE HUEVOS QUE LA RESPALDEN---

                       hack 4 free!!
nacho87

Desconectado Desconectado

Mensajes: 71


Ver Perfil WWW
Re: Ayuda modo "External" de john the ripper
« Respuesta #2 en: 2 Noviembre 2009, 23:59 »

Esa es la unica documentación que he encontrado. Por lo visto se programa en una especie de C capado. El problema es que mis conocimientos de programación se limitan a un poquillo de python.jeje. Creo que va a ser hora de meterme a aprender C en condiciones.jejeje.
En línea
kamsky
Moderador
***
Desconectado Desconectado

Mensajes: 2.210


Como no sabían que era imposible, lo hicieron...


Ver Perfil
Re: Ayuda modo "External" de john the ripper
« Respuesta #3 en: 3 Noviembre 2009, 00:50 »

si, es una especie de C capado, no tiene pinta de ser muy dificil lo que intentas sería algo parecido a esto:

Código:
[List.External:Aniadir_Caracteres]
void filter()
{
int i;

i = 0;
        word[i]= CARACTER_INIC ;
i = sizeof(word);
        word[i-1]= CARACTER_FIN
}

Falta el como obtener ambos caracteres a añadir, pero eso te lo dejo a ti ;)
En línea

----NO HAY ARMA MÁS MORTÍFERA QUE UNA PALABRA BROTADA DE UN CORAZÓN NOBLE, Y UN PAR DE HUEVOS QUE LA RESPALDEN---

                       hack 4 free!!
nacho87

Desconectado Desconectado

Mensajes: 71


Ver Perfil WWW
Re: Ayuda modo "External" de john the ripper
« Respuesta #4 en: 3 Noviembre 2009, 01:05 »

Muchas gracias! Voy a ponerme ahora un poco a ver si lo saco por ciencia infusa o algo.jejeje.

EDITO:

Bueno pues algo he conseguido.jeje. El code al final me ha quedado así:

Código
[List.External:caract]
int length;
 
 
void filter()
{
length = 0;
while (word[length]) length++;
word[0] = 42;
word[length - 1] = 42;
return;
 
}

El problema es que en realidad no añade los carecteres que le pido (en éste caso "*", ASCII 42) sino que sustituye el primer ("word[0]") y el último ("word[length - 1]") caracter por el que le indico.
Si en vez de word[length - 1] pongo word[length] por lo visto se desvorda el buffer asignado a la palabra, creo, y empieza a hacer cosas un poco extrañas con las palabras. xD
Habría que buscar alguna forma de adaptar el buffer a cada palabra (algo así como "buffer = buffer + 2" ya que añado dos caracteres) pero al estar C tan capado no se si se podrá.

De todas formas gracias por la ayuda, he aprendido y disfrutado bastante con ésto. A ver si me animo de una vez a aprender C de verdad! jeje

Saludos!
« Última modificación: 3 Noviembre 2009, 02:57 por nacho87 » En línea
nacho87

Desconectado Desconectado

Mensajes: 71


Ver Perfil WWW
Re: Ayuda modo "External" de john the ripper
« Respuesta #5 en: 3 Noviembre 2009, 20:54 »

Ya está solucionado!! He abusado un poco del desbordamiento que se produce al asignar un caracter de más a la palabra que estás "filtrando" pero es la única manera que se me ha ocurrido de aumentar el tamaño del array "word".
El code es el siguiente por si a alguien le viene bien:
Código
[List.External:caract]
int c;
int i;
int caract;
void filter()
{
caract = 42;
int new[20];
int length;
new[0] = caract;
i = 1;
c = 0;
length = 0;
while (word[length]) length++;
while (word[i]){
new[i] = word[i-1];
i++;
}
new[length]=word[length-1];
while (new[c]){
word[c] = new[c];
c++;
}
word[length+1] = caract;
word[length+2]=0;
 
}

Lo que hago es "copiar" cada elemento del array word al "elemento + 1" del array que he creado "new" para poder meter el caracter que quiero al principio conservando la palabra tal como era. El último elemento del array word no se copiaba correctamente con el "while" (lógico ya que "new = word[i-1];" no puede seleccionar el último elemento de word) así que lo he asignado a mano con "new[length]=word[length-1];". Después vuelvo a copiar de vuelta los elementos del array new al array word ya que word es el array que devuelve la palabra a hashear a john y por último asigno a mano el caracter final de word con "word[length+1] = caract;" y corto el tamaño de la palabra a la longitud de la palabra original mas 2 caracteres (word[length+2]=0;) para que el buffer desbordado no meta caracteres que no quiero en la palabra a probar.

Bueno, realmente no se si es un buffer overflow real pero por lo que he leido en el manual de rojodos de "stack overflow" tiene toda la pinta. También podría ser que al intentar aumentar el tamaño de la palabra john haga aumentar el tamaño del array "word" automáticamente como quedan posiciones del array sin asignar se asignan automáticamente con lo último que había en memoria, es decir, la última palabra que se probó.

Bueno, eso es todo. Creo que con ésto ya me he animado a aprender C aunque es feo de cojones comparado con python.jeje. Un saludo!

EDITO:
Ya puestos os dejo una variante del filtro original que prueba todos los números de teléfono móviles (españoles) a partir del método incremental digits. Lo único que hay que hacer es, en el archivo john.conf donde pone
Código:
[Incremental:Digits]
File = $JOHN/digits.chr
MinLen = 1
MaxLen = 8
CharCount = 10
sustituir "Minlen = 1" por "Minlen = 8" y añadir al final del archivo (john.conf) el siguiente código:
Código
[List.External:moviles]
int c;
int i;
int caract;
void filter()
{
caract = 54;
int new[20];
int length;
new[0] = caract;
i = 1;
c = 0;
length = 0;
while (word[length]) length++;
while (word[i]){
new[i] = word[i-1];
i++;
}
new[length]=word[length-1];
while (new[c]){
word[c] = new[c];
c++;
}
word[length+1]=0;
 
}

Para ejecutarlo:
Código:
./john --external:moviles --incremental:digits archivopasswords

Y es unos pocos minutos (menos de 5 generalmente) habrá probado todos los números de teléfono móviles existentes en españa.
Dew!!
« Última modificación: 3 Noviembre 2009, 21:41 por nacho87 » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines