Enumeración
Para comenzar voy a realizar un escaneo de puertos usando nmap donde me encuentro con los puertos 22, 80, 3000 y 8000 abiertos.
Veo que el puerto 3000 realiza una petición HTTP, voy a apuntar esto para analizarlo mas adelante.
Mientras tanto voy a ingresar en la página web para ver de que se trata:
El sitio posee algunos enlaces a los cuales se puede acceder, al ingresar en uno de ellos me llevó a un login del CMS "Pluck".
La version de Pluck es 4.7.18, la cual tiene una vulnerabilidad vinculada al CVE-2023-50564.
Para tratar de explotar esta vulnerabilidad primero debo poder ingresar al sistema. Probé de varias formas dar con el login pero no tuve exito.
Teniendo en cuenta el escaneo de puertos me habia apuntado que debia analizar el puerto 3000 ya que realizaba una consulta HTTP, asi que voy a ingresar en el:
Me encuentro con una página donde parece haber informacion para instalar el sistema. Para obtener algo mas de informacion voy a realizar una busqueda de directorios:
Encontre el directorio /sitemap.xml. Voy a ingresar en ese directorio y veo que me da otras rutas para seguir hasta llegar a un repositorio donde se encuentra el codigo de la página.
Para este paso lo que hice fue recisar con atención todas las partes del codigo que creia interesantes y hallé un archivo llamado password.php que contenía un hash.
Lo que voy a hacer ahora es copiar ese hash y romperlo usando hashcat.
Una vez que tengo la hash roto con la contraseña me voy a dirigir nuevamente a Pluck para ingresarla y acceder al sistema:
Ya dentro del sistema se que hay un CVE asociado a esta versión (lo mencione anteriormente), así que voy a ver si puedo usar algún exploit para vulnerar el sistema.
Al investigar la pagina encuentro que hay varios lugares donde cargar archivos, pero me voy a centrar en el apartado de instalación de módulos, ahí puedo subir archivos con extensión .zip. Para eso voy a usar un archivo con código PHP para lograr una reverse shell y lo voy a meter dentro de un archivo .zip para de esta manera camuflarlo y que el sistema me permita subirlo.
Previo a subir el archivo voy a abrir un puerto de escucha en una nueva terminal para poder obtener la reverse shell.
En caso de que no logres establecer la conexión al cargar el archivo, te recomiendo que ingreses mediante la url a la ubicación del archivo: greenhorn.htb/data/modules/nombre-archivo-.zip/nombre-archivo-reverse-shell.
Escalamiento de Privilegios
Una vez establecida la conexion hay que comenzar a esaclar privilegios para obtener las banderas user y root.
Cuando me dirijo al home encuentro el usuario "junior", el cual posee la bandera user, el problema es que no tengo acceso para navegar en los archivos de este usuario, asi que voy a probar usar la misma contraseña para el usuario "junior" y asi conectarme mediante SSH:
Y fue un éxito! Pude conectarme con el usuario junior y así fácilmente obtener la bandera de usuario.
Ahora solo queda ganar acceso de root para obtener la bandera faltante.
En la misma ruta donde encontre la bandera de usuario tambien hay un archivo PDF, el cual no puedo abrir desde la terminal del SSH, asi que voy a iniciar un servidor para transferirme ese archivo y abrirlo desde mi maquina local. Para eso desde la maquina victima voy a ingresar el siguiente comando:
python -m http.server
Luego en mi maquina local ejecute el siguiente comando para transferirme el PDF:
Al abrir el PDF veo que nos habla de que se instalo una nueva aplicación la cual se puede ingresar con una contraseña, el problema es que esta se encuentra pixelada:
Voy a probar una herramienta que permite despixelar datos. Para lograrlo en primer lugar voy a capturar una imagen del PDF, eso lo puedo hacer con la herramienta pdfimages:
Luego para despixelar la contraseña vamos a usar la herramienta depixer: https://github.com/spipm/Depix.
Y esta es la imagen que obtuve de la contraseña despixelada:
Voy a usar esta contraseña para obtener acceso root y luego navegar hasta conseguir la bandera:
Felicidades! Espero que te haya servido el tutorial.