Mostrando entradas con la etiqueta wordlist. Mostrar todas las entradas
Mostrando entradas con la etiqueta wordlist. Mostrar todas las entradas

jueves, 28 de mayo de 2015

Crackear contraseñas usando john the ripper


En este tutorial vamos a describir las principales opciones de john the ripper. Vamos a explicar el funcionamiento basico para el uso de JTR para romper contraseñas (LM, NTML, MD5) haciendo uso de una lista de palabras o ataque de fuerza bruta.

Acerca de John the ripper

John the ripper es un rapido rompedor de contraseñas, actualmente disponible para muchos sistemas tales como unix, windows, DOS, BeOS, y OpenVMS. Su objetivo principal es detectar contraseñas debiles de unix. Es uno de los programas rompedores de contraseñas mas famosos, ya que combina una serie de rompedores de contraseñas en un solo paquete, detecta automaticamente los tipos de contraseñas, e incluye un cracker personalizable.
Puedes ejecutar varios formatos de contraseñas encriptadas, incluso varios hash de contraseñas en sistemas unix(DES, MD5, Blowfish), Kerberos AFS, y Windows NT/2000/XP/2003 (LM hash). Los modulos adicionales han ampliado su capacidad de incluir hashes en MD4, contraseñas en LDAP, MySQL y otros.

Mas informacion: http://openwall.info/wiki/john/sample-hashes

Descargar - Instalar JTR

Descargar la ultima version gratis de JTR usando el sitio web oficial. Descargarlo dependiendo del sistema donde te encuentres. Lo ejecutamos desde consola o terminal y veremos lo siguiente:


>john
John the Ripper password cracker, version 1.7.9
Copyright (c) 1996-2011 by Solar Designer
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]
--single                   "single crack" mode
--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin
--rules                    enable word mangling rules for wordlist mode
--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter
--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             give a new session the NAME
--status[=NAME]            print status of a session [called NAME]
--make-charset=FILE        make a charset, FILE will be overwritten
--show                     show cracked passwords
--test[=TIME]              run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..]  [do not] load this (these) user(s) only
--groups=[-]GID[,..]       load users [not] of this (these) group(s) only
--shells=[-]SHELL[,..]     load users with[out] this (these) shell(s) only
--salts=[-]COUNT           load salts with[out] at least COUNT passwords only
--save-memory=LEVEL        enable memory saving, at LEVEL 1..3
--format=NAME              force hash type NAME: des/bsdi/md5/bf/afs/lm/trip/
                           dummy


Explicacion de opciones

Las opciones pueden ser especificadas junto con los archivos de contraseñas o por su cuenta. Todas las opciones son case sensitive, puede ser abreviado de manera larga o corta, pueden prefijar dos guiones o con un solo guion y pueden utilizar "=" o ":" para indicar un argumento. Activa el modo "solo crack" usando las reglas de la seccion del archivo de configuracion.

--single

john --single archivo_a_crackear.txt

Activar el modo wordlist (ataque de diccionario) este es mas rapido que el ataque por defecto (fuerza bruta).

--wordlist=ARCHIVO

john --wordfile:password.lst archivo_a_crackear.txt

Le permite definir las reglas para el uso de wordlist.

--rules

Permite un modo incremental que le permite hacer un ataque de fuerza bruta bajo ciertos modos.

--incremental[=MODO]

john --incremental:alpha archivo_a_crackear.txt
john --incremental:digits archivo_a_crackear.txt


Sigue una sesion interrumpida de crackeo, leyendo informacion sobre el estado del archivo de sesion especificado o de $JOHN/john.rec por defecto.

--restore[=NOMBRE]

john --restore:restore

(Nota: Si ha utilizado la opcion de sesion, debe especificar el nombre de sesion para el proceso de restauracion).

Esta opcion puede utilizarse solo a partir de una nueva sesion de cracking y su proposito es dar a la nueva sesion un nombre (a la cual john le agregará el sufijo ".rec" para formar el nombre del archivo de sesion).

--session=NOMBRE

john --session:[archivo_a_guardar] archivo_a_crackear.txt

(Nota: Esta opcion crea y mantiene los datos de su sesion que permite restaurarla mas adelante).

Imprime el estado de una sesion interrumpida o corriendo.

--status[=NOMBRE]

john --status:[nombre_del_archivo]

Muestra las contraseñas crackeadas para los archivos dados. Usted puede utilizar esta opcion para ver que es lo que hizo john hasta el momento.

--show

john --show archivo_a_crackear.txt

Prueba todos los algoritmos hash compilados para verificar el correcto funcionamiento y sus puntos de referencia.

--test[=TIEMPO]

john --test

Le permite seleccionar unas cuentas para crackear o para otras operaciones. 

--users=[-]LOGIN|UID

john --users:Usuario archivo_a_crackear.txt

Esta opcion es util para cargar cuentas con una shell valida solamente o no cargar cuentas con una shell mala.

--shells=[-]SHELL

Permite sobreescribir la deteccion del tipo de Hash. Actualmente, los "nombres de formato" validos son DES, BSDI, MD5, BF, AFS, LM, y crypt.

--format=NOMBRE

john --format:DES archivo_a_crackear.txt
john --format:BSDI archivo_a_crackear.txt
john --format:MD5 archivo_a_crackear.txt
john --format:BF archivo_a_crackear.txt
john --format:AFS archivo_a_crackear.txt
john --format:LM archivo_a_crackear.txt


Ejemplos - fuerza bruta

En esta parte del tutorial crearemos un archivo .txt con los hash que incluiran contraseñas en formato (LM/NTLM/HASH).

Añadiremos los hashes el LM y NTLM como sigue:

Editor::A4A54C86C6E5B8D0D69E92D4A9360EB0:FC4CB75BCC71D23954F4C94AD31AF0B1:::

A continuacion vamos a escribir el siguiente comando para abrir el archivo .txt.

>john john.txt
Loaded 2 password hashes with no different salts (LM DES [128/128 BS SSE2
ATSIS            (Editor:2)
guesses: 1  time: 0:00:01:32 (3)  c/s: 10880K  trying: CR5PT24 - CR5PNHJ
FOTISLI          (Editor:1)
guesses: 2  time: 0:00:01:33 (3)  c/s: 10931K  trying: FOTILVY - FOTIBFA
Warning: passwords printed above might be partial
Use the "--show" option to display all of the cracked passwords reliably

 
Para previsualizar los resultados de esta operacion escribimos:

>john --show john.txt
Editor:FOTISLIATSIS::FC4CB75BCC71D23954F4C94AD31AF0B1:::
2 password hashes cracked, 0 left
 

(Nota: el archivo john.txt contiene solo caracteres alfa).

Ahora crearemos el archivo john2.txt que contendra caracteres alfanumericos.
 
Liatsis_Fotis#Post::C99FFEFFD8300629F500944B53168930:892A0EAA0CFE35F105138006D6415A2E:::
Liatsis_Fotis#About::5524ADDCF15F4B1EAAD3B435B51404EE:730F52CBC638F6ECD8E1F5D89600AA6A:::
Liatsis_Fotis#ID::686A307B45A7EC144207FD0DF35A59A8:C7DE72EBBFF0979175DF38D63294FFA9:::

 
A continuacion vamos a escribir el siguiente comando, agregando --format como opcion y podremos especificar el formato de LM.

>john --format=LM john2.tx
Loaded 5 password hashes with no different salts (LM DES [128/128 BS SSE2]
L                (Liatsis_Fotis#Post:2)
12               (Liatsis_Fotis#ID:2)
JTR              (Liatsis_Fotis#About)
TUTORIA          (Liatsis_Fotis#Post:1)
guesses: 4  time: 0:00:00:06 (3)  c/s: 6613K  trying: MYKHRT2 - MYKHNTH
PRIVACY          (Liatsis_Fotis#ID:1)
guesses: 5  time: 0:00:00:09 (3)  c/s: 7749K  trying: PRIVAI! - PRIVSM2
Warning: passwords printed above might be partial
Use the "--show" option to display all of the cracked passwords reliably

 
Para previsualizar los resultados de esta operacion escribimos:

>john --show john2.txt
Liatsis_Fotis#Post:TUTORIAL::892A0EAA0CFE35F105138006D6415A2E:::
Liatsis_Fotis#About:JTR::730F52CBC638F6ECD8E1F5D89600AA6A:::
Liatsis_Fotis#ID:PRIVACY12::C7DE72EBBFF0979175DF38D63294FFA9:::
5 password hashes cracked, 0 left


Ejemplos - Ataque por diccionario

En esta parte vamos a escribir el siguiente comando añadiendo la opcion --wordlist y especificar la ubicacion del archivo de lista de palabras. 

>john --wordlist=mi_wordlist.txt john3.txt
Loaded 1 password hash (LM DES [128/128 BS SSE2-16])
PR1V@CY          (Security)
guesses: 1  time: 0:00:00:00 100%  c/s: 248533  trying: PR1VYPV - PR1V@YC
Use the "--show" option to display all of the cracked passwords reliably


Para previsualizar los resultados de esta operacion escribimos:

>john --show john3.txt
Security:PR1V@CY::A8C6E71DC39003852ACC407CFA612363:::

1 password hash cracked, 0 left 

 
(Nota: como hemos observado, el metodo de ataque wordlist llevo menos tiempo para decifrar el codigo hash).

(Nota: use onlinehashcrack.com para generar mis contraseñas en formato LM/NTLM)

Conclusion

Son muchas maneras en las que podemos pasar un hash a un archivo. Este tutorial describe las cosas basicas para generar, crear/abrir un archivo .txt con algoritmos simples como LM/NTLM, la mejor manera es intentar usar todos los parametros en un entorno virtual, creando nuestros hash y wordlist para lo que la opcion puede realizar antes de proceder al archivo real .txt.


Traduccion: arthusu
Post original: http://www.liatsisfotis.com/2012/12/crack-passwords-using-john-ripper.html 

domingo, 6 de abril de 2014

[Parte 7] Seguridad en PHP

Autenticacion y autorizacion

La autenticacion es el acto de establecimiento o confirmacion de algo (o alguien) como autentico. La autenticacion de un objeto puede significar (pensar) la confirmacion de su procedencia, mientras que la autenticacion de una persona a menudo consiste en verificar su identidad. La autenticacion depende de uno o varios factores.

La autorizacion es parte del sistema operativo que protege recursos del sistema permitiendo que solo sean usados por aquellos consumidores a los que se les ha concedido autorizacion para ello. El proceso de autorizacion se utiliza para decidir si la persona, programa o dispositivo X tiene permiso para acceder al dato, funcionalidad o servicio Y.

En este caso podemos unir la autenticacion con la autorizacion de manera que podamos darle permisos a cierto usuario para acceder a ciertos recursos, siempre y que este autenticado como usuario con dichos privilegios en una aplicacion web, este tipo de aplicaciones tales como paneles administrativos, inicio de sesion, etc. Suelen ser un blanco para diferentes tipos de ataques.

Ataques de fuerza bruta

Un ataque de fuerza bruta es una manera de recuperar la clave probando todas las combinaciones posibles hasta encontrar aquella que permita el acceso, digamos que por ejemplo, tenemos una aplicacion web donde conocemos sus usuarios, pero no conocemos sus contraseñas, intentamos iniciar sesion un sin fin numero de veces con las mas posibles contraseñas hasta lograr dar con la que realmente es, asi finalmente, obteniendo el acceso.



Existen muchos programas famosos tal como THC-Hydra con el cual puedes realizar ataques por fuerza bruta en varios servicios, como puede ser: HTTP, FTP, SSH, TELNET, MYSQL, ETC...

Les adjunto un video en el cual se realiza este tipo de ataque utilizando Burp Suite:



Para protegernos de este tipo de ataques podemos suspender la cuenta del usuario por un tiempo estimado por tantos inicios de sesion fallidos, o tambien agregar un sistema de captcha a nuestro inicio de sesion, y tambien podriamos poner que al registrarse se utilizen letras mayusculas, numeros y caracteres extraños para que la contraseña sea segura.

Un ejemplo del inicio de sesion fallido y esperar un determinado tiempo podria ser el siguiente:



Olfateo de contraseñas

Este tipo de ataques lo habiamos comentado cuando hablamos sobre sesiones, donde se hablaba sobre MITM (hombre en el medio).

Los analizadores de paquetes tienen diversos usos, como monitorear redes para detectar y analizar fallos, o para realizar ingieneria inversa en protocolos de red. Tambien es habitual su uso para fines maliciosos, como robar contraseñas, interceptar correos electronicos, espiar conversaciones de chat, etc.

Existen varios analizadores de paquetes entre los mas famosos puedes encontrar Wireshark...

Puedes encontrarlo en su pagina oficial: http://www.wireshark.org/

O simplemente la Suite de Aircrack la cual puedes encontrar desde: http://www.aircrack-ng.org/

Para protegerse contra este tipo de ataques habiamos comentado en la parte 4 de seguridad en php el uso de SSL para poder mitigar este tipo de ataques.

Un ejemplo es usarlo simplemente en todas las urls que se envien por el metodo GET de tu sitio web. Un ejemplo:




Ataques de repeticion




Como vimos en la parte 2 de seguridad en php veiamos como con burp suite pro podiamos atrapar cabeceras http y realizar ataques de repeticion, con esto simplemente podemos poner los datos que se hayan atrapado en el olfateo de contraseñas o alguna cookie que haya sido atrapada y repetir el ataque, podemos usar un complemente como tal es el caso de live http headers que se encuentra para mozilla firefox.

Para evitar este tipo de ataques simplemente tenemos que tratar de realizar las otras partes de seguridad ya comentadas como es el uso de SSL, el uso correcto de sesiones, de ataques de fuerza bruta, prevenir el robo de cookies, etc.

Y otra medida de seguridad es usar un tiempo de expiracion de acceso a un recurso privado. Tal como en el uso de sesiones dar un tiempo de expiracion, y cuando alguien quiera realizar algun tipo de accion que considere que sea muy brusca por el momento, como por ejemplo, cambiar la contraseña, pedir de nuevo el uso de introduccion de contraseña real, de manera que el atacante no sabra la verdadera contraseña si hizo uso de alguna cookie.



Inicios de sesion persistentes

Un inicio de sesion persistente es una sesion que se mantiene registrada por mucho tiempo, digamos que hoy validas la sesion, mañana entras y sigues validado, entras dentro de una semana y sigues validado... 


Muchas paginas web incluyen este checkbox de recordarme, el cual les da una sesion un poco mas larga de lo normal...

Un usuario atacante puede realizar un ataque de repeticion de manera que obtenga la misma sesion que el usuario.


La manera mas erronea y mas comun en un inicio de sesion persistente es almacenar el nombre de usuario y contraseña en una cookie, ya que los datos son expuestos. La manera mas facil de evitar este error es crear un token valido para una sola autenticacion:


<?php
 $token = md5(uniqid(rand(),TRUE));
?>

Sin embargo, un enfoque mejor consiste en utilizar un identificador secundario es menos probable que sea predecible o descubierto. Consideremos una tabla que tiene 3 columnas identificador (identifier), token, tiempo de espera (timeout:

Como puedes ver mostramos una tabla usuarios la cual contiene las 3 columnas que indicamos anteriormente.

Al generar un identificador secundario junto al token, podemos crear una cookie que no revele ninguna credencial de autenticacion del usuario:


Asi cuando un usuario intenta hacer un inicio de sesion persistente, se verifican varias cosas:

 
Se deben cumplir tres cosas importantes a la implementacion de las cookies para evitar el incio de sesion persistente, las cuales son:

* Las cookies vencen en una semana (o menos)
* La cookie solo cuenta para una sola autenticacion (borrar y regenerar el token cada inicio de sesion correcto)
* Un tiempo de espera (timeout) de una semana o menos se aplica al servidor

Por ultimo para asegurarnos de que un usuario realmente se ha desconectado de la sesion:


Lo cual sobreescribe la cookie con un valor inutil haciendo que la sesion caduque.  

Referencias:

* Essential PHP Security
* Wireshark
* Aircrack
* Wikipedia
* Mozilla Foundation
* THC-Hydra