HackTheBox: OpenAdmin
Enumeración
Nmap
Para empezar, corremos un escaneo de Nmap para encontrar los puertos abiertos. Nada interesante además del puerto 22/tcp (ssh) y el 80/tcp (http).
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-05 11:43 EDT
Nmap scan report for 10.129.178.122
Host is up (0.10s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Pasamos a la página web expuesta en el puerto 80/tcp. Nos encontramos con la interfaz por defecto del servidor Apache.

Ffuf
Para enumerar con más profundidad, corremos un fuzzing con ffuf. Acá pudimos ver varios directorios que nos llevaron a distintas páginas web: music, sierra, artwork.
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://10.129.178.122/FUZZ -ic -e .php
music [Status: 301, Size: 316, Words: 20, Lines: 10]
artwork [Status: 301, Size: 318, Words: 20, Lines: 10]
sierra [Status: 301, Size: 317, Words: 20, Lines: 10]
:: Progress: [175302/175302] :: Job [1/1] :: 398 req/sec :: Duration: [0:08:12] :: Errors: 0 :: La más interesante de todas las páginas fue music; nos mostró un botón de login.

El botón de login nos llevó a un tipo de panel de administración llamado OpenAdmin, que podría darnos acceso al servidor.

OpenNetAdmin es una interfaz administrativa que permite gestionar tu red IP con un inventario basado en base de datos y un front end web.
Si miramos con atención, un mensaje de advertencia nos dice que la versión en uso no es la última, y nos da la versión actual, v18.1.1.

Acceso inicial
Buscamos información sobre esta versión y encontramos que es vulnerable a ejecución remota de código. Con el siguiente PoC pudimos obtener una reverse shell.
https://github.com/amriunix/ona-rce 
Búsqueda de credenciales
Primero listamos qué usuarios hay disponibles en el servidor. Encontramos jimmy y joanna.

Profundizando en el servidor, encontramos un archivo de configuración de base de datos con una contraseña en texto plano, dándonos credenciales para posiblemente enumerar la base de datos o algo más.

Al usar las credenciales con la shell actual no podemos hacer mucho, y nos da un error de acceso denegado.

Rápidamente hicimos un ataque de password spray sobre los usuarios encontrados en el servidor y tuvimos un acierto.

Con estas credenciales obtuvimos acceso al servidor. Lamentablemente, este usuario no tenía mucho acceso, así que enumeramos un poco más.
![]()
Seguimos buscando más cosas en el servidor, y podemos ver cómo un puerto poco común está escuchando en localhost.

Lanzamos un port forward del puerto local en el objetivo con ssh, y al acceder encontramos una página de login.
ssh -L 52846:localhost:52846 <USER>@<Target-IP> 
Las credenciales de Jimmy no funcionan, así que fuimos a buscar archivos de configuración de esta página para encontrar algún error de desarrollo o algo, y encontramos que el código fuente tiene credenciales hardcodeadas. Intentaron ocultarlas como un hash, pero eso no impide que un atacante crackee el hash para obtener una contraseña en texto plano.

Usando una herramienta en línea, obtuvimos rápidamente una contraseña en texto plano.
https://crackstation.net/ 
Dentro de la página obtenemos una clave privada SSH.

Usamos la clave privada con el usuario joanna, pero nos pide una passphrase para continuar.
![]()
Crackeamos fácilmente la passphrase con john the ripper.

Una vez dentro del servidor, autenticados como joanna, obtuvimos nuestra primera flag.

Escalada de privilegios
Ahora buscamos escalar privilegios. Empezamos haciendo un sudo -l, y rápidamente encontramos que tenemos privilegios de root para ejecutar nano sobre un archivo específico.

Una técnica de GTFOBins para escalar privilegios usando nano nos da las siguientes instrucciones.
sudo nano
^R^X
reset; sh 1>&0 2>&0 ![]()

Verificamos el nivel de acceso que obtuvimos en el servidor y somos root.
![]()
Finalmente, obtuvimos la última flag.

Gracias por leer.