Search

Escribe para buscar.

en
HackTheBox: Curling

HackTheBox: Curling

Junior Restituyo
0xR3iko

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.

El blog alojado en el puerto 80

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.

bash
curl -s http://<DOMAIN>/ | grep Joomla

Confirmando que el sitio corre Joomla

Versión:

bash
curl -s http://<DOMAIN>/README.txt | head -n 5

Leyendo la versión de Joomla desde README.txt

Sabiendo que el sitio usa Joomla, encontramos el panel de administrador yendo a /administrator.

El panel de login del administrador de Joomla

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ó.

Post del blog que sugiere un usuario y una posible contraseña

Finalmente, tenemos un posible usuario: floris.

Identificando el 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.

bash
echo Q3VybGluZzIwMTgh | base64 -d

Decodificando la cadena base64 para revelar una contraseña

Ahora tenemos una contraseña.

Acceso inicial

Ahora que tenemos acceso al panel de administrador, podemos usar varias técnicas para lograr RCE.

Autenticados en el panel de administrador de Joomla

RCE

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

Navegando a la sección de Templates

Luego, hacemos clic en la opción Templates.

Abriendo la lista de Templates

Podemos elegir el template Protostar para nuestro propósito.

Seleccionando el template Protostar

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

Editando error.php dentro del template

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

Insertando el payload de la webshell en PHP

Usando curl ejecutamos nuestra webshell.

bash
curl -s "http://10.129.81.108/templates/protostar/error.php?cmd=whoami"

Ejecutando comandos a través de la webshell

Listamos las carpetas del servidor, encontramos un único usuario en /home y, dentro, un archivo password_backup.

Encontrando el archivo password_backup en el home del usuario

Al ver su contenido, encontramos que es un hexdump.

El archivo password_backup contiene un hexdump

Inspeccionando el contenido del 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.

Decodificando el hexdump con CyberChef

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

Iniciando sesión como floris por SSH

Ahora obtuvimos nuestra primera flag.

Flag de usuario obtenida

Escalada de privilegios

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

El usuario no puede ejecutar sudo

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

Versiones desactualizadas del kernel y de sudo

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.

Configurando el exploit de PwnKit en 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.

Obteniendo una sesión de root con PwnKit

Acá obtuvimos nuestra flag final.

Flag de root obtenida

Gracias por leer.