Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
TwoMillion-Machine-Writeup — From deobfuscating code.js to root, CVE-2023-0386 | Kitploit
Outils/GitHubGitHub/anxs3c/twomillion-machine-writeup
Privilege EscalationReconnaissanceExploitationLateral MovementReverse EngineeringWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubanxs3c/twomillion-machine-writeup

TwoMillion-Machine-Writeup

il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

From deobfuscating code.js to root, CVE-2023-0386

Voir le dépôt

À propos de la machine

TwoMillion est une machine Linux de difficulté Facile qui a été publiée pour célébrer l'atteinte de 2 millions d'utilisateurs sur HackTheBox. La machine présente une ancienne version de la plateforme HackTheBox qui inclut l'ancien code d'invitation piratable. Après avoir piraté le code d'invitation, un compte peut être créé sur la plateforme. Le compte peut être utilisé pour énumérer divers endpoints API, dont l'un permet d'élever l'utilisateur au rang d'administrateur. Avec un accès administratif, l'utilisateur peut effectuer une injection de commandes dans l'endpoint admin de génération de VPN, obtenant ainsi un shell système. Un fichier .env contenant les identifiants de la base de données est découvert et, grâce à la réutilisation de mots de passe, les attaquants peuvent se connecter en tant qu'utilisateur admin sur la machine. Le noyau du système s'avère obsolète et CVE-2023-0386 peut être utilisée pour obtenir un shell root

Résultats du scan

portservicedétails
22/tcpsshsyn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcphttpsyn-ack ttl 63 nginx 2million.htb

Configuration de l'hôte

J'ai ajouté 2million.htb à mon fichier /etc/hots


Découverte de chemins

J'ai effectué une découverte de chemins sur 2million.htb en utilisant gobuster

Au cours de l'énumération, j'ai découvert l'endpoint /invite


Après avoir navigué sur la page /invite


En inspectant la page, j'ai remarqué qu'elle chargeait un fichier JavaScript nommé inviteapi.min.js contenant du code obfusqué :

root@kitploit:~
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))

Désobfuscation

J'ai désobfusqué le code à l'aide de de4js, ce qui a produit le JavaScript lisible suivant :


root@kitploit:~
function verifyInviteCode(code) {
    var formData = {
        "code": code
    };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: formData,
        url: '/api/v1/invite/verify',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

function makeInviteCode() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: '/api/v1/invite/how/to/generate',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

makeInviteCode() : génère un nouveau code d'invitation
verefyInviteCode(code) : vérifie si un code est valide

et pour mieux comprendre, j'ai intercepté la requête de vérification :


l'API utilise des réponses JSON


Génération du code d'invitation et déchiffrement ROT13

Je suis allé dans la console du navigateur et j'ai exécuté makeInviteCode()


J'ai remarqué que les données étaient chiffrées avec le chiffrement ROT13


Après déchiffrement, j'ai trouvé l'endpoint /api/v1/invite/generate, puis j'ai généré le code d'invitation


Décodage Base64

Clé
La clé 2F4BN-YI8OH-B0SCL-L8OE6 a été insérée et acceptée avec succès

Inscription

Page d'accueil

Page d'accès
Peu de pages de ce site fonctionnent correctement ; c'est la page d'accès qui devient intéressante

Énumération des endpoints API
J'ai téléchargé le fichier VPN en cliquant sur le bouton connection pack, et j'ai intercepté la GET request


J'ai ensuite exécuté une requête curl avec les options verbose et silent pour énumérer les API endpoints disponibles



Le serveur a répondu avec une liste JSON d'API endpoints

L'admin disposait de 3 endpoints API avec les méthodes GET, POST et PUT

Lorsque j'ai tenté de générer une clé admin avec l'endpoint admin /api/v1/admin/vpn/generate, la clé n'a pas été générée car je n'étais pas l'admin, et le premier endpoint admin /api/v1/admin/auth l'a confirmé





Élévation verticale des privilèges de l'application Web : élever l'utilisateur standard actuel au rang d'administrateur


Après avoir découvert le bon format de PUT request avec Content-Type: application/json et les required parameters, j'ai réussi à élever mon utilisateur au rang d'administrateur











Injection de commandes OS

J'ai injecté ;whoami; dans le champ username ; mes soupçons se sont portés sur les fonctions PHP exec() ou system(), courantes dans les fonctionnalités réservées aux administrateurs et souvent dépourvues d'un assainissement approprié

Par exemple, le code vulnérable ressemblait probablement à ceci :

root@kitploit:~
$username = $json->username;

exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");

Cet endpoint POST /api/v1/admin/vpn/generate était vulnérable, et l'injection de commandes OS a été réalisée avec succès




Accès initial : Reverse Shell via injection de commandes OS (contournement base64)

Encoder le payload pour contourner les restrictions

Comme l'application avait des restrictions empêchant les caractères spéciaux, j'ai encodé en base64 la commande du payload du reverse shell pour contourner cette restriction.


Injecter le payload encodé

J'ai injecté le payload dans le username parameter, en le redirigeant vers base64 -d | bash pour le décodage et l'exécution :


Listener Netcat


Accès initial obtenu

Le payload s'est exécuté avec succès, renvoyant un reverse shell en tant que www-data user


Mouvement latéral

J'ai tenté un mouvement latéral de l'utilisateur www-data vers l'utilisateur admin en utilisant diverses techniques

En inspectant le répertoire /var/www/html, j'ai découvert un fichier .env contenant les identifiants de la base de données :


Le mot de passe découvert a été réutilisé avec succès pour s'authentifier via SSH et MySQL

SSH

MySQL


Élévation de privilèges OS

Après avoir obtenu un accès initial en tant qu'utilisateur admin, j'ai effectué une énumération du système pour identifier les vecteurs potentiels d'élévation de privilèges

J'ai essayé toutes les techniques d'élévation de privilèges les plus courantes comme les binaires SUID, les capabilities, les droits sudo, les tâches cron, rien n'a fonctionné. J'ai donc vérifié les variables d'environnement pour un détournement de PATH ou une variable sensible, et j'ai trouvé une variable MAIL pointant vers /var/mail/admin


Je suis allé vérifier le contenu du courrier et j'ai remarqué que l'administrateur avait été averti de corriger le noyau contre une OverlayFS/FUSE vulnerability


version du noyau

version de l'OS

Le noyau n'a jamais été mis à jour, ce qui confirme que l'administrateur avait ignoré ou oublié l'avertissement de sécurité

L'énumération du noyau a révélé la version 5.15.70-051570-generic, qui est vulnérable à CVE-2023-0386 élévation de privilèges locale OverlayFS/FUSE

La vulnérabilité étant confirmée, j'ai procédé à l'obtention d'un exploit POC public

J'ai cloné le POC, je l'ai transféré sur la machine cible

Je l'ai ensuite exécuté et obtenu avec succès un accès root


Chaîne d'attaque



Ressources

CVE-2023-0386 - CVE-2023-0386 - Injection de commandes OS



Avertissement : Cette machine a été rootée dans un environnement de tests d'intrusion autorisé

Télécharger l’outil
PhaseTechniqueCibleRésultat
1. ReconScan de ports22 (SSH), 80 (HTTP)Découverte de services
Découverte de chemins/invitePage d'invitation trouvée
Désobfuscation JSinviteapi.min.jsEndpoints API exposés
2. Accès initialGénération d'invitationPOST /api/v1/invite/generateCode d'invitation valide
InscriptionPOST /api/v1/user/registerUtilisateur standard créé
3. Web PrivescÉnumération APIGET /api/v1Endpoints admin découverts
Élévation verticalePUT /api/v1/admin/settings/updateis_admin: 0 -> 1
4. Accès systèmeInjection de commandesPOST /api/v1/admin/vpn/generateusername=test;id;
Reverse ShellPayload encodé en base64shell www-data
5. Mouvement latéralDécouverte de fichiers/var/www/html/.envadmin:SuperDuperPass123
Réutilisation SSHssh [email protected]accès utilisateur admin
6. Élévation racineÉnumération du noyauuname -r -> 5.15.70CVE-2023-0386 identifiée
Avertissement par e-mail/var/mail/adminOverlayFS/FUSE confirmé
Exécution de l'exploit./fuse && ./expShell root