miércoles, 30 de octubre de 2013

Asaltando "sombras" con python



  En esta entrada vamos a realizar un ataque de fuerza bruta basado en diccionario sobre el fichero /etc/shadow que utilizan las distribuciones de GNU/Linux.

Este fichero contiene la contraseña cifrada de cada usuario del sistema (los que la tengan) y se complementa con otro fichero como es /etc/passwd.

Dicho archivo esta formado por numerosas líneas como la que sigue:
     usuario:password:último:pueda:vida:aviso:caduca:duración:reserv

 Donde:
    [-] usuario es el nombre del usuario.
    [-] password es la contraseña cifrada correspondiente al usuario.
    [-] último  son los días transcurridos desde la última vez que se cambió la
          clave, cuenta desde el día 1/1/1970.
    [-] pueda son los días que deben pasar antes de que la clave pueda ser
          cambiada.
    [-] vida es el tiempo de vida de la clave antes de que tenga que ser
          cambiada.
    [-] aviso es el número de días de aviso al usuario antes que expire la clave.
    [-] caduca son los días en que la clave quedara deshabilitada tras caducar.
    [-] duración son los días de duración de la cuenta desde 1/1/1970.
    [-] reserv pertenece a un campo reservado.

 El anterior ejemplo es un caso genérico, veamos ahora los valores de un usuario "real":
usuario:$6$3oNSayeE$Cqe3MB4N/oHgEJw6JTXGIg3oNmDhvgBMSf/rNm2Hab0cn28psM1htq3TFebQJ4At1LkQKuu5/T/LocYYtjZMP0:16003:0:99999:7:::

En esta ocasión el campo que llama nuestra atención es password que a su vez se subdivide en varias secciones:
$6$3oNSayeE$Cqe3MB4N/oH....
Es decir:
$algoritmo_cifrado$salt$password_cifrado
Donde:
  [-] algoritmo_cifrado representa en función del numero el cifrado utilizado, siendo 1 md5, 2a blowfish, 5 SHA-256 y 6 SHA-512. Este último es el utilizado por las distribuciones actuales.
  [-] salt es un valor generado al azar utilizado junto con la contraseña para generar el password cifrado que vemos en el campo contiguo. Es útil para evitar ataques mediante tablas hash ya preparadas como son las conocidas rainbow tables.
  [-] password_cifrado es la contraseña del usuario cifrada con el algoritmo especificado junto con el salt.

Una vez ya conocemos la estructura podemos programar nuestro propio código para realizar ataques de diccionario a ficheros shadow y obtener las contraseñas de los usuarios.




 Para la prueba hemos utilizado la librería crypt de python (versión 2.7.x) que junto con la función del mismo nombre nos permite descifrar las contraseñas de los usuarios contenidos en el fichero.

El código está alojado en la sección de herramientas de 0verl0ad, concretamente aquí, donde podéis encontrar el código junto con una carpeta llamada test que contiene un fichero shadow y un diccionario breve para hacer las pruebas.

Por último comentar que la aplicación no es multiproceso, por tanto es lenta, pero nos permite ver como podemos hacer nuestro propio script para realizar ataques de diccionario a ficheros de este tipo. En siguientes entradas solucionaremos esto ;)


Si queréis ampliar información aquí tenéis un par de entradas que me han resultado útiles:


Nos leemos en breve :D




5 0verl0ad Labs: Asaltando "sombras" con python   En esta entrada vamos a realizar un ataque de fuerza bruta basado en diccionario sobre el fichero /etc/shadow que utilizan las distrib...

1 comentario:

The X-C3LL dijo...

¡Paralelización para la semana que viene o golpe de remo!

< >