Comenzamos con un escaneo general y uno específico de puertos:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.26
❯ nmap -sC -sV -p22,80 -oN 02-targeted.txt 192.168.1.26
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-03 14:14 -03
Nmap scan report for 192.168.1.26
Host is up (0.00037s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 1f:ed:64:93:84:b5:b2:e8:af:5a:0e:6f:52:af:4b:48 (RSA)
| 256 3d:df:6f:02:13:9e:15:f8:51:94:30:f8:45:e3:f2:93 (ECDSA)
|_ 256 2f:f4:af:e1:f4:c4:a5:3b:50:bb:e5:b9:2a:9f:39:de (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-title: Master Control Program
|_http-server-header: Apache/2.4.38 (Debian)
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.65 secondsEnumeramos con gobuster:
❯ gobuster dir -u 192.168.1.26 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -x html,php,txt
...
/index.html (Status: 200) [Size: 309]
/img (Status: 301) [Size: 310] [--> http://192.168.1.26/img/]
/manual (Status: 301) [Size: 313] [--> http://192.168.1.26/manual/]
/robots.txt (Status: 200) [Size: 623]
/font (Status: 301) [Size: 311] [--> http://192.168.1.26/font/]
/MCP (Status: 301) [Size: 310] [--> http://192.168.1.26/MCP/]
...En el código del index hay un comentario con unas credenciales codificadas:
<!-- kzhh:SbWP9q94ZtE9qD -->En MCP encontramos un tron.txt con un texto y una cadena en base64:
MASTER CONTROL PROGRAM
----------------------
Ram:
Do you believe in the Users?
Crom:
Sure I do! If I didn't have a User, than who wrote me?
KysrKysrKysrK1s+Kz4rKys+KysrKysrKz4rKysrKysrKysrPDw8PC1dPj4+PisrKysrKysrKysrKy4tLS0tLi0tLS0tLS0tLS0tLisrKysrKysrKysrKysrKysrKysrKysrKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS4rKysrKysrKysrKysrLg==Al decodificar la base64 obtenemos código Brainfuck:
❯ echo "KysrKysrKysrK1s+Kz4rKys+KysrKysrKz4rKysrKysrKysrPDw8PC1dPj4+PisrKysrKysrKysrKy4tLS0tLi0tLS0tLS0tLS0tLisrKysrKysrKysrKysrKysrKysrKysrKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS4rKysrKysrKysrKysrLg==" | base64 -d
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.----.-----------.++++++++++++++++++++++++.--------------------.+++++++++++++.Que al ejecutarse en Brainfuck revela la palabra player. Dentro de MCP hay un directorio terminalserver con un archivo que describe un cifrado de sustitución (que resulta ser Atbash: el alfabeto invertido):
substitute
--------------------------
plaintext
abcdefghijklmnopqrstuvwxyz
ciphertext
zyxwvutsrqponmlkjihgfedcba
--------------------------Aplicando esa sustitución con CyberChef a las credenciales del comentario, obtenemos la contraseña real:
kzhh:SbWP9q94ZtE9qD
pass:SyWP9j94ZgE9jDCon esas credenciales (usuario player) iniciamos sesión por SSH y obtenemos la primera flag.
Para escalar privilegios, descubrimos que tenemos permiso de escritura sobre /etc/passwd (Writable Critical Files Privesc). Generamos un hash con openssl y reemplazamos la contraseña de root:
player@tron:~$ openssl passwd
Password:
Verifying - Password:
z/ujeo9Mel5CYCambiamos al usuario root con la contraseña generada, obtenemos acceso y nuestra flag.
Fin.