HackTheBox: Curling
Curling es una máquina fácil muy interesante que primero nos reta con el CMS Joomla, seguido de una escalada de privilegios con pkexec de Polkit en Linux.
Enumeración
Nmap
Mirando el escaneo, vemos que solo los puertos 22 y 80 están abiertos.
# Nmap 7.94SVN scan initiated as: nmap -p22,80 -sCV -n -Pn 10.129.150.135
Nmap scan report for 10.129.150.135
Host is up (0.095s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Home
|_http-generator: Joomla! - Open Source Content Management
|_http-server-header: Apache/2.4.29 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Vamos al sitio web alojado en el puerto 80, donde encontramos un blog.

Enumeración web
Enumeramos el sitio y encontramos que está gestionado por Joomla.
Joomla! es un sistema de gestión de contenidos (CMS) libre y de código abierto para publicar contenido web.
curl -s http://<DOMAIN>/ | grep Joomla 
Versión:
curl -s http://<DOMAIN>/README.txt | head -n 5 
Sabiendo que el sitio usa Joomla, encontramos el panel de administrador yendo a /administrator.

No pudimos encontrar credenciales por fuerza bruta, así que fuimos a buscar un usuario en el blog.
Enumeración de usuarios
En la página principal encontramos un post hecho por una persona que dejó su nombre, lo que sugiere un usuario. El post también tiene la palabra curling2018, que se parece mucho a una contraseña, pero no funcionó.

Finalmente, tenemos un posible usuario: floris.

Seguimos revisando el código fuente y vimos que se dejó un comentario que apunta a un documento. Lo abrimos y encontramos lo que parece ser una cadena codificada en base64.
echo Q3VybGluZzIwMTgh | base64 -d ![]()
Ahora tenemos una contraseña.
Acceso inicial
Ahora que tenemos acceso al panel de administrador, podemos usar varias técnicas para lograr RCE.

RCE
Vamos a Templates, abajo a la izquierda, bajo Configuration.

Luego, hacemos clic en la opción Templates.

Podemos elegir el template Protostar para nuestro propósito.

Ahora seleccionamos una página para insertar nuestra webshell; para esto podemos usar error.php.

Insertamos nuestro payload en el código PHP, luego hacemos clic en Save & Close.

Usando curl ejecutamos nuestra webshell.
curl -s "http://10.129.81.108/templates/protostar/error.php?cmd=whoami" ![]()
Listamos las carpetas del servidor, encontramos un único usuario en /home y, dentro, un archivo password_backup.

Al ver su contenido, encontramos que es un hexdump.

![]()
Para obtener texto plano, usamos CyberChef. Después de pasar el texto por distintos modos de decodificación, obtuvimos lo que parece ser un archivo de texto con algo de contenido dentro.

Probamos este texto con el usuario floris por SSH, y funcionó.

Ahora obtuvimos nuestra primera flag.

Escalada de privilegios
Para la escalada de privilegios empezamos notando que el usuario no tiene permiso para usar sudo en el servidor.

Luego, notamos que las versiones del kernel y de sudo están desactualizadas.

Encontramos que esta versión es vulnerable a PwnKit: un exploit autocontenido para CVE-2021-4034, una escalada de privilegios local en pkexec de Polkit.
https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034 Para nuestro propósito usamos Metasploit.

Después de dejar una sesión en segundo plano, usamos el exploit cve_2021_4034_pwnkit_lpe_pkexec, que directamente nos dio una sesión como root.

Acá obtuvimos nuestra flag final.

Gracias por leer.