I 5 attacchi SQL Injection più frequenti

Gli attacchi SQL Injection sono una delle minacce più comuni e pericolose per le applicazioni web. Questi attacchi, se non gestiti correttamente, possono compromettere seriamente la sicurezza dei dati sensibili e delle applicazioni web. In questo articolo, esploreremo i cinque attacchi SQL Injection più frequenti e come proteggersi efficacemente da essi. 

 

TAUTOLOGIA 

Questo attacco sfrutta condizioni SQL che sono sempre vere per manipolare i risultati delle query. Un esempio classico è l’inserimento di OR 1=1 in una condizione WHERE, che rende la condizione sempre vera. 

Esempio: 

SELECT * FROM utenti WHERE username = ‘admin’ AND password = ‘password’; 

Se un attaccante inserisce admin’ OR ‘1’=’1 come username, la query diventa: 

SELECT * FROM utenti WHERE username = ‘admin’ OR   ‘1’=’1′ AND password = ‘password’; 

Questa query sarà sempre vera, permettendo l’accesso non autorizzato. 

Protezione: Utilizzare query parametrizzate o prepared statements e validare e sanificare tutti gli input utente 

 

UNION-BASED SQL INJECTION 

Il Union-based SQL Injection sfrutta l’operatore SQL UNION per combinare i risultati di due o più query. Questo attacco permette agli hacker di estrarre informazioni sensibili da un database unendo i risultati di una query malevola con quelli di una query legittima. Ecco come funziona: 

  • Identificazione del punto di iniezione: L’attaccante trova un campo vulnerabile in cui può inserire il proprio codice SQL. 
  • Costruzione della query UNION: L’attaccante crea una query che utilizza l’operatore UNION per combinare i dati legittimi con quelli estratti dal database. 
  • Esecuzione della query: Se il campo vulnerabile accetta il codice SQL, la query viene eseguita, restituendo dati sensibili. 

Esempio: 

SELECT nome, cognome FROM utenti WHERE id = 1; 

Se l’attaccante inietta ‘1 UNION SELECT username, password FROM admin–’, la query diventa: 

SELECT nome, cognome FROM utenti WHERE id = 1 UNION SELECT username, password FROM admin; 

Questo potrebbe restituire dati sensibili dalla tabella admin. 

Per proteggersi da questo tipo di attacco, è fondamentale utilizzare tecniche di validazione degli input, query parametrizzate e limitare i permessi dell’utente del database. 

 

INFERENTIAL SQLI (BLIND SQL INJECTION) 

L’Inferential SQLi, noto anche come Blind SQL Injection, è un attacco che non restituisce direttamente i dati al’attaccante. Invece, l’attaccante deduce le informazioni in base alle risposte del server. Esistono due tipi principali di Inferential SQLi: 

  • Boolean-based Blind SQLi: L’attaccante invia una serie di query che producono risposte vere o false, deducendo le informazioni in base al comportamento del server. 
  • Time-based Blind SQLi: L’attaccante utilizza funzioni che causano ritardi nelle risposte del server per determinare se una condizione è vera o falsa. 

Esempio Boolean-Based: 

SELECT * FROM utenti WHERE id = 1 AND 1=1; — Valido, restituisce risultati 

SELECT * FROM utenti WHERE id = 1 AND 1=2; — Non valido, non restituisce risultati 

L’attaccante prova diverse condizioni per dedurre informazioni. 

Esempio Time-Based: 

SELECT * FROM utenti WHERE id = 1 AND IF(1=1, SLEEP(5), 0); — Rallenta l’esecuzione se vero 

L’attaccante utilizza ritardi temporali per ottenere informazioni. 

Questo tipo di attacco è difficile da rilevare poiché non produce errori visibili, rendendo ancora più cruciale l’uso di misure di sicurezza come l’input validation e il web application firewall (WAF). 

 

ERROR-BASED SQL INJECTION 

L’Error-based SQL Injection sfrutta i messaggi di errore generati dal database per raccogliere informazioni. Quando un hacker inserisce un codice SQL malevolo, il database potrebbe restituire un messaggio di errore che rivela dettagli sulla struttura del database stesso. Questo tipo di attacco avviene in tre fasi: 

  • Individuazione della vulnerabilità: L’attaccante inserisce input malevolo per provocare errori. 
  • Analisi dei messaggi di errore: Gli errori generati forniscono informazioni utili sulla struttura del database. 
  • Sfruttamento delle informazioni: Con i dettagli ottenuti, l’attaccante può eseguire ulteriori attacchi per estrarre dati sensibili. 

Esempio: 

Inserendo un input come ‘1′ AND 1=CONVERT(int, (SELECT @@version))–’, potrebbe generare un errore che rivela la versione del database. 

Per mitigare questo rischio, è consigliabile disabilitare i messaggi di errore dettagliati e implementare meccanismi di gestione degli errori che non rivelano informazioni sensibili. 

 

IN-BAND SQL INJECTION 

L’In-band SQL Injection è uno dei metodi più diretti e comuni. In questo attacco, l’attaccante utilizza lo stesso canale di comunicazione per l’invio della query malevola e la ricezione dei risultati. Ci sono due sottotipi principali di In-band SQL Injection: 

  1. Classic SQL Injection: L’attaccante estrae i dati direttamente attraverso il canale di comunicazione usato per inviare la query. 
  1. Error-based SQL Injection: Come già descritto, questo metodo si basa sull’analisi dei messaggi di errore. 

Per proteggersi da In-band SQL Injection, è cruciale adottare pratiche di codifica sicura, come l’uso di query parametrizzate e l’escaping dei caratteri speciali. 

 

PROTEGGI LA TUA AZIENDA DAGLI ATTACCHI SQL 

La sicurezza della tua applicazione non può essere trascurata. Adotta le migliori pratiche di cybersecurity e proteggi i tuoi dati dagli attacchi SQL Injection. 

Contatta il nostro team di esperti per una consulenza personalizzata e scopri come possiamo aiutarti a mettere in sicurezza i tuoi sistemi. 

Newsletter

© Copyright Eurosystem SpA | P.IVA 02243020266 | Dati Societari | Privacy | Cookie

Newsletter

© Copyright Eurosystem SpA 2022 | P.IVA 02243020266 | Dati Societari | Privacy | Cookies

Condividi questa pagina :