
Herramienta de Explotación de Inyección SQL
#BBQSQL# Una herramienta de explotación de inyección SQL ciega
La inyección SQL ciega puede ser un dolor de cabeza para explotar. Cuando las herramientas disponibles funcionan, lo hacen bien, pero cuando no, tienes que escribir algo personalizado. Esto consume tiempo y es tedioso. BBQSQL puede ayudarte a abordar esos problemas.
BBQSQL es un framework de inyección SQL ciega escrito en Python. Es extremadamente útil cuando se atacan vulnerabilidades de inyección SQL complicadas. BBQSQL también es una herramienta semiautomática, que permite bastante personalización para esos hallazgos de inyección SQL difíciles de explotar. La herramienta está diseñada para ser agnóstica a la base de datos y es extremadamente versátil. También cuenta con una interfaz de usuario intuitiva para facilitar la configuración de los ataques. Además, se implementa Python gevent, lo que hace a BBQSQL extremadamente rápido.
Intentamos escribir la herramienta de manera que sea muy autoexplicativa al configurar un ataque en la interfaz de usuario. Sin embargo, para ser exhaustivos, hemos incluido un Readme detallado que debería brindarte información adicional sobre los detalles de cada opción de configuración. Una cosa a tener en cuenta es que cada opción de configuración en la interfaz de usuario tiene una descripción asociada, por lo que si decides usar la herramienta sin leer esta página, deberías poder abrirte camino a través de un ataque.
Al igual que otras herramientas de inyección SQL, debes proporcionar cierta información de la solicitud.
Debes proporcionar la información habitual:
Luego, especifica dónde se realizará la inyección y qué sintaxis estamos inyectando. Continúa leyendo para más detalles.
Esto debería ser sencillo, pero como siempre, intenta ejecutar:
sudo pip install bbqsql
Si eso no funciona para ti, puedes instalar desde el código fuente. La herramienta requiere gevent, requests.
En el menú verás un lugar para las opciones de BBQSQL. Aquí especificas las siguientes opciones:
Esto se describe con mayor detalle a continuación en resumen de sintaxis de consulta.
El nombre de un archivo para exportar los resultados. Déjalo en blanco si no deseas salida a un archivo.
BBQSQL utiliza dos técnicas al realizar un ataque de inyección SQL ciega. La primera y predeterminada es búsqueda_binaria. Consulta Wikipedia para más información.
La segunda técnica que puedes usar es búsqueda_por_frecuencia. La búsqueda por frecuencia se basa en un análisis del idioma inglés para determinar la frecuencia con la que ocurre una letra. Este método de búsqueda es muy rápido contra datos no entrópicos, pero puede ser lento contra datos que no son en inglés o están ofuscados.
Puedes especificar binary_search o frequency_search como valor para este parámetro.
Esto especifica el tipo de inyección SQL que has descubierto. Aquí puedes establecer qué atributo de la respuesta HTTP debe mirar bbqsql para determinar verdadero/falso.
Puedes especificar: status_code, url, time, size, text, content, encoding, cookies, headers o history
Si has identificado una inyección SQL que resulta en un código de estado del servidor diferente, establece 'status_code' aquí. Si la cookie es diferente, establece 'cookie'. Si el tamaño de la respuesta es diferente, establece 'size'. Entiendes la idea.
La concurrencia se basa en la biblioteca gevent de Python. Funcionalmente, parece actuar como hilos, pero los detalles de cómo funciona se pueden ver en nuestra charla de DefCon [insertar enlace aquí]. Esta configuración controla la cantidad de concurrencia para ejecutar el ataque. Es útil para limitar las solicitudes y acelerar los tiempos de ataque. Para servidores web de alto rendimiento como nginx, hemos podido establecer la concurrencia en 75. Por defecto, está establecido en '30'.
Si te encuentras con una vulnerabilidad de inyección SQL que tiene algunas peculiaridades extrañas (como que ciertos caracteres no se pueden incluir o que funciones como ASCII/CHAR no funcionan), probablemente te hayas visto escribiendo algún tipo de script con tu sintaxis de inyección personalizada. BBQSQL elimina la parte de scripting y proporciona una manera de pegar tu sintaxis de consulta personalizada y explotar con facilidad.
La entrada de consulta es donde construirás tu consulta para extraer información de la base de datos. Se asume que ya has identificado una inyección SQL en un parámetro vulnerable y has probado una consulta que es exitosa.
A continuación se muestra un ejemplo de consulta que puedes usar para construir tu consulta.
En este ejemplo, el atacante intenta seleccionar la versión de la base de datos:
vulnerable_parameter'; if(ASCII(SUBSTRING((SELECT @@version LIMIT 1 OFFSET ${row_index}) , ${char_index} ,1))) ${comparator:>}ASCII(${char_val}) WAITFOR DELAY '0\:0\:0${sleep}'; --
La sintaxis de la consulta se basa en marcadores de posición que le indican a BBQSQL cómo ejecutar el ataque.
Debes proporcionar los siguientes marcadores de posición de información para que el ataque funcione. Una vez que los coloques en tu consulta, bbqSQL hará el resto:
${row_index}: Esto le dice a bbqSQL que itere filas aquí. Dado que estamos usando LIMIT, podemos ver n número de filas dependiendo del valor de ${row_index}.
${char_index}: Esto le dice a bbqSQL qué carácter de la subconsulta consultar.
${char_val}: Esto le dice a bbqSQL dónde comparar los resultados de la subconsulta para validar el resultado.
${comparator}: Así es como le dices a BBQSQL que compare las respuestas para determinar si el resultado es verdadero o falso. Por defecto, se usa el símbolo >.
${sleep}: Esto es opcional pero le dice a bbqSQL dónde insertar el número de segundos para dormir al realizar una inyección SQL basada en tiempo.
No todos estos marcadores de posición son obligatorios. Por ejemplo, si has descubierto una inyección SQL basada en booleano semi-ciego, puedes omitir el parámetro ${sleep}.
BBQSQL tiene muchos parámetros HTTP que puedes configurar al preparar tu ataque. Como mínimo, debes proporcionar la URL, dónde quieres que se ejecute la consulta de inyección y el método. Las siguientes opciones se pueden configurar:
Especificas dónde quieres que se inserte la consulta de inyección usando la plantilla ${injection}. Sin la plantilla de inyección, la herramienta no sabrá dónde insertar la consulta.
Proporciona archivos para enviar con la solicitud. Establece el valor a la ruta y BBQSQL se encargará de abrir/incluir el archivo.
Encabezados HTTP para enviar con las solicitudes. Puede ser una cadena o un diccionario. Por ejemplo:
{"User-Agent":"bbqsql"}
o
"User-Agent: bbqsql"