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).
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 SQLVulné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.
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.
Flag : 7
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é.
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.
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 CodeLe 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.
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.
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 :
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) :
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.
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.
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.
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.
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.
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.
3 Confirmation (Accès Root)
Le flag se trouve en /root/thefinalflag.txt.
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é.
2 Connexion MySQL
La lecture du fichier a permis d’extraire les identifiants de connexion à la base de données MySQL.
Pass : R0ck3t
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.
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).
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.