Resumen

La máquina comienza con un servicio web que permite la subida de archivos. Mediante fuzzing de usuarios, localizo un archivo perteneciente al usuario amanda que contiene credenciales. Con ellas accedo a un panel de administración vulnerable a RCE (Remote Code Execution) mediante inyección de caracteres especiales (Newlines y Tabs) para evadir filtros. Exfiltro la base de datos, obtengo hashes y logro acceder por SSH como tobias. Finalmente, escalo privilegios identificando un servicio interno en el puerto 8080 (Gogs), el cual exploto mediante CVE-2023-46818 para obtener ejecución de código como root.

Imagen del post

Escaneo y Reconocimiento

Inicio con un escaneo de puertos para identificar la superficie de ataque.

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://nocturnal.htb/

Enumeración Web (Puerto 80)

El servidor redirige a nocturnal.htb, por lo que añado el dominio a mi /etc/hosts

Imagen del post

Al acceder, encuentro un panel que permite subir archivos. Observo que los archivos subidos se almacenan en el servidor y la estructura de la URL o el endpoint parece depender del nombre de usuario. Esto sugiere una vulnerabilidad de IDOR (Insecure Direct Object Reference) o enumeración de directorios.

Imagen del post

Realizo fuzzing sobre el campo de usuario para descubrir directorios de otros usuarios. Encuentro que el usuario amanda tiene archivos almacenados.

Imagen del post

Imagen del post

Descargo y descomprimo un archivo encontrado en su directorio, lo que revela unas credenciales en texto claro.

  • User: amanda
  • Pass: arHkG7HAI68X8s1J

Imagen del post

Acceso Inicial

Panel de Administración y RCE

Utilizo las credenciales de Amanda para loguearme en el panel de administración. En el dashboard (dashboard.php), encuentro un archivo para realizar backups que solicita una contraseña.

Imagen del post

Imagen del post

En ese campo igual hay un RCE.

Descubro que hay un filtro de espacios, pero logro evadirlo utilizando tabuladores (%09) y saltos de línea (%0A)

/nbash/t-c/t"whoami" (interpretado como \n bash \t -c \t "whoami")

Imagen del post

Exfiltración de Base de Datos

Aprovecho el RCE para volcar el contenido de la base de datos SQLite del servidor.

Imagen del post

Payload utilizado:

%0Abash%09-c%09"sqlite3%09/var/www/nocturnal_database/nocturnal_database.db%09.dump"%0A

La respuesta me devuelve los registros de la tabla users con hashes de contraseña

INSERT INTO users VALUES(1,'admin','d725aeba143f575736b07e045d8ceebb');
INSERT INTO users VALUES(2,'amanda','df8b20aa0c935023f99ea58358fb63c4');
INSERT INTO users VALUES(4,'tobias','55c82b1ccd55ab219b3b109b07d5061d');

Imagen del post

Logro obtener la contraseña en texto claro para el usuario tobias: slowmotionapocalypse.

Movimiento Lateral (SSH)

Con las credenciales tobias:slowmotionapocalypse, me conecto exitosamente mediante SSH.

Imagen del post

Realizo una enumeración básica y confirmo que Tobias no tiene permisos de sudo. Sin embargo, al revisar los puertos internos abiertos (netstat o ss), detecto un servicio corriendo en el puerto 8080

Imagen del post

Escalada de Privilegios

Tunneling y Enumeración Interna

Para acceder al servicio interno, realizo un Local Port Forwarding (túnel SSH) hacia mi máquina atacante.

Al acceder a localhost:8080, encuentro un servicio web (aparentemente Gogs, basado en el exploit posterior). Pruebo reutilización de credenciales y logro acceder con admin:slowmotionapocalypse.

Imagen del post

Imagen del post

Analizamos la versión.

Imagen del post

Explotación de CVE-2023-46818

Identifico que la versión del servicio es vulnerable a CVE-2023-46818. Esta vulnerabilidad permite escalar privilegios o lograr ejecución de código a través de una inyección de argumentos en el manejo de hooks de git o configuraciones internas.

Utilizo un exploit público en Python para atacar la instancia:

link_preview

Imagen del post

A pesar de la inestabilidad del servidor, el exploit logra ejecutarse correctamente y me otorga una shell como root.

Imagen del post

Lo tenemos!

Imagen del post