Bolt HackTheBox (Writeup)
Skills:
Information Leakage
Subdomain Enumeration
SSTI (Server Side Template Injection)
Abusing PassBolt
Abusing GPG
Reconnaissance:
Création de l'espace de travail :
Nous établirons notre espace de travail en créant trois dossiers pour stocker les contenus importants, les exploits et les résultats de la reconnaissance à l'aide de Nmap.

Vérification de la Connectivité VPN
Vérification de la connexion VPN pour assurer une communication stable avec la machine cible.

Recherche des ports ouverts avec Nmap :
Exploration des ports ouverts et exportation dans le fichier "allPorts" dans le répertoire Nmap:

Analyse des ports ouverts avec extractPorts:
Utilisation de la fonction extractPorts pour afficher de manière synthétique les ports ouverts et les copier dans le clipboard (22,80,443)

Scan de la version des ports avec Nmap:
Utilisation de Nmap pour scanner la version des ports et extraction des informations dans le fichier "targeted" :

Pour résoudre les noms de domaine en adresses IP via DNS, on insère dans le fichier /etc/hosts le nom de domaine associé à son adresse IP.

Port 80

Nous tentons de créer un compte, mais recevons une erreur "Internal Server Error".


Énumération des utilisateurs possibles :
Joseph Garth
Bonnie Green
Jose Leos

Nous nous voyons proposer de télécharger une image Docker .tar, incluant un package web de base pour démarrer un projet avec un design élégant.

Recherche de répertoires :
Nous effectuons une recherche de répertoires avec gobuster :
Rien d'intéressant n’est trouvé.

Recherche de sous-domaines :
Nous recherchons des sous-domaines avec gobuster :
Sous-domaines trouvés :
demo.bolt.htbmail.bolt.htb

Nous les ajoutons au fichier /etc/hosts.

http://mail.blolt.htb

http://demo.bolt.htb:

Information Leakage (image.tar)
Nous cherchons des informations sensibles dans le fichier Docker .tar qui contient des dossiers avec un fichier json, un fichier layer.tar et une version.

Extraction des fichiers :
Nous extrayons les fichiers de layer.tar comme suit :

Nous ouvrons la base de données db.sqlite3 :
Nous trouvons un utilisateur admin avec un mot de passe hashé :
id: Identifiant unique de l'utilisateur.username: Nom d'utilisateur (admindans ce cas).email: Adresse email associée ([email protected]).password: Mot de passe hashé ($1$sm1RceCh$rSd3PygnS/6jlFDfF2J5q.).

Nous décryptons le mot de passe avec john :
admin:deadbolt

Nous nous connectons au panneau d'administration mais ne trouvons rien d'intéressant, sauf qu’il utilise Flask.

Recherche du code d'invitation :

Nous recherchons le code d'invitation dans les fichiers extraits :

Un fichier Python contient le code d’invitation :
XNSS-HSJW-3NGU-8XTJ

Nous créons un nouveau compte utilisateur jordan avec le mot de passe Jordan1234, puis nous avons accès à la boîte de réception et à la démo du panneau admin.

user: jordanpassword: Jordan1234


Vulnérabilité SSTI :
En observant la configuration, nous remarquons que si nous changeons notre nom de configuration, un email de confirmation est envoyé. Cela peut être une opportunité pour une attaque SSTI.


Nous testons avec un payload typique :
Si le résultat est 81, l'application est vulnérable.

Nous confirmons que l'application est vulnérable et testons l'injection de commandes avec un payload issu de payloadallthethings :
Commande ID:

Nous réussissons à exécuter une reverse shell en écoutant sur le port 443 :
Nous créons un fichier index.html avec le contenu suivant pour exécuter une reverse shell
Puis nous démarrons un serveur HTTP avec Python :
Nous envoyons le payload avec curl pour récupérer et exécuter la commande :

Traitement de la terminal :
Cela permettra de travailler de manière beaucoup plus efficace et surtout plus confortable.
Élévation de privilège :
En tant qu'utilisateur www-data, nous tentons d'élever nos privilèges pour obtenir un accès root.
Énumération initiale avec LinPEAS
Vous avez utilisé LinPEAS pour identifier les failles potentielles du système.
Commandes exécutées :

LinPEAS a révélé un fichier de configuration contenant des informations sensibles :
/etc/passbolt/passbolt.php
host :localhostport : 3306username : passboltpassword : rT2;jW7<eY8!dX8}pQ8%database : passboltdb

Connexion à la base de données MySQL
Utilisation des informations pour se connecter à la base de données :
Analyse des tables dans la base de données

users: Contient des utilisateurs.
id
role_id
username
active
deleted
created
modified
4e184ee6-e436-47fb-91c9-dccb57f250bc
1cfcd300-0664-407e-85e6-c11664a7d86c
1
0
2021-02-25 21:42:50
2021-02-25 21:55:06
9d8a0452-53dc-4640-b3a7-9a3d86b0ff90
975b9a56-b1b1-453c-9362-c238a85dad76
1
0
2021-02-25 21:40:29
2021-02-25 21:42:32
secrets: Messages chiffrés (potentiellement exploitables plus tard).

gpgkeys: Contient des clés publiques (peut être utilisé dans certains scénarios).

Tentative de connexion avec eddie :
Mot de passe :
rT2;jW7<eY8!dX8}pQ8%Accès à l'utilisateur
eddieobtenu
Flag user.txt :)

Réutilisation de LinPEAS (user eddie)
Après avoir obtenu l'accès à l'utilisateur eddie, nous réutilisons LinPEAS pour explorer le système à la recherche de potentielles clés SSH ou d'autres indices utiles.

Fichier trouvé : Un fichier de journal contenant des clés SSH potentielles :
/home/eddie/.config/google-chrome/Default/Local Extension Settings/didegimhafipceonhjepacocaffmoppf/000003.log

Décryptage message avec GPG
Clé privée GPG : Nous utilisons l'outil GPG pour importer la clé privée et tenter de déchiffrer le message chiffré dans la table secrets de la base de données passboltdb.
Extraction du hash de la clé privée
Pour pouvoir utiliser la clé privée, nous devons d'abord obtenir son hash. Nous utilisons l'outil gpg2john pour extraire le hash de la clé privée :

Brute force du mot de passe de la clé privée avec john
Nous utilisons John the Ripper pour effectuer une attaque par dictionnaire et découvrir le mot de passe de la clé privée. Nous utilisons la liste de mots rockyou.txt pour cela :
Mot de passe trouvé : merrychristmas

Importation de la clé privée et décryptage du message
Nous importons la clé privée avec gpg

Puis, nous décryptons le message chiffré (probablement contenu dans le fichier message.txt récupéré de la base de données secrets) :
Mot de passe de root trouvé : Z(2rmxsNW(Z?3=p/9s

Flag root.txt


Mis à jour
Ce contenu vous a-t-il été utile ?