VulnHub - Os-Bytesec CTF Walkthrough

 
bytesec
Máquina de dificultad intermedia. El objetivo principal es comprometer completamente el sistema mediante la obtención de dos flags: la de usuario (user.txt), logrando acceso inicial al sistema, y la de root, mediante la escalada de privilegios hasta el nivel de administrador. 

Recopilación de información

netdiscover
sudo netdiscover -r 192.168.50.0/24
netdiscover
Con la herramienta netdiscover, realizamos un escaneo de la red para identificar la máquina objetivo. En este caso, nuestra máquina tiene la dirección IP 192.168.50.104. Cabe mencionar que el MAC-Vendor para las máquinas de la plataforma Vulnhub siempre es 'PCS Systemtechnik GmbH'.

NMAP
sudo nmap -n -Pn -sS --open --min-rate 5000 192.168.50.104
nmap -sS
Mediante nmap, realizamos un escaneo de los puertos abiertos y los servicios en ejecución en el servidor. Con esta información, enumeraré los nombres de dichos servicios para obtener detalles precisos sobre la superficie de ataque.

sudo nmap -sV -p 80, 139, 455, 2525 --min-rate 5000 192.168.50.104
nmap -sV
El servidor está ejecutando HTTP en el puerto 80 (Apache 2.54.18), SMB en los puertos 139 y 445, y SSH en el puerto 2525. Cabe mencionar que, por defecto, el protocolo SSH escucha por el puerto 22.

Por último, vamos a ejecutar un conjunto de scripts básicos de nmap para obtener mayor información de los servicios en ejecución.
sudo nmap -sC -p 80,139,445,2525 192.168.50.104
nmap -sC
Lo más importante aquí es lo que dice smb-security-mode y smb2-security-mode:
  • Message signing disabled (Dangerous): Esto es una vulnerabilidad real. La firma de mensajes (Message Signing) es lo que garantiza que los paquetes SMB no han sido modificados en tránsito. Al estar deshabilitada, la máquina es vulnerable a ataques de Relay (SMB Relay).
  • Account used: guest: Indica que el servidor permite el acceso como "invitado" o usuario anónimo. Esto significa que probablemente puedas listar carpetas compartidas sin necesidad de una contraseña.
Ahora ejecutare el script smb-enum-users de nmap para enumerar los usuarios del servicio SMB.
sudo nmap -p 139,445 --script smb-enum-users.nse 192.168.50.104
nmap --script smb-enum-users.nse
Como se muestra en los resultados del script smb-enum-users, se encontró un usuario llamado smb.

Servicio HTTP. 

A continuación, analizaré el servicio web que se encuentra en ejecución.

home page
También analizaré el código fuente de la página web.

source page

footer home page
La pista es clara podemos acceder al servicio SBM probablemente sin contraseña de usuario 

Ahora con la herramienta Gobuster enumerare directorios del servidor web.
sudo gobuster dir -u http://192.168.50.104 -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt
gobuster tools
Al analizar los directorios, no encontré nada interesante, salvo aquellos que contienen imágenes. Recordemos que, en la descripción de este CTF, se menciona la estenografía como una pista clave para su resolución.

Una imagen en particular llamo mi atención es la siguiente.
bluekeep img
Con toda la información recopilada, comenzaré a analizar el servicio SMB. Recordemos que tenemos un usuario llamado smb, cuyos recursos compartidos aún no hemos analizado.

Nota: BlueKeep es una vulnerabilidad crítica que afecta los sistemas operativos Windows. BlueKeep es una vulnerabilidad de ejecución remota de código RCE que afecta a los servicios de escritorio remoto (RDP) de Windows. 
Para más información comparto los siguientes links:

Servicio SMB análisis

Con la herramienta smbclient me conectaré al servicio smb del usuario smb.

smbclient //192.168.50.104/smb -u smb -p

smbclient
Cuando smbclient solicite la contraseña, simplemente presiona Enter para continuar con el acceso sin autenticación.

smb-cliente command get
Con el comando get podemos descargar los dos archivos main.txt y safe.zip.

El archivo main.txt contiene la palabra helo.

file main.txt
Ahora descomprimiré el archivo safe.zip para analizar sus archivos internos.
unzip safe.zip
Como se muestra en la imagen anterior el archivo safe.zip esta protegido por contraseña, utilizaré la palabra helo que se encuentra en el archivo main.txt.

password safe.zip
Como se muestra en la imagen la palabra helo no es la contraseña para el archivo safe.zip.

En este punto, emplearé la herramienta zip2john para extraer el hash del archivo comprimido. Posteriormente, utilizaré John the Ripper junto con el diccionario rockyou.txt para realizar un ataque de fuerza bruta y obtener la contraseña.
zip2john
Tras ejecutar la herramienta, se obtuvo el hash de la contraseña, tal como se muestra en la siguiente captura.
hash password safe.zip
password safe.zip
La contraseña estaba dentro del diccionario rockyou.txt y se corresponde con hacker1. ahora analizaré los archivos descomprimidos.
archivos safe.zip
El contenido incluye dos archivos: una imagen en formato JPG y un archivo .cap, el cual corresponde a una captura de tráfico de red.
secret.jpg
secret.jpg
user.cap
user.cap

SSID user.cap
Como se muestra en las imágenes anteriores, el archivo user.cap contiene una captura de tráfico de red bajo el estándar 802.11 (Wi-Fi). Tras analizar los paquetes de datos, logré identificar el SSID de la red: 'blackjax', el cual podría ser un nombre de usuario válido en el sistema. Por lo tanto, utilizaré la herramienta aircrack-ng para descifrar la contraseña de dicha red.
aircrack
aircrack
Como se muestra en la captura anterior, aircrack-ng logró descifrar la contraseña de la red, la cual resultó ser: 'snowflake'.

Dado que el puerto 2525 aloja el servicio SSH, y tras haber obtenido el par de credenciales blackjax:snowflake, procederé a validar dicho acceso mediante una conexión SSH.
conexion SSH
Como se observa en la captura anterior, se pudo establecer exitosamente una conexión SSH mediante las credenciales obtenidas.
id usuario
Ahora revisaré los archivos del usuario blackjax.
flag user
Como se muestra en las imágenes anteriores encontramos la primera flag "user-flag". Debemos encontrar la flag root, también se nos muestra MD5-HASH el cual lo decifre con la herramienta crackstation.
MD5 descifrado
Ahora buscaré archivos con el bit SUID activado. Este bit especial hace que el archivo se ejecute con los permisos del propietario, no del usuario que lo ejecuta. Si el propietario es root, cualquier usuario que ejecute dicho archivo tendrá privilegios de root durante su ejecución.
En este punto, el archivo /usr/bin/netscan llamó mi atención. Procederé a verificar si el usuario blackjax tiene permisos para ejecutarlo.
archivo netscan
Como se observa en la imagen anterior el archivo /usr/bin/netscan el propietario es el usuario root y el usuario blackjax lo puede ejecutar.

Ahora analizaremos el archivo netscan, lo ejecutaré con la utilidad ltrace de Linux.
comando ltrace
Como se muestra en la imagen anterior, el script netscan ejecuta el comando netstat -antp. Un punto crítico es que netstat se está invocando sin especificar su ruta absoluta, lo que abre la posibilidad de una vulnerabilidad por secuestro de ruta (PATH hijacking).

En este punto podemos aprovecharnos de la técnica path hijacking. Este tipo de vulnerabilidad consiste en manipular la varible $PATH para que el sistema ejecute un binario malicioso en lugar del legítimo, cuando un programa llama a un comando sin especificar su ruta absoluta.

En la ruta /tmp ejecutaremos la siguiente instrucción echo '/bin/sh' > netstat y luego cambiaremos los permisos de ejecución a chmod 777 netstat.
netstat payload
Ahora debemos modificar la variable $PATH de la siguiente manera:
Si todo va bien en este punto al ejecutar el archivo netscan debemos recibir una bash con privilegios de root.
elevacion_privilegio_root
Por último, nos cambiamos al directorio root.
/root
Y mostramos el contenido del archivo root.txt que es la flag root.
flag root
Happy hack!!!

Comentarios