Escalar privilegios a root (fichero /etc/passwd) 2/3

  1. Introducción los permisos de Linux
  2. Problemas con los permisos /etc/passwd (este POST)
  3. Escalada mediante error en el SUID

En este POST hablaremos como gracias al descuido de tener el fichero /etc/passwd con permiso de escritura, cuando lo lógico es que solo sea de lectura, una vez que hemos accedido a la maquina podemos llegar a tener privilegios de root. Aunque lo basemos en el fichero passwd el problema también lo podemos tener en los otros dos ficheros que controlan los usuarios, grupos, directorio y programa que se ejecuta al arrancar, por este motivo antes de iniciar contaremos el uso y descripción de estos.

/etc/passwd: Almacena la información de las cuentas de usuarios. Se puede leer pero no deberíamos poder escribir como veremos más adelante. Cada campo va separado por dos puntos.

Usuario : Clave : UID : GID : Descripción usuario : Directorio usuario : Shell

Si la clave tiene una ‘x’ indica que la clave se encuentra en el fichero /etc/shadow, ‘!’ que el usuario esta bloqueado. Si tenemos permiso de escritura podremos poner nuestra clave como veremos más , adelante.

UID es el numero identificador de usuario:

  • 0 reservado para el usuario root
  • 1-99 para las cuentas predeterminadas
  • 100-999 Para el sistemas
  • 1000- para los usuarios.

GID es el numero identificador del grupo, codificándose de la misma forma que antes.

Si tenemos permiso de escritura podremos hacer que nuestro usuario, con el que somos capaces de entrar, sea root o del grupo root.

La descripción de usuario tiene varios campos separados por comas.

El directorio de usuario podrá estar vació entonces sera el raiz, si no queremos que este usuario tenga directorio lo mejor es poner uno que no existe.

El Shell es el programa que nos lanzara el prompt, en caso de que no queramos generar prompt a un usuario pondremos /bin/false. Imaginaros que pasaría si por tener permiso de escritura ponemos que se ejecute un troyano.

/etc/group: Al igual que el de usuario tiene permiso de lectura, pero no debe tener permiso de escritura y nos indica a que grupos pertenecen los usuarios.

Nombre grupo : Clave : GID : Lista de usuarios separada por comas.

La clave en el fichero group por regla general es ‘x’ pero podríamos fijar una para que usuarios que no son del grupo se puedan unir a el.

/etc/shadow: Tendrá la clave del usuario cifrada, para los usuarios que en passwd pone ‘x’ en el campo clave, ademas tendrá información de la caducidad de la clave. Este fichero solo tiene lectura por el root ya que sino cualquier otro usuario pudiera leer el fichero de claves (Por eso aparecio este fichero que sustituía al passwd) se le podria pasar un crackeador por fuerza bruta y lograríamos con tiempo y paciencia las claves.

Usuario : Clave : C1 : C2 : C3 : C4 : C5 : C6

  • C1: Días desde 1/1/1970 cuando se cambio en passwd.
  • C2: Minimo número de días entre cambio de contraseña, lo normal un 0.
  • C3: Máximos días de validez de la cuenta, 99999 infinito.
  • C4: Días de aviso antes de caducar contraseña-
  • C5: Días después de caducar la clave en que deshabilita la cuenta. Vacío si no se deshabilita.
  • C6: Fecha de caducidad marcada desde 1/1/1970, Vacio si no caduca.

Si tenemos permiso de escritura podremos poner nuestra clave como vamos a ver ahora.

Y empezamos a ver como ampliar nuestros privilegios si nos encontramos que el fichero /etc/passwd tiene permiso de escritura de diversas formas.

1.-Nuevo usuario

Creamos un nuevo usuario y le indicamos en el ID de usuario y grupo un cero, en la clave un * para indicar que es vacía.

Algunos sistemas no nos dejaran ponerla en vacío, por lo que la tendríamos que crear de algunas de las siguientes formas que explicamos a continuación

2.-Cambiar la clave a un usuario.

Para esto debemos conocer primero el formato de una clave de linux, para poder crearla:

  1. $x$ Donde la x indica el tipo de cifrado. En caso de no comenzar por $ es el algoritmo DES. $1$ Algoritmo MD5 y tendra 22 caracteres, $2$ Algoritmo blowfish, $3$ sha256, $5$ SHA-256 de 43 Caracteres. $6$ SHA-512 de 86 Caracteres. Este es el que generalmente usaremos.
  2. SALT Son caracteres aleatorios, lo normal 8, que finalizan en el símbolo ‘$’ y nos ayuda a que dos claves iguales den codificacion distinta.
  3. La clave en cuestión.

Para generar una clave que luego pegaríamos en nuestro fichero /etc/passwd, ya sea para nuestro nuevo usuario con acceso root o directamente en el root, o en /etc/shadow si es este el que se ha descuidado y lo hemos puesto como escritura.

openssl passwd -1 -salt <caracteres SALT> <Clave> // Genera una clave MD5

mkpasswd -m <Metodo> <Clave>

Los métodos posibles son: des standard 56 bit DES-based crypt(3), md5, sha-256sha-512

Otros métodos, aunque yo me quedo con el comando ‘mkpasswd’ son:
python -c ‘import crypt; print crypt.crypt(“pass”, “$6$salt”)’
perl -le ‘print crypt(“pass123”, “abc”)’
php -r “print(crypt(‘aarti’,’123′) . \”\n\”);”

Mediante el error de SUID

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.