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.

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.

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.

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.

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.
Generar claves ssh.
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).
Copiamos el contenido de id_rsa.pub en /root/.ssh/authorized_keys.
Procedemos a probar la conexión.

Last updated