Skip to main content
  1. Concetti/

SQL Injection (SQLi)

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

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:

  1. Inserimento ' → Genera errore (Syntax Error), confermando la vulnerabilità.
  2. Inserimento '-- → Commenta il resto della query, eliminando restrizioni (es. released=1).
  3. Inserimento ' OR 1=1-- → Forza la condizione a True, 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

  1. Test Vulnerabilità (Single Quote): SELECT * FROM products WHERE category = ''' AND released = 1 ^-- Errore di sintassi (quote dispari)
  2. Bypass Restrizioni (Commento): SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1 ^-- Tutto ciò che segue è ignorato
  3. 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 campo username subito dopo la parola administrator.
  • 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 nome administrator esista nella tabella.

Tecniche principali
#

  • In-band (Union-based): Utilizza l'operatore UNION per 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

Related