TwoMillion HackTheBox (WriteUp)
Skills:
Abusing the API to generate a valid invite code
Abusing the API to elevate our privilege to administrator
Command injection via poorly designed API functionality
Information Leakage
Privilege Escalation via Kernel Exploitation (CVE-2023-0386) - OverlayFS Vulnerability
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:

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" :

Port 80 - HTTP

Découverte de ressources avec Gobuster

Découverte du fichier inviteapi.min.js
inviteapi.min.jsCe fichier JavaScript est fortement obfusqué à l’aide de la technique classique eval(function(p,a,c,k,e,d){...}). Après déobfuscation, deux fonctions intéressantes apparaissent :
verifyInviteCode(code): envoie un code d'invitation Ã/api/v1/invite/verifymakeInviteCode(): fait une requête Ã/api/v1/invite/how/to/generate

Exploitation de l’API – Génération d’un code d’invitation
Appel initial :
Réponse
{"0":200,"success":1,"data":{"data":"Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/i1/vaivgr/trarengr","enctype":"ROT13"},"hint":"Data is encrypted ... We should probbably check the encryption type in order to decrypt it..."}#
Déchiffrement ROT13 → nouvelle URL :

In order to generate the invite code, make a POST request to /api/v1/invite/generate
Requête :

Réponse (base64) :
V1VPSUYtTEs2OFgtSFVHVFctRE9YMVM=
Décodage :
WUOIF-LK68X-HUGTW-DOX1S
Nous utilisons ce code pour créer un compte sur le site.


Exploitation de l'API HACKTHEBOX

Observation de l’API
En visitant /api, on observe les routes disponibles

Tentative de génération de config VPN (échec initial)
Réponse : non autorisé.

Modification de notre rôle via l’API

Nous testons la modification des paramètres utilisateur avec la route :
{"status":"danger","message":"Missing parameter: email"}
{"status":"danger","message":"Missing parameter: is_admin"}
Réponse :
{"id":15,"username":"Jordan","is_admin":1}

Vérification de notre statut admin

RCE via Injection de Commande

Tentative d’injection de commande dans le champ username :

Reverse Shell
Serveur de fichiers
Netcat en écoute
Envoi de la commande
Nous obtenons un shell inversé

Escalade de privilèges
Découverte de fichiers sensibles
En fouillant les fichiers accessibles depuis notre shell, nous découvrons un fichier .env caché contenant des identifiants pour la base de données :

Nous repérons également la présence d’un second utilisateur nommé admin.

Réutilisation de mot de passe
En testant les identifiants découverts, nous constatons que l’utilisateur système admin utilise le même mot de passe que celui de la base de données.
Flag user.txt :)

Cette mauvaise pratique nous permet d’obtenir une connexion SSH :
Courriel système

À la connexion, un message nous informe de la présence d’un nouveau mail. En le lisant, on obtient une information cruciale :
Hey admin,
I'm know you're working as fast as you can to do the DB migration. While we're partially down, can you also upgrade the OS on our web host? There have been a few serious Linux kernel CVEs already this year. That one in OverlayFS / FUSE looks nasty. We can't get popped by that.

Ce message nous met sur la piste d’une vulnérabilité connue dans OverlayFS : CVE-2023-0386 – une faille d’escalade de privilèges locale dans le noyau Linux.
Exploitation de CVE-2023-0386 – OverlayFS Privilege Escalation
OverlayFS permet de superposer des systèmes de fichiers. Dans certaines versions du noyau Linux, une mauvaise gestion des capacités permet à un utilisateur non privilégié d’exécuter du code avec les droits root.
Étapes d’exploitation
Cloner l’exploit depuis notre machine locale :
Transférer les fichiers compilés vers la machine cible (
scp,python -m http.server, etc.).


Sur la machine cible, exécuter dans deux terminaux :
Terminal A :
Terminal B :
Si tout se passe bien, nous obtenons un shell root

Flag root.txt :)


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