Esta es una lista de varias cosas a comprobar que pueden servir para escalar privilegios en sistemas Linux.
Enumeración#
Versión del SO#
| |
Info del usuario#
| |
Usuarios del sistema#
| |
Las credenciales de usuarios con x en /etc/passwd están en /etc/shadow. Si conseguimos acceso a este último podemos usar unshadow /etc/passwd /etc/shadow > hashes.john para crackerlos con john.
| |
Servicios en escucha#
Aunque una vez tenemos acceso inicial al sistema los puertos internos (localhost) son relevantes, no hay que olvidar que los puertos anteriormente expuestos (en interfaces públicas) también pueden servir para escalar privilegios si hemos conseguido información nueva.
| |
| |
Conviene comprobar /etc/hosts para ver si hay algún dominio/vhost que desconozcamos.
Procesos en ejecución#
| |
Tareas Programadas#
| |
SUID/SGID Bit#
| |
Podemos mirar los binarios interesantes que aparezcan en GTFOBins.
Capabilities#
| |
Algunos relevantes:
cap_setuid: Permite a un proceso cambiar su ID de usuario para asumir los privilegios de cualquier otro usuario, incluido root.cap_setgid: Permite a un proceso cambiar su ID de grupo para asumir los privilegios de cualquier otro grupo, incluido el grupo root.cap_sys_admin: Otorga bastantes permisos de administración, como modificar parámetros del sistema o montar y desmontar sistemas de archivos.cap_dac_override: Permite ignorar por completo las comprobaciones de permisos de lectura, escritura y ejecución en el sistema de archivos.
Hay binarios que normalmente tienen algunos caps pero no necesariamente son peligrosos, p.ej: ping tendrá cap_net_raw y wireshark tendrá cap_net_admin. Normalmente LinPEAS muestra snap-confine como vulnerable porque tiene muchas capabilities, pero suele ser un falso positivo en versiones actualizadas (también ha tenido vulnerabilidades históricamente, así que hay que mirarlo).
Archivos modificables#
| |
Credenciales de apps#
Los CMS suelen guardar información de las páginas o de los usuarios en bases de datos. Las credenciales para dichas bases de datos suelen estar guardadas en archivos en los directorios raíz de la página. (P.ej, las credenciales de MySQL en Wordpress suelen estar en /var/www/html/wp-config.php)
Los archivos de las aplicaciones (y sus configuraciones) suelen guardarse en /var/www/... o en /opt.
Las contraseñas usadas en dichas configuraciones suelen reutilizarse para otros servicios.
Técnicas#
PATH Abuse#
Si tenemos acceso a un directorio en el PATH de un usuario privilegiado o bien podemos modificar el PATH de dicho usuario (algo raro), podríamos conseguir que ejecutase comandos arbitrarios sustituyendo binarios legítimos por otros nuestros.
P.ej, si el PATH de root es:
| |
y tenemos acceso de escritura en /tmp, podríamos crear un archivo ls:
| |
Cuando root inicie sesión y ejecute ls, el primer ls que encontrará el shell será el de /tmp, que pondrá el Bit SUID a /bin/bash (y luego ejecutará el ls real, para que preferiblemente el administrador no se dé cuenta de todo esto).
Si podemos modificar el PATH de un usuario, podemos añadir al principio de este cualquier directorio al que tengamos acceso para poder hacer lo mismo.
Wildcard Abuse#
Un wildcard sirve para representar uno o más posibles caracteres. P.ej, cat * intenta leer el contenido de todos los archivos (y directorios, aunque falle) del directorio actual.
Un ejemplo de vulnerabilidad es este cronjob:
| |
tar tiene un parámetro --checkpoint-action que permite ejecutar algo cada vez que se llegue a un checkpoint (al comprimir/descomprimir). Si creamos un archivo así:
| |
Cuando la tarea se ejecute, se procesarán todos los archivos de /home/user, entre los que estará el creado antes, y se ejecutará:
| |
Grupos privilegiados#
Tras haber comprobado los grupos a los que pertenecemos, podemos ver si estamos en alguno de estos:
DOCKER - ROOT DIRECTO#
docker: Permite crear un container privilegiado y montar el fs del host. Si somos del grupo docker prácticamente tenemos root asegurado. Más info aquí.
| |
LXC/LXD - ROOT DIRECTO#
lxd: Es el sistema de virtualización equivalente a Docker, de Ubuntu. Igual que con Docker ser de este grupo es root asegurado.
| |
| |
DISK - ROOT DIRECTO#
disk: Tenemos acceso completo a todos los dispositivos en el directorio /dev. Esto significa que podemos usardebugfspara acceder a todo el filesystem con privilegios de root.
Los usuarios del grupo disk pueden leer y escribir en los dispositivos de /dev directamente en crudo. Como es bastante difícil modificar el disco en crudo, se usa debugfs, una herramienta diseñada para que los sysadmins puedan recuperar archivos borrados, reparar sistemas de archivos corruptos y hacer diagnósticos. Funciona leyendo el dispositivo en crudo y reconstruyendo la estructura de carpetas y archivos por su cuenta, sin consultar al SO.
Como debugfs funciona sobre el disco en crudo, ignora los permisos del SO sobre cada archivo. El ataque es así:
| |
disk es exclusivamente para que ciertos servicios del sistema a muy bajo nivel puedan funcionar, en teoría ningún usuario humano debería pertenecer al grupo.
ADM - Posible info#
adm: No nos da admin directo, pero podemos leer todos los registros de /var/log y potencialmente encontrar credenciales, cronjobs o acciones de usuarios.
| |
