Time

https://www.hackthebox.eu/home/machines/profile/286

Resumen: Máquina Linux con dos puertos abiertos 22:ssh y 80:http, la página web cuenta con un embellecedor y validador JSON en línea, el cual es vulnerable a un ataque de deserialización, al aprovecharnos de él podemos realizar ejecución de código remoto para ganar acceso al sistema, una vez habiendo enumerado el sistema podemos aprovecharnos de una tarea programada de root.

Enumeración

Lo primero que hago es realizar un escaneo con nmap para saber los puertos abiertos en el rango del 1-65536.

Bandera

Descripción

-p-

Escaneo a los 65536 puertos

--open

Reporta solo los puertos con estado "open".

-T5

Exploracion a velocidades insanas (lo hago porque es un entorno de pruebas).

-v

Muestra más información sobre el sondeo que se está realizando.

-oG allPorts

Exporta los resultados en un formato Grepable con el nombre de allPorts.

Posteriormente verificamos las versiones de los servicios y haremos uso de scripts por default.

Bandera

Descripción

-p22,80

Escaneo a los puertos 22 y 80.

-sC

Escanea con los scripts por defecto.

-sV

Intenta determinar la versión del servicio que se ejecuta en el puerto.

-oN

Exporta los resultados en un formato nmap.

Visitando time.htb e interactuando con la página podemos ver que es un embellecedor y un validador de JSON.

Funcionalidad Beautify

Eligiendo la opción Validate (beta!), nos lanza el siguiente error.

Punto de acceso

Haciendo una búsqueda de las vulnerabilidades, podemos encontrar que se asemeja a lo que necesitamos, FasterXML jackson-databind versión 2.x anterior a 2.9.9.1, podría permitir a los atacantes dirigir una variedad de impactos al aprovechar un fallo al bloquear la deserialización polimórfica de la clase core-logback. Dependiendo del contenido del classpath, la ejecución de código remota puede ser posible.

Ahora que sabemos cuál CVE tiene asignado podemos buscar alguna POC. Utilizaré la siguiente:

Los pasos para ejecutar el exploit son los siguientes:

1. Crear un archivo llamado inject.sql

2. Iniciar un servidor con python en el directorio donde guardamos el archivo inject.sql

3. Nos ponemos en escucha por el puerto que indicamos en el archivo que creamos.

4. Ejecutar la carga eligiendo la opción que es vulnerable.

Ejecutando carga

Si todo sale bien debería de aparecer una petición GET, en el servidor y se establecerá la sesión con que iniciamos con netcat.

Ganadno acceso.

Escalada de privilegios

Como en esta misma carpeta tengo linpeas.sh, proceder a descargarlo, ejecutarlo y analizar resultados.

En la sección de archivos interesantes que son escribibles para todos los usuarios, existe un script llamado timer_backup.sh.

También aparece en archivos .sh

El contenido de script es el siguiente:

El script es sencillo, comprime el contenido de la carpeta /var/www/html con el nombre de website.bak.zip, y lo mueve al directorio /root, por lo tanto podemos deducir que el script es utilizado como tarea programada de root, ya que tiene escritura en /root.

Permisos 766 en el archivo.

Lo que podemos hacer es aprovecharnos de este archivo, para permitir que nuestra máquina se conecte como root al servidor, en el fichero /root/.ssh/authorized_keys debemos de copiar el contenido de una clave pública generada en nuestra máquina.

  1. Generar claves ssh.

  2. Descargar la llave pública en el servidor (previamente debimos haber estado en la carpeta donde se encuentran las claves y levantar un servidor con python).

  3. Copiamos el contenido de id_rsa.pub en /root/.ssh/authorized_keys.

  4. Procedemos a probar la conexión.

Last updated