Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/ciscocxsecurity/bbqsql
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de Penetración
GitHubciscocxsecurity/bbqsql

bbqsql

Herramienta de Explotación de Inyección SQL

Ver Repositorio
8261966hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

#BBQSQL# Una herramienta de explotación de inyección SQL ciega

Tabla de Contenidos

  • ¿Qué es BBQSQL?
  • Resumen del Readme
  • Uso de Alto Nivel
  • Instalación
  • Opciones de BBQSQL
  • Resumen de Sintaxis de Consulta
  • Parámetros HTTP
  • Exportar Configuración
  • Importar Configuración
  • Hooks Personalizados
  • ¿Encontraste un Error?](#found-a-bug)
  • ¿Puedo Ayudar?](#can-i-help)
  • ¿Qué Pasa con el Nombre?](#whats-up-with-the-name)

¿Qué es BBQSQL?

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.

Resumen del Readme

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.

Descargar herramienta

Uso de Alto Nivel

Al igual que otras herramientas de inyección SQL, debes proporcionar cierta información de la solicitud.

Debes proporcionar la información habitual:

  • URL
  • Método HTTP
  • Encabezados
  • Cookies
  • Métodos de codificación
  • Comportamiento de redirección
  • Archivos
  • Autenticación HTTP
  • Proxies

Luego, especifica dónde se realizará la inyección y qué sintaxis estamos inyectando. Continúa leyendo para más detalles.

Instalación

Esto debería ser sencillo, pero como siempre, intenta ejecutar:

root@kitploit:~
sudo pip install bbqsql

Si eso no funciona para ti, puedes instalar desde el código fuente. La herramienta requiere gevent, requests.

Opciones de BBQSQL

En el menú verás un lugar para las opciones de BBQSQL. Aquí especificas las siguientes opciones:

consulta

Esto se describe con mayor detalle a continuación en resumen de sintaxis de consulta.

archivo_de_salida_csv

El nombre de un archivo para exportar los resultados. Déjalo en blanco si no deseas salida a un archivo.

técnica

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.

atributo_de_comparación

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.

concurrencia

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'.

Resumen de Sintaxis de Consulta

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:

root@kitploit:~
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}.

Parámetros HTTP

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:

  • archivos
  • encabezados
  • cookies
  • url
  • permitir_redirecciones
  • proxies
  • datos
  • método
  • autenticación

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.

archivos

Proporciona archivos para enviar con la solicitud. Establece el valor a la ruta y BBQSQL se encargará de abrir/incluir el archivo.

encabezados

Encabezados HTTP para enviar con las solicitudes. Puede ser una cadena o un diccionario. Por ejemplo:

{"User-Agent":"bbqsql"} o "User-Agent: bbqsql"

cookies

Un diccionario o cadena de cookies para enviar con la solicitud. Por ejemplo:

{"PHPSESSIONID":"123123"} o PHPSESSIONID=123123;JSESSIONID=foobar

url

Especifica una URL a la que se deben enviar las solicitudes.

permitir_redirecciones

Esto es un booleano que determina si se seguirán las redirecciones HTTP al realizar solicitudes.

proxies

Especifica un proxy HTTP para usar en la solicitud como un diccionario. Por ejemplo:

{"http": "10.10.1.10:3128","https": "10.10.1.10:1080"}

datos

Especifica datos POST para enviar junto con la solicitud. Puede ser una cadena o un diccionario. Por ejemplo:

{"input_field":"value"} o input_field=value

método

Especifica el método para la solicitud HTTP. Los métodos válidos son

'get','options','head','post','put','patch','delete'

autenticación

Especifica una tupla de nombre de usuario y contraseña para usar en la autenticación básica HTTP. Por ejemplo:

("myusername","mypassword")

Exportar Configuración

Después de configurar tu ataque en la interfaz de usuario, puedes exportar el archivo de configuración. Verás la opción cuando ejecutes la herramienta. El archivo de configuración exportado usa ConfigParser y es fácil de leer. A continuación se muestra un ejemplo de archivo de configuración:

`[Request Config] url = http://example.com/sqlivuln/index.php?username=user1&password=secret${injection} method = GET

[HTTP Config] query = ' and ASCII(SUBSTR((SELECT data FROM data LIMIT 1 OFFSET ${row_index:1}),${char_index:1},1))${comparator:>}${char_val:0} # technique = binary_search comparison_attr = size concurrency = 30`

Esto es útil si planeas reanudar un ataque o simplemente ajustar la consulta sin tener que reconfigurar cada opción.

Importar Configuración

También puedes importar una configuración desde la línea de comandos o desde la interfaz de usuario. Para importar una configuración desde la línea de comandos, simplemente ejecuta bbqsql con las siguientes opciones:

bbqsql -c archivo_config

Cuando cargas un archivo de configuración, ya sea por línea de comandos o por la interfaz de usuario, se ejecutan las mismas rutinas de validación en los parámetros para asegurarse de que sean válidos.

Hooks Personalizados

A veces necesitas hacer algo realmente loco. Quizás necesites cifrar los valores que entran en un campo antes de enviar la solicitud, o quizás necesites codificar triple URL. Independientemente, estas situaciones hacen que otras herramientas sean imposibles de usar. BBQSQL te permite definir funciones "hook" que la herramienta llamará en varios puntos durante la solicitud. Por ejemplo, puedes especificar una función pre_request que tome la solicitud como argumento, realice las mutaciones necesarias y devuelva la solicitud modificada para enviarla al servidor.

Para implementar esto, crea un archivo Python y especifica funciones hook. Los nombres de funciones disponibles se enumeran a continuación. En tu archivo de hooks, puedes definir tantas o tan pocas de estas funciones hook como desees. Luego, en la sección bbqsql_options del menú, puedes especificar la ubicación de tu archivo de hooks. BBQSQL absorberá este archivo y usará los hooks que hayas definido.

Es importante que las funciones hook que especifiques tengan exactamente los nombres indicados a continuación; de lo contrario, BBQSQL no sabrá qué hook llamar en cada momento. La función args recibe un parámetro que contiene todos los argumentos que se están usando para crear la solicitud HTTP. La función pre_request recibe el objeto de solicitud antes de que se envíe. La función post_request recibe el objeto de solicitud después de que se haya enviado. La función response recibe el objeto de respuesta antes de que se devuelva a BBQSQL.

Los siguientes hooks están disponibles:

args: Un diccionario de los argumentos que se envían a Request().

pre_request: El objeto Request, justo antes de ser enviado.

post_request: El objeto Request, justo después de ser enviado.

response: La respuesta generada a partir de una Request.

Para más información sobre cómo funcionan estos hooks y cómo debería verse tu diccionario de hooks, consulta la documentación de la biblioteca requests sobre sus hooks

Un archivo de hooks de ejemplo podría verse así:

root@kitploit:~
# archivo: hooks.py
import time

def pre_request(req):
    """
    este hook reemplaza un marcador de posición con la hora actual
    se espera que la url se vea así:
        http://www.google.com?k=v&time=PLACEHOLDER
    """
    req.url = req.url.replace('PLACEHOLDER',str(time.time()))
    return req

¿Encontraste un Error?

Envía cualquier corrección de errores o solicitudes de funciones a https://github.com/Neohapsis/bbqsql/

¿Puedo Ayudar?

¡Por favor! Vemos esto como un gran punto de partida para construir un framework de inyección SQL completamente funcional. Siéntete libre de bifurcar el código y podemos fusionar tus cambios si son útiles.

¿Qué Pasa con el Nombre?

¡La barbacoa es absolutamente deliciosa y también lo es la inyección SQL!