Boardlight
Platform
HackTheBox
O.S
Linux
Level
Easy
Skills
Fuzzing Web
Web Application
PHP Basics
Fase 1: Reconocimiento
Realizo un escaneo inicial de la mรกquina para identificar sus puertos abiertos y los servicios en ejecuciรณn. Para ello, utilizo Nmap con parรกmetros que optimizan el proceso, como el SYN Scan (-sS), el cual envรญa paquetes SYN sin completar la conexiรณn TCP, permitiendo un anรกlisis mรกs sigiloso y rรกpido. Ademรกs, deshabilito la resoluciรณn DNS con el parรกmetro -n, lo que evita consultas innecesarias y acelera el escaneo.
sudo nmap -sS --min-rate 5000 -p- --open -n -Pn -v 10.10.10.8 -oN target

En el resultado descubrimos que solo tenemos abiertos los puerto TCP 80 y TCP 22.
Procedo a enviar una serie de scripts por defecto de nmap (Scripts NSE) contra cada uno de los puertos e intento detectar las versiones de los servicios que corren dentro de cada puerto.
sudo nmap -sCV -p80,22 10.10.11.11 -oN ports

Al observar y buscar un poco por internet, no encuentro ningรบn script confiable que funcione contra las versiones de OpenSSH y Apache mostradas por nuestro escaneo. Por lo que decido analizar un poco mรกs desde mi terminal la web que sirve el Apache.

Utilizando la herramienta WhatWeb, podemos obtener informaciรณn sobre los servicios que se ejecutan en la pรกgina, incluyendo sus versiones, el servidor que la respalda (en este caso, Ubuntu Linux), la direcciรณn IP y un correo electrรณnico. Sin embargo, por el momento, no encuentro informaciรณn particularmente relevante. Por ello, procederรฉ a examinar la pรกgina desde una interfaz mรกs amigable a travรฉs del navegador web.
Fase 2: Explotaciรณn
Tras acceder al sitio web y analizar su funcionamiento bรกsico, explorรฉ las distintas pรกginas disponibles y realicรฉ una enumeraciรณn de archivos PHP potencialmente interesantes utilizando Gobuster. Sin embargo, despuรฉs de este anรกlisis, no encontrรฉ informaciรณn de valor relevante.

Aรบn asรญ habรญa un pequeรฑo detalle que me llamรณ bastante la atenciรณn...

En toda la pรกgina se nombraba un nombre de dominio, incluso si volvemos a revisar la informaciรณn arrojada por WhatWeb, nos daremos cuenta de que el nombre del correo electrรณnico estaba asociado a este mismo dominio. Por lo tanto, decido asociar la direcciรณn IP de la mรกquina a este nombre de dominio y realizar un fuzzing de posibles subdominios.

Fuzzing
Para esta tรฉcnica, decido usar una herramienta bastante completa llamada ffuf con los siguientes parรกmetros:

-H: Agrega una cabecera HTTP, en este caso la cabecera 'Host', la cual es รบtil en un entorno como el actual, donde sospechamos que se estรฉ usando VirtualHosting para alojar otro dominio dentro de la misma IP.
-u: URL objetivo
-w: Aquรญ le indicamos la lista de palabras que se desea utilizar para realizar las pruebas de Fuzzing, en este caso, le indico un diccionario de Seclists el cual es bastante รบtil para encontrar subdominios web.
Al analizar las respuestas me doy cuenta de que lago no iba bien. Todas las opciones parecรญan salir como vรกlidas a la hora de ser un posible subdominio, lo cual obviamente, era completamente falso.
Decidรญ realizar algunas pruebas para identificar el origen del error. Para ello, utilicรฉ cURL para simular manualmente el envรญo de una peticiรณn a un subdominio inexistente, replicando el comportamiento de ffuf. Al hacerlo, notรฉ que el servidor, por algรบn motivo, redirigรญa estas solicitudes al dominio principal, devolviendo un cรณdigo de estado exitoso. Esto explicaba la confusiรณn de ffuf al ejecutar el ataque, ya que interpretaba todas las respuestas como vรกlidas.

Para evitar esto y realizar un fuzzing mรกs preciso, utilizarรฉ el parรกmetro -fs
(filter size). Este parรกmetro permite filtrar respuestas segรบn su tamaรฑo, lo que nos ayuda a descartar aquellas que coincidan con los falsos positivos detectados anteriormente. En este caso, esos falsos positivos tienen el mismo tamaรฑo que la respuesta del dominio principal, lo que indica que el servidor devuelve siempre el mismo contenido.
Al aplicar este filtro, podemos ignorar respuestas irrelevantes y enfocarnos รบnicamente en los resultados realmente รบtiles. ๐

Gracias a ello podemos ver una respuesta con un tamaรฑo distinto y que seguramente nos devuelva una pรกgina diferente. Para comprobarlo, aรฑadiremos el subdominio a nuestra configuraciรณn local de DNS, permitiendo que nuestro sistema lo interprete correctamente y podamos acceder a รฉl.

Al acceder exitosamente al subdominio, lo primero que harรญa serรญa buscar en internet el nombre del servicio, sus credenciales por defecto y probarlas. Otra opciรณn serรญa realizar rรกpidamente intentos con combinaciones comunes como โadmin:adminโ o โadmin:passwordโ, entre otras.
Por suerte, la combinaciรณn โadmin:adminโ funcionรณ. En caso de no haber sido asรญ, se podrรญan haber explorado otras opciones, como realizar un ataque de fuerza bruta utilizando herramientas como Hydra u otras similares.
Una vez dentro como admin, busco la versiรณn del servicio para ver si existe una vulnerabilidad asociada.

Al parecer, esta versiรณn de Dolibarr no restringe adecuadamente la ejecuciรณn remota de comandos a travรฉs de PHP.
Despuรฉs de una larga bรบsqueda, encontrรฉ una explicaciรณn de la vulnerabilidad: simplemente creamos un sitio dentro de Dolibarr y aรฑadimos una pรกgina, luego editamos su cรณdigo HTML, donde podemos inyectar cรณdigo PHP malicioso para lograr la ejecuciรณn remota de comandos (RCE).

Procedemos a inyectar un cรณdigo bรกsico que nos permita obtener una reverse shell en nuestra mรกquina local.
Es importante tener en cuenta que la inyecciรณn solo funciona si las etiquetas PHP se escriben en mayรบsculas (<?PHP ... ?>
). Esto se debe a una deficiente sanitizaciรณn del cรณdigo dentro del editor HTML de Dolibarr.

Procedemos a visualizarla y al intentar cargar la pรกgina se ejecuta el cรณdigo PHP y obtenemos acceso como el user www-data.

Dentro del fichero de configuraciรณn de conexiรณn a la base de datos de Dolibarr, logro encontrar un usuario y una contraseรฑa.

Pruebo a iniciar sesiรณn con MySQL, pero ya os adelanto que no hay nada de interรฉs.
Asรญ que pruebo un inicio de sesiรณn por SSH, pero tampoco funcionaba. Lo รบltimo que se me ha ocurrido es revisar el fichero de los usuarios del sistema y comprobar quienes tenian una bash asociada.

ยกBingo! Descubro que, aparte de root, solo hay un usuario con una bash asociada. Viendo esto, intento iniciar sesiรณn reutilizando la contraseรฑa de la base de datos...
ยกY funcionรณ!
ยกAccedemos con รฉxito y conseguimos la flag del usuario!

Fase 3: Escalada de privilegios
Para esta escalada de privilegios he utilizado el script LinPEASS:
Lo he transferido a la mรกquina a explotar mediante un servidor HTTP montado rรกpidamente por PHP.

Tras su ejecuciรณn y un anรกlisis detallado, descubro un archivo interesante con permisos SUID.

Ejecuto el binario enlightenment para ver quรฉ versiรณn se encuentra corriendo en el sistema.

Rรกpidamente voy a buscarla en Internet y encuentro que contiene una vulnerabilidad asociada relacionada con escalada de privilegios :)
Antes de buscar algรบn exploit pรบblico, entro a Metasploit a ver si hay suerte de encontrar algo relacionado.

Debido a que es un exploit de escalada de privilegios, va a requerir como parรกmetro una sesiรณn anterior en la que se encuentre un acceso a la mรกquina vรญctima dentro de metasploit.
Para lograr esto, voy a usar el exploit multihandler para ponerme en escucha dentro de metasploit y asรญ enviarme una reverse shell desde la sesiรณn SSH que logramos abrir anteriormente.

Luego de tener lo necesario para utilizar el exploit de escalada de privilegios, ponemos la sesiรณn actual en segundo plano (Ctrl +Z).
Como la shell que tenemos en la sesiรณn parece ser incompatible con el exploit de enlightenment, decido convertirla en un Meterpreter para que metasploit no de problemas. Y ahora si, por รบltimo configuramos el exploit de enlightenment con la nueva sesiรณn de Meterpreter.
Conversiรณn de Shell a Meterpreter.

Configuraciรณn del exploit para escalar privilegios.

Vamos al directorio de root y podemos ver la flag.

Last updated