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
POC-CVE-2022-30600 — Une preuve de concept pour CVE-2022-30600 | Kitploit
Outils/GitHubGitHub/boonjune/poc-cve-2022-30600
Attaques de Mots de PasseAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionAuthentification
GitHubboonjune/poc-cve-2022-30600

POC-CVE-2022-30600

Une preuve de concept pour CVE-2022-30600

Voir le dépôt
311il y a 3 ansPas 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

Preuve de concept pour CVE-2022-30600

Aperçu

Ce dépôt contient 2 implémentations d'une preuve de concept qui exploite CVE-2022-30600.

CVE-2022-30600 est une vulnérabilité de sécurité qui permet à un attaquant de contourner le seuil de verrouillage de compte dans l'application web Moodle.

Comme indiqué par l'entrée suivante dans la base de données NVD https://nvd.nist.gov/vuln/detail/CVE-2022-30600, les versions ci-dessous sont connues pour être vulnérables à cette exploitation.

3.9 - 3.9.13

3.10 - 3.10.10

3.11 - 3.11.6

Détails de l'attaque

Comme indiqué dans le commit utilisé pour corriger cette vulnérabilité, le problème réside dans la logique utilisée pour accéder et incrémenter la valeur login_failed_count dans la base de données.

https://git.moodle.org/gw?p=moodle.git;a=commitdiff;h=59b5858da200f63ecb59a9113af2b99ef1496fe5;hp=a0f47c8bc4d6f5971025de7d63f22475701d2f86

Si plus d'une requête de connexion simultanée se produit, l'application web Moodle peut ne pas réussir à vérifier et mettre à jour correctement la valeur de connexion dans l'application. Cela entraîne que 2 échecs de connexion ou plus ne sont comptabilisés que comme un seul échec de connexion.

Pour mieux comprendre cela, le diagramme ci-dessous est une vue d'ensemble de haut niveau d'une requête de connexion échouée du point de vue du client, de l'application web et de la base de données.

root@kitploit:~
sequenceDiagram 
    participant C as Client 
    participant W as Application Web 
    participant D as Base de données 
    C->>W: Requête de connexion 
    W->>D: Demande failed_login_attempt 
    D->>W: failed_login_attempt = 0 
    W->>W: local failed_login_attempt  = 0 
    W->>W: local failed_login_attempt  = 1 
    W->>D: failed_login_attempt = 1 
    W->>C: Échec de connexion

Le résultat est que la valeur failed_login_attempt dans la base de données est correcte et que les tentatives de connexion suivantes mettront correctement à jour la valeur.

Si un attaquant envoie un certain nombre de requêtes de connexion simultanées, le problème suivant se produit.

root@kitploit:~
sequenceDiagram 
    participant C as Client 
    participant W as Application Web 
    participant D as Base de données 
    C->>W: Requête de connexion (session 1) 
    C->>W: Requête de connexion (session 2) 
    W->>D: Demande failed_login_attempt (session 1) 
    W->>D: Demande failed_login_attempt (session 2) 
    D->>W: failed_login_attempt = 0 (session 1) 
    D->>W: failed_login_attempt = 0 (session 2) 
    W->>W: local failed_login_attempt = 0 (session 1) 
    W->>W: local failed_login_attempt = 0 (session 2) 
    W->>W: local failed_login_attempt = 1 (session 1) 
    W->>W: local failed_login_attempt = 1 (session 2) 
    W->>D: failed_login_attempt = 1 (session 1) 
    W->>D: failed_login_attempt = 1 (session 2) 
    W->>C: Échec de connexion (session 1) 
    W->>C: Échec de connexion (session 2)

Le résultat de cette interaction est que la valeur failed_login_attempt dans la base de données n'est incrémentée que de 1 malgré 2 requêtes de connexion échouées. Cela peut être étendu à des centaines de requêtes, les limites étant le nombre de requêtes simultanées que le client peut effectuer et le nombre de requêtes que le serveur web peut gérer simultanément.

De plus, si un attaquant a accès à plusieurs clients (comme un botnet) et est capable de synchroniser le moment où ces requêtes sont effectuées, alors l'attaquant peut surmonter les limitations liées à l'utilisation d'un seul client et rendre l'attaque plus difficile à atténuer.

Implémentation Python3

Description

poc.py est l'implémentation en Python3 de cette attaque. Elle utilise des threads pour effectuer les requêtes simultanées. Bien que cette preuve de concept fonctionne, le verrou global de l'interpréteur (GIL) présent dans Python3 réduit l'avantage d'utiliser plusieurs threads dans ces circonstances. Je recommande vivement l'implémentation C++, car elle fonctionne mieux lorsque l'attaque est réalisée sur un seul client.

Utilisation

poc.py [-h] -u USERNAME -url TARGET -w WORDLIST -t THREADS [-a ATTEMPTS] [-d DELAY]

options: -h, --help
 affiche ce message d'aide
-u USERNAME, --username USERNAME
 Le nom d'utilisateur du compte ciblé
-url TARGET, --target TARGET
 URL de base de l'application web Moodle ciblée
-w WORDLIST, --wordlist WORDLIST
 Le chemin vers le fichier de wordlist utilisé
-t THREADS, --threads THREADS
 Le nombre de threads créés pour chaque tentative
-a ATTEMPTS, --attempts ATTEMPTS
 Le nombre de tentatives que vous souhaitez effectuer. La valeur par défaut est 1.
-d DELAY, --delay DELAY  Le nombre de secondes entre chaque tentative. La valeur par défaut est 2.

Exemple

python3 poc.py -u admin -url https://moodle/ -w /usr/share/wordlists/rockyou.txt -t 15 -a 8

ciblage : https://moodle/
nom d'utilisateur du compte : admin
wordlist : /usr/share/wordlists/rockyou.txt
threads : 15 requêtes de connexion seront effectuées à chaque tentative
tentatives : l'attaque sera répétée 8 fois au total.

Dans cet exemple, un total de 120 (8 * 15) requêtes de connexion seront effectuées. Il y aura un délai de 2 secondes entre chaque tentative.

Implémentation C++

Description

poc.cpp est l'implémentation en C++ de l'attaque, qui utilise la bibliothèque curl pour effectuer l'attaque. Elle nécessite donc certains indicateurs de compilation pour que l'application puisse être compilée. Globalement, cette implémentation fonctionne mieux que la version Python3 car les threads peuvent utiliser tous les cœurs de l'appareil client, permettant ainsi plus de connexions simultanées en moins de temps. Cela signifie que l'exploit fonctionne de manière plus cohérente.

Indicateurs de compilation

g++ poc.cpp -o poc -lcurl

Utilisation

Usage: poc [OPTION...]
-a, --attempts

 Le nombre de fois que l'attaque est effectuée.
-t, --threads

 Le nombre de threads à utiliser à chaque tentative.
-n, --username
 Le nom d'utilisateur du compte que vous ciblez.
-u, --URL
 URL de base de l'application web Moodle.
-d, --delay
 Le délai entre les tentatives. Par défaut : 5.
-v, --version
 Affiche la version.
-h, --help
 Affiche le message d'aide.
-w, --wordlist arg
 Wordlist de mots de passe.

Exemple

./poc -w /usr/share/wordlists/rockyou.txt -u https://moodle/ -n admin -a 3 -t 5 -d 2

wordlist : /usr/share/wordlists/rockyou.txt
URL : https://moodle/
nom d'utilisateur du compte : admin
tentatives : 3 tentatives seront effectuées
threads : 5 threads seront utilisés à chaque tentative
délai : il y aura un délai de 2 secondes entre chaque tentative

Environnement de test

Afin de développer, tester et déboguer ces scripts, j'ai créé une machine virtuelle. Cette machine virtuelle utilisait les logiciels et versions suivants.

Moodle 3.9.0 PHP 7.2.34 MySQL 8.0.30 Ubuntu 5.15.0-41-generic Apache 2.4.52

Avis

Je ne cautionne pas l'utilisation de mon code source dans des activités illégales.

Télécharger l’outil