Secret HackTheBox (Writeup)
Skills:
Code Analysis
Abusing an API
Json Web Tokens (JWT)
Abusing/Leveraging Core Dump [Privilege Escalation]
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 (80,22,3000)

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:

Observation : Le même site web est accessible sur les ports 80 et 3000.


Recherche de répertoires :
Nous utilisons Gobuster pour rechercher des répertoires sur le site:

Enregistrement d'un utilisateur API
Dans la section "docs", nous trouvons des instructions pour enregistrer un utilisateur. Exemple pour l’utilisateur "jordan" :


Authentification API
Pour se connecter :
Cela nous retourne un token d'authentification (auth-token).
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoiam9yZGFuIiwiZW1haWwiOiJqb3JkYW5AaHRiLmNvbSIsImlhdCI6MTczMDI3ODEyM30.z6quBZ6bTMSrkl7NxIfLEL0gUw6Wjvm3HWdnlhZBUoQ

Vérification du Json Body par défaut

email: "[email protected]"
password: "Kekc8swFgD6zU"

Vérification vulnérabilité JSON Web Token
Utilisez un site pour décoder le JWT afin de lire et manipuler son contenu.
Note : Le token JWT devrait être invalide. En modifiant les champs "name" et "email" pour ceux d’un administrateur :

"name": "theadmin",
"email": "[email protected]",
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.yn6hXmpBxrfb5TMDY4_6zirckzlhnQP_L_YWb4wL2Ug

Tentative d'accès à une API privée:
Essai de connexion à une API privée en utilisant le JWT modifié :
Nous recevons un message "invalid token".

Avec notre propre JWT, nous avons un accès en tant qu’utilisateur normal :
Nous recevons un message "You are normal user".

Énumération des routes API avec Wfuzz
Utilisez Wfuzz pour explorer les routes disponibles :
Nouvelle découverte : la route /api/logs.

Analyse du code source
La page web offre une option pour télécharger le code source.

Trouvailles :
Un fichier
.envcontenant untoken_secretavec la valeur "secret".

Un dossier .git avec un commit indiquant la suppression du fichier .env.

L’ancien token_secret supprimé est retrouvé:
gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE

Utilisez cet ancien token_secret pour signer un JWT avec les informations d'admin, et accédez à l'API privée :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzIxZjE5ZmQ4YWMzZTA0NjMxZjc4NmQiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJvb3RAZGFzaXRoLndvcmtzIiwiaWF0IjoxNzMwMjc4MTIzfQ.9YpH72pzpIjqRjc8EYBKhjLgmwjhetzpbDfVgXDzQi8

Résultat : Message de bienvenue en tant qu'admin : "welcome back admin".

Enfin, en exécutant la route /api/logs, le contenu suivant est affiché :

En examinant le fichier privitate.js et en analysant le code, on constate que :

Vulnérabilité RCE:
Voici un exemple de commande curl qui tente d’injecter id:

Nous allons exécuter un reverse shell :
Créez un fichier
index.htmlsur notre machine et créez un serveur web avec le contenu suivant :
Ensuite, mettez-vous à l'écoute sur le port 4444 :
Exécutez une injection avec curl sur notre serveur web :

Flag user.txt :)

Traitement du terminal : Une fois que vous avez accès au serveur Linux, voici les commandes à exécuter pour un traitement efficace dans le terminal :
Cela permettra de travailler de manière beaucoup plus efficace et surtout plus confortable.
Élévation de Privilège (SUID)
Avec la commande suivante, nous recherchons si notre utilisateur a des privilèges SUID :
Nous trouvons un fichier rare situé à /opt/count, dont le propriétaire est root.

En exécutant ce binaire, il nous demande de fournir un fichier, puis il nous liste le nombre total de caractères, de mots et de lignes. Ce script va lire le contenu du fichier et ensuite afficher ses propriétés.

Core Dump Binaire
En examinant le code source, nous pouvons observer qu'un core dump est généré, stockant temporairement le contenu en cas d'erreur.

Les erreurs sont enregistrées dans le répertoire /var/crash. Voici comment créer un core dump :
Entrer le nom du fichier ou du répertoire :
(Clé SSH root)
Sauvegarder les résultats dans un fichier ?
(Mettre en arrière-plan)
Obtenir le PID :
(Copier le PID)
Tuer le processus :
Relancer le binaire :
Vérifier le répertoire des core dumps :
(Un nouveau fichier apparaît :
_opt_count.1000.crash)

Nous avons maintenant un core dump en base64 contenant la clé SSH de root.

Apport-umpack
Pour extraire les informations, nous allons utiliser apport-unpack :
Ensuite, nous allons lister le contenu du fichier dans /tmp/ssh/coredump à l'aide de strings :

Nous trouvons ainsi la clé SSH root

Connexion SSH
Une fois que nous avons créé le fichier id_rsa avec les permissions 600, nous pouvons nous connecter via SSH :

Flag root :)


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