🐧Linux P.E.
Última actualización
Última actualización
La cuenta raíz en los sistemas Linux proporciona acceso administrativo completo al sistema operativo. Durante una evaluación, es posible que obtenga un shell con pocos privilegios en un host Linux y deba realizar una escalada de privilegios a la cuenta raíz. Si comprometemos por completo el host, podremos capturar el tráfico y acceder a archivos confidenciales, que pueden usarse para acceder más dentro del entorno. Además, si la máquina Linux está unida a un dominio, podemos obtener el hash NTLM y comenzar a enumerar y atacar Active Directory.
La enumeración es la clave para la escalada de privilegios. Existen varios scripts auxiliares (como LinEnum ) para ayudar con la enumeración. Sin embargo, también es importante comprender qué información buscar y poder realizar la enumeración manualmente. Cuando obtenga acceso inicial al host a través del shell, es importante verificar varios detalles clave.
Conocer la distribución (Ubuntu, Debian, FreeBSD, Fedora, SUSE, Red Hat, CentOS, etc.) le dará una idea de los tipos de herramientas que pueden estar disponibles. Esto también identificará la versión del sistema operativo para la que puede haber exploits públicos disponibles.
Al igual que con la versión del sistema operativo, puede haber exploits públicos que tengan como objetivo una vulnerabilidad en una versión específica del kernel. Los exploits del kernel pueden provocar inestabilidad del sistema o incluso un bloqueo total. Tenga cuidado al ejecutarlos en cualquier sistema de producción y asegúrese de comprender completamente el exploit y las posibles ramificaciones antes de ejecutar uno.
Es importante saber qué servicios se están ejecutando en el host, especialmente aquellos que se ejecutan como root. Un servicio mal configurado o vulnerable que se ejecute como root puede ser una victoria fácil para la escalada de privilegios. Se han descubierto fallas en muchos servicios comunes como Nagios, Exim, Samba, ProFTPd, etc. Existen PoC de explotación pública para muchos de ellos, como CVE-2016-9566, una falla de escalada de privilegios local en Nagios Core < 4.2.4.
Lista de procesos actuales
Al igual que con los servicios en ejecución, es importante comprobar si hay paquetes desactualizados o vulnerables que puedan aprovecharse fácilmente para la escalada de privilegios. Un ejemplo es Screen, que es un multiplexor de terminal común (similar a tmux). Le permite iniciar una sesión y abrir muchas ventanas o terminales virtuales en lugar de abrir varias sesiones de terminal. La versión 4.05.00 de Screen sufre una vulnerabilidad de escalada de privilegios que puede aprovecharse fácilmente para escalar privilegios.
Saber qué otros usuarios están conectados al sistema y qué están haciendo puede brindar mayor información sobre posibles movimientos laterales locales y rutas de escalada de privilegios.
Lista de procesos actuales
¿Se puede acceder a los directorios personales de otros usuarios? Las carpetas personales de los usuarios también pueden contener claves SSH que se pueden utilizar para acceder a otros sistemas o scripts y archivos de configuración que contienen credenciales. No es raro encontrar archivos que contienen credenciales que se pueden utilizar para acceder a otros sistemas o incluso para ingresar al entorno de Active Directory.
Enumeración del directorio /home
Podemos revisar directorios de usuarios individuales y verificar si archivos como el .bash_history
si son legibles y contienen comandos interesantes, buscar archivos de configuración y verificar si podemos obtener copias de las claves SSH de un usuario.
Contenido del directorio de inicio del usuario
Si encuentra una clave SSH para su usuario actual, podría usarla para abrir una sesión SSH en el host (si SSH está expuesto externamente) y obtener una sesión estable y completamente interactiva. Las claves SSH también podrían aprovecharse para acceder a otros sistemas dentro de la red. Como mínimo, verifique la caché ARP para ver a qué otros hosts se está accediendo y haga una referencia cruzada de estas claves con cualquier clave privada SSH que se pueda utilizar.
Contenido del directorio SSH
También es importante comprobar el historial de bash de un usuario, ya que puede estar pasando contraseñas como argumento en la línea de comandos, trabajando con repositorios git, configurando tareas cron y más. Revisar lo que ha estado haciendo el usuario puede brindarle una idea considerable sobre el tipo de servidor en el que se encuentra y darle una pista sobre las rutas de escalada de privilegios.
¿Puede el usuario ejecutar cualquier comando como otro usuario o como root? Si no tiene credenciales para el usuario, es posible que no sea posible aprovechar los permisos de sudo. Sin embargo, a menudo las entradas de sudoer incluyen NOPASSWD
, lo que significa que el usuario puede ejecutar el comando especificado sin que se le solicite una contraseña. No todos los comandos, incluso los que podemos ejecutar como root, darán lugar a una escalada de privilegios. No es raro obtener acceso como un usuario con privilegios sudo completos, lo que significa que puede ejecutar cualquier comando como root. Emitir un comandosudo su
simple le otorgará inmediatamente una sesión de root.
Sudo - Lista de privilegios del usuario
Los archivos de configuración pueden contener una gran cantidad de información. Vale la pena buscar nombres de usuario, contraseñas y otros secretos en todos los archivos que terminan en extensiones como .conf
y .config
Si el archivo /etc/shadow
es legible, podrá recopilar los hashes de contraseñas de todos los usuarios que tengan una contraseña configurada. Si bien esto no garantiza un mayor acceso, estos hashes pueden estar sujetos a un ataque de fuerza bruta sin conexión para recuperar la contraseña en texto simple.
En ocasiones, verás hashes de contraseñas directamente en el archivo /etc/passwd
. Todos los usuarios pueden leer este archivo y, al igual que con los hashes en el archivo shadow
, estos pueden estar sujetos a un ataque de descifrado de contraseñas sin conexión. Esta configuración, si bien no es común, a veces se puede ver en dispositivos integrados y enrutadores.
Los trabajos cron en sistemas Linux son similares a las tareas programadas de Windows. A menudo se configuran para realizar tareas de mantenimiento y copia de seguridad. Junto con otras configuraciones incorrectas, como rutas relativas o permisos débiles, pueden aprovecharse para aumentar los privilegios cuando se ejecuta el trabajo cron programado.
Si descubre y puede montar una unidad adicional o un sistema de archivos desmontado, es posible que encuentre archivos confidenciales, contraseñas o copias de seguridad que se puedan aprovechar para aumentar los privilegios.
Sistemas de archivos y unidades adicionales
Los archivos binarios se configuran con estos permisos para permitir que un usuario ejecute un comando como root, sin tener que otorgarle acceso de nivel root. Muchos archivos binarios contienen funciones que se pueden aprovechar para obtener un shell root.
Es importante descubrir qué directorios son editables si necesita descargar herramientas al sistema. Puede descubrir un directorio editable donde un trabajo cron coloca archivos, lo que proporciona una idea de la frecuencia con la que se ejecuta el trabajo cron y podría usarse para elevar privilegios si el script que ejecuta el trabajo cron también es editable.
Encontrar directorios en los que se pueda escribir
¿Hay scripts o archivos de configuración que puedan ser modificados por todo el mundo? Si bien alterar los archivos de configuración puede ser extremadamente destructivo, puede haber casos en los que una modificación menor pueda abrir más acceso. Además, cualquier script que se ejecute como root mediante trabajos de cron se puede modificar ligeramente para agregar un comando.
Buscar archivos editables
Como hemos visto, existen varias técnicas de enumeración manual que podemos llevar a cabo para obtener información que sirva de base para diversos ataques de escalada de privilegios. Existe una variedad de técnicas que se pueden aprovechar para realizar una escalada de privilegios local en Linux, que abordaremos en las siguientes secciones.
Comando
Descripción
ssh htb-student@<target IP>
SSH al objetivo del laboratorio
ps aux | grep root
Ver procesos ejecutándose como root
ps au
Ver usuarios registrados
ls /home
Ver directorios personales de usuarios
ls -l ~/.ssh
Comprobar las claves SSH para el usuario actual
history
Verificar el historial de Bash del usuario actual
sudo -l
¿Puede el usuario ejecutar algo como otro usuario?
ls -la /etc/cron.daily
Comprobar trabajos cron diarios
lsblk
Comprobar si hay sistemas de archivos o unidades desmontados
find / -path /proc -prune -o -type d -perm -o+w 2>/dev/null
Encuentre directorios que permitan la escritura a nivel mundial
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null
Buscar archivos que puedan ser escritos por todo el mundo
uname -a
Comprueba la versión del Kernel
cat /etc/lsb-release
Compruebe la versión del sistema operativo
gcc kernel_expoit.c -o kernel_expoit
Compilar un exploit escrito en C
screen -v
Compruebe la versión instalada deScreen
./pspy64 -pf -i 1000
Ver procesos en ejecución conpspy
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
Buscar binarios con el bit SUID establecido
find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null
Buscar binarios con el bit SETGID establecido
sudo /usr/sbin/tcpdump -ln -i ens192 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root
Priv esc contcpdump
echo $PATH
Verifique el contenido de la variable PATH del usuario actual
PATH=.:${PATH}
Añade un .
al comienzo de la RUTA del usuario actual
find / ! -path "*/proc/*" -iname "*config*" -type f 2>/dev/null
Buscar archivos de configuración
ldd /bin/ls
Ver los objetos compartidos requeridos por un binario
sudo LD_PRELOAD=/tmp/root.so /usr/sbin/apache2 restart
Escalar privilegios usandoLD_PRELOAD
readelf -d payroll | grep PATH
Comprobar el RUNPATH de un binario
gcc src.c -fPIC -shared -o /development/libshared.so
Compiló una biblioteca compartida
lxd init
Iniciar el proceso de inicialización de LXD
lxc image import alpine.tar.gz alpine.tar.gz.root --alias alpine
Importar una imagen local
lxc init alpine r00t -c security.privileged=true
Iniciar un contenedor LXD privilegiado
lxc config device add r00t mydev disk source=/ path=/mnt/root recursive=true
Montar el sistema de archivos del host en un contenedor
lxc start r00t
Iniciar el contenedor
showmount -e 10.129.2.12
Mostrar la lista de exportaciones de NFS
sudo mount -t nfs 10.129.2.12:/tmp /mnt
Montar un recurso compartido NFS localmente
tmux -S /shareds new -s debugsess
Se creó un tmux
socket de sesión compartido
./lynis audit system
Realizar una auditoría del sistema conLynis