Cos'è#
Una vulnerabilità di sicurezza che permette a un attaccante di interferire con le query che un'applicazione effettua al suo database, accedendo a dati non autorizzati.
TL;DR#
La SQLi sfrutta la mancanza di sanificazione dell'input. Inserendo una single quote ('), l'attaccante chiude la stringa prevista dallo sviluppatore e "inietta" codice SQL arbitrario.
Flusso d'attacco:
- Inserimento
'→ Genera errore (Syntax Error), confermando la vulnerabilità. - Inserimento
'--→ Commenta il resto della query, eliminando restrizioni (es.released=1). - Inserimento
' OR 1=1--→ Forza la condizione aTrue, estraendo tutti i dati.
Esempio di bypass:
# L'attaccante inserisce: admin' --
# Query finale: SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'
# Il simbolo '--' commenta il resto della query, annullando il controllo password.Query Originale: SELECT * FROM products WHERE category = 'Gifts' AND released = 1
- Test Vulnerabilità (Single Quote):
SELECT * FROM products WHERE category = ''' AND released = 1^-- Errore di sintassi (quote dispari) - Bypass Restrizioni (Commento):
SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1^-- Tutto ciò che segue è ignorato - Estrazione Totale (Tautologia):
SELECT * FROM products WHERE category = '' OR 1=1--' AND released = 1^-------^-- Questa parte è sempre VERA
Elementi chiave#
- Single Quote (
'): Il "grimaldello" per rompere la query. - Commento (--): Utilizzato per "spegnere" la logica successiva della query originale (es. filtri di sicurezza o controlli password). - Tautologia (
OR 1=1): Una condizione logica sempre vera che forza il database a restituire ogni riga della tabella.
Come funziona#
L'attaccante "rompe" il contesto dei dati per inserire comandi SQL arbitrari.
[ Attaccante ] [ Web App ] [ Database ]
│ │ │
│── Input: ' OR 1=1 ──────►│ │
│ │── Query alterata ──────►│
│ │ │
│ │◄── Tutti i record ──────│
│◄─ Accesso garantito ─────│ │Esempio: Bypass del Login 🔑#
Questo esempio mostra come accedere a un account specifico (es. administrator) senza possedere la password.
Input Username: administrator'--
Query Originale:
SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'Query Iniettata (Backend):
SELECT * FROM users WHERE username = 'administrator'--' AND password = 'bluecheese'Cosa accade esattamente? 🧠#
- L'apice (
'): Chiude il campousernamesubito dopo la parolaadministrator. - I trattini (
--): Indicano al database di ignorare tutto ciò che segue sulla stessa riga. - Il risultato: La condizione
AND password = '...'viene "commentata" e quindi cancellata. Il database autentica l'utente semplicemente verificando che il nomeadministratoresista nella tabella.
Tecniche principali#
- In-band (Union-based): Utilizza l'operatore
UNIONper estrarre dati da altre tabelle. - Blind (Inferential): L'attaccante deduce informazioni osservando le risposte dell'app (es. cambiamenti nel contenuto o ritardi temporali).
- Out-of-band: Esfiltra dati tramite canali esterni come DNS o HTTP.
Perché è importante per Blue Team#
Come difensori, dobbiamo assicurarci che gli sviluppatori utilizzino query parametrizzate (Prepared Statements) e monitorare i log per individuare pattern sospetti come caratteri ', -- o parole chiave SQL negli URL.
Dove l'ho incontrato#
- tryhackme-sql-injection — laboratorio pratico
- portswigger-academy — approfondimento teorico
Scenario Reale#
Un analista SOC nota nei log del firewall applicativo (WAF) numerose richieste verso /login contenenti la stringa %27%20OR%201%3D1. Questo indica un tentativo di bypass dell'autenticazione. Se l'applicazione non usa query parametrizzate, l'attaccante potrebbe ottenere l'accesso come amministratore semplicemente conoscendo lo username.
Risorse#
Collegato a#
- network — categoria



