Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
bbqsql — Strumento per l'exploit di SQL Injection | Kitploit
Strumenti/GitHubGitHub/ciscocxsecurity/bbqsql
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration Testing
GitHubciscocxsecurity/bbqsql

bbqsql

Strumento per l'exploit di SQL Injection

Vedi Repository
8261967 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

#BBQSQL# Un tool di sfruttamento per SQL Injection cieca

Indice

  • Cos'è BBQSQL?
  • Panoramica del Readme
  • Utilizzo di alto livello
  • Installazione
  • Opzioni di BBQSQL
  • Panoramica della sintassi delle query
  • Parametri HTTP
  • Esporta configurazione
  • Importa configurazione
  • Hook personalizzati
  • Trovato un bug?
  • Posso aiutare?
  • Che storia c'è dietro il nome?

Cos'è BBQSQL?##

La SQL injection cieca può essere una vera seccatura da sfruttare. Quando gli strumenti disponibili funzionano, funzionano bene, ma quando non funzionano bisogna scrivere qualcosa di personalizzato. Questo è dispendioso in termini di tempo e noioso. BBQSQL può aiutarti ad affrontare questi problemi.

BBQSQL è un framework per SQL injection cieca scritto in Python. È estremamente utile quando si attaccano vulnerabilità di SQL injection complesse. BBQSQL è anche uno strumento semi-automatico, che consente una buona dose di personalizzazione per quei risultati di SQL injection difficili da innescare. Lo strumento è progettato per essere indipendente dal database ed è estremamente versatile. Ha anche un'interfaccia utente intuitiva che rende molto più semplice l'impostazione degli attacchi. Inoltre, viene implementato Python gevent, rendendo BBQSQL estremamente veloce.

Panoramica del Readme

Abbiamo cercato di scrivere lo strumento in modo tale che sia molto autoesplicativo durante l'impostazione di un attacco nell'interfaccia utente. Tuttavia, per completezza, abbiamo incluso un Readme dettagliato che dovrebbe fornirti ulteriori informazioni sui dettagli di ciascuna opzione di configurazione. Una cosa da notare è che ogni opzione di configurazione nell'interfaccia utente ha una descrizione associata, quindi se scegli di avviare lo strumento senza leggere questa pagina, dovresti essere in grado di cavartela in un attacco.

Utilizzo di alto livello

Analogamente ad altri strumenti di SQL injection, fornisci alcune informazioni sulla richiesta.

Devi fornire le informazioni usuali:

  • URL
  • Metodo HTTP
  • Headers
  • Cookies
  • Metodi di codifica
  • Comportamento dei redirect
  • File
  • HTTP Auth
  • Proxy

Poi specifica dove avviene l'iniezione e quale sintassi stiamo iniettando. Continua a leggere per i dettagli.

Installazione

Dovrebbe essere semplice, ma non lo è mai. Prova a eseguire:

root@kitploit:~
sudo pip install bbqsql

Se non funziona, puoi installare dal sorgente. Lo strumento richiede gevent,requests.

Opzioni di BBQSQL

Nel menu vedrai un posto per le opzioni di BBQSQL. Qui specifichi le seguenti opzioni:

query

Questa è descritta in dettaglio più avanti nella panoramica della sintassi delle query.

csv_output_file

Il nome di un file dove salvare i risultati. Lascia vuoto se non vuoi l'output su file.

technique

BBQSQL utilizza due tecniche durante un attacco di SQL injection cieca. La prima e predefinita è binary_search. Vedi Wikipedia per maggiori informazioni.

La seconda tecnica che puoi utilizzare è frequency_search. La ricerca per frequenza si basa su un'analisi della lingua inglese per determinare la frequenza con cui una lettera si verifica. Questo metodo di ricerca è molto veloce su dati non entropici, ma può essere lento su dati non inglesi o offuscati.

Puoi specificare binary_search o frequency_search come valore per questo parametro.

comparison_attr

Specifica il tipo di SQL injection che hai scoperto. Qui puoi impostare quale attributo della risposta HTTP BBQSQL deve esaminare per determinare vero/falso.

Puoi specificare: status_code, url, time, size, text, content, encoding, cookies, headers o history

Se hai identificato una SQL injection che risulta in un codice di stato del server diverso, imposta status_code qui. Se il cookie è diverso, imposta cookie. Se la dimensione della risposta è diversa, imposta size. Hai capito il concetto.

concurrency

La concorrenza si basa sulla libreria gevent in Python. Funzionalmente, sembra agire come threading, ma i dettagli specifici di come funziona possono essere visti nel nostro talk DefCon qui [insert link here]. Questa impostazione controlla la quantità di concorrenza con cui eseguire l'attacco. È utile per limitare le richieste e velocizzare i tempi di attacco. Per server web ad alte prestazioni come nginx, siamo riusciti a impostare la concorrenza a 75. Di default è impostata a '30'.

Panoramica della sintassi delle query

Se ti imbatti in una vulnerabilità di SQL injection con alcune stranezze (come alcuni caratteri non possono essere inclusi o funzioni come ASCII/CHAR non funzionano), probabilmente ti sei ritrovato a scrivere qualche script con la tua sintassi di iniezione personalizzata. BBQSQL elimina la parte di scripting e fornisce un modo per incollare la tua sintassi di query personalizzata e sfruttare con facilità.

L'input della query è dove costruirai la tua query utilizzata per esfiltrare informazioni dal database. Si presuppone che tu abbia già identificato una SQL injection su un parametro vulnerabile e abbia testato una query che ha successo.

Di seguito è riportato un esempio di query che puoi utilizzare per costruire la tua query.

In questo esempio, l'attaccante cerca di selezionare la versione del database:

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 sintassi della query si basa su segnaposto che dicono a BBQSQL come eseguire l'attacco.

Devi fornire i seguenti segnaposto di informazioni affinché l'attacco funzioni. Una volta inseriti nella tua query, bbqSQL farà il resto:

${row_index}: Questo dice a bbqSQL di iterare sulle righe qui. Poiché stiamo usando LIMIT, possiamo visualizzare n numero di righe a seconda del valore di ${row_index}.

${char_index}: Questo dice a bbqSQL quale carattere dalla subselect interrogare.

${char_val}: Questo dice a bbqSQL dove confrontare i risultati dalla subselect per validare il risultato.

${comparator}: Questo è il modo in cui dici a BBQSQL di confrontare le risposte per determinare se il risultato è vero o no. Per impostazione predefinita, viene utilizzato il simbolo >.

${sleep}: Questo è opzionale ma dice a bbqSQL dove inserire il numero di secondi di pausa quando si esegue SQL injection basata sul tempo.

Non tutti questi segnaposto sono obbligatori. Ad esempio, se hai scoperto SQL injection basata su booleani semi-ciechi, puoi omettere il parametro ${sleep}.

Parametri HTTP

BBQSQL ha molti parametri HTTP che puoi configurare quando imposti il tuo attacco. Come minimo, devi fornire l'URL, dove vuoi che venga eseguita la query di iniezione e il metodo. Le seguenti opzioni possono essere impostate:

  • files
  • headers
  • cookies
  • url
  • allow_redirects
  • proxies
  • data
  • method
  • auth

Specifica dove vuoi che venga inserita la query di iniezione utilizzando il template ${injection}. Senza il template di iniezione, lo strumento non saprà dove inserire la query.

files

Fornisci i file da inviare con la richiesta. Imposta il valore sul percorso e BBQSQL si occuperà di aprire/includere il file.

headers

Headers HTTP da inviare con le richieste. Può essere una stringa o un dizionario. Ad esempio:

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

cookies

Un dizionario o una stringa di cookie da inviare con la richiesta. Ad esempio:

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

url

Specifica un URL a cui inviare le richieste.

allow_redirects

Un booleano che determina se i reindirizzamenti HTTP verranno seguiti quando si effettuano le richieste.

proxies

Specifica un proxy HTTP da utilizzare per la richiesta come dizionario. Ad esempio:

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

data

Specifica i dati POST da inviare con la richiesta. Può essere una stringa o un dizionario. Ad esempio:

{"input_field":"value"} oppure input_field=value

method

Specifica il metodo per la richiesta HTTP. I metodi validi sono

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

auth

Specifica una tupla di nome utente e password da utilizzare per l'autenticazione HTTP di base. Ad esempio:

("myusername","mypassword")

Esporta configurazione

Dopo aver impostato il tuo attacco nell'interfaccia utente, puoi esportare il file di configurazione. Vedrai l'opzione quando esegui lo strumento. Il file di configurazione esportato utilizza ConfigParser ed è facile da leggere. Un esempio di file di configurazione può essere visto qui sotto:

`[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`

Questo è utile se prevedi di riprendere un attacco o magari solo di regolare la query senza dover passare attraverso la seccatura di riconfigurare ogni opzione.

Importa configurazione

Puoi anche importare una configurazione dalla riga di comando o dall'interfaccia utente. Per importare una configurazione dalla riga di comando, esegui bbqsql con le seguenti opzioni:

bbqsql -c config_file

Quando carichi un file di configurazione, sia tramite riga di comando che tramite interfaccia utente, vengono eseguite le stesse routine di convalida sui parametri per assicurarsi che siano validi.

Hook personalizzati

A volte devi fare cose davvero folli. Forse devi crittografare i valori che entrano in un campo prima di inviare la richiesta, o forse devi triplicare la codifica URL. In ogni caso, queste situazioni rendono impossibile l'uso di altri strumenti. BBQSQL ti permette di definire funzioni "hook" che lo strumento chiamerà in vari punti durante la richiesta. Ad esempio, puoi specificare una funzione pre_request che prende la richiesta come argomento, esegue le mutazioni necessarie e restituisce la richiesta modificata da inviare al server.

Per implementarlo, crea un file Python e specifica le funzioni hook. I nomi delle funzioni disponibili sono elencati di seguito. Nel tuo file hooks, puoi definire quante poche o quante di queste funzioni hook desideri. Poi, nella sezione bbqsql_options del menu, puoi specificare la posizione del tuo hooks_file. BBQSQL caricherà questo file e utilizzerà qualsiasi hook tu abbia definito.

È importante che le funzioni hook che specifichi abbiano esattamente i nomi specificati di seguito, altrimenti BBQSQL non saprà quale hook chiamare al momento giusto. La funzione args riceve un parametro che contiene tutti gli argomenti utilizzati per creare la richiesta HTTP. La funzione pre_request riceve l'oggetto richiesta prima che venga inviato. La funzione post_request riceve l'oggetto richiesta dopo che è stato inviato. La funzione response riceve l'oggetto risposta prima che venga restituito a BBQSQL.

I seguenti hook sono resi disponibili:

args: Un dizionario degli argomenti inviati a Request().

pre_request: L'oggetto Request, immediatamente prima di essere inviato.

post_request: L'oggetto Request, immediatamente dopo essere stato inviato.

response: La risposta generata da una Request.

Per maggiori informazioni su come funzionano questi hook e su come dovrebbe essere il tuo dizionario hooks, consulta la documentazione della libreria requests sugli hook

Un file di hook di esempio potrebbe assomigliare a questo:

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

def pre_request(req):
    """
    this hook replaces a placeholder with the current time
    expecting the url to look like this:
        http://www.google.com?k=v&time=PLACEHOLDER
    """
    req.url = req.url.replace('PLACEHOLDER',str(time.time()))
    return req

Trovato un bug?

Invia eventuali correzioni di bug o richieste di funzionalità a https://github.com/Neohapsis/bbqsql/

Posso aiutare?

Per favore! Vediamo questo come un ottimo punto di partenza per costruire un framework di SQL injection completamente funzionante. Sentiti libero di forkare il codice e possiamo unire le tue modifiche se sono utili.

Che storia c'è dietro il nome?

La BBQ è assolutamente deliziosa, così come la SQL injection!

Scarica lo strumento