tags: sql_injection tipi_di_sql
Iniezione SQL in-band
Questa tecnica è considerata il tipo più comune e diretto di attacco di iniezione SQL. In questa tecnica, l’aggressore utilizza lo stesso canale di comunicazione sia per l’iniezione che per il recupero dei dati. Esistono due tipi principali di iniezione
- SQL in-band: Iniezione SQL basata su errori: l’aggressore manipola la query SQL per produrre messaggi di errore dal database. Questi messaggi di errore spesso contengono informazioni sulla struttura del database, che possono essere utilizzate per sfruttare ulteriormente il database. Esempio: SELECT * FROM users WHERE id = 1 AND 1=CONVERT(int, (SELECT @@version)). Se la versione del database viene restituita nel messaggio di errore, rivela informazioni sul database. Iniezione
- SQL basata su unioni: l’aggressore utilizza l’operatore SQL UNION per combinare i risultati di due o più istruzioni SELECT in un singolo risultato, recuperando così dati da altre tabelle. Esempio: SELECT name, email FROM users WHERE id = 1 UNION ALL SELECT username, password FROM admin.
Iniezione SQL inferenziale (cieca)
L’iniezione SQL inferenziale non trasferisce i dati direttamente tramite l’applicazione Web, rendendone più difficile lo sfruttamento. Invece, l’aggressore invia payload e osserva il comportamento e i tempi di risposta dell’applicazione per dedurre informazioni sul database. Esistono due tipi principali di iniezione SQL inferenziale:
- Iniezione SQL cieca basata su valori booleani: l’aggressore invia una query SQL al database, costringendo l’applicazione a restituire un risultato diverso in base a una condizione vera o falsa. Analizzando la risposta dell’applicazione, l’aggressore può dedurre se il payload era vero o falso. Esempio: SELECT * FROM users WHERE id = 1 AND 1=1 (condizione vera) rispetto a SELECT * FROM users WHERE id = 1 AND 1=2 (condizione falsa). L’aggressore può dedurre il risultato se il contenuto o il comportamento della pagina cambia in base alla condizione.
- Iniezione SQL cieca basata sul tempo: l’aggressore invia una query SQL al database, che ritarda la risposta per un tempo specificato se la condizione è vera. Misurando il tempo di risposta, l’aggressore può dedurre se la condizione è vera o falsa. Ad esempio, SELECT * FROM users WHERE id = 1; IF (1=1) WAITFOR DELAY ‘00:00:05’—. Se la risposta è ritardata di 5 secondi, l’aggressore può dedurre che la condizione era vera.
Iniezione SQL fuori banda
L’iniezione SQL fuori banda viene utilizzata quando l’aggressore non può utilizzare lo stesso canale per lanciare l’attacco e raccogliere i risultati o quando le risposte del server sono instabili. Questa tecnica si basa sul server del database che effettua una richiesta fuori banda (ad esempio, HTTP o DNS) per inviare il risultato della query all’aggressore. HTTP viene normalmente utilizzato nell’iniezione SQL fuori banda per inviare il risultato della query al server dell’aggressore. Ne parleremo in dettaglio in questa stanza. Ogni tipo di tecnica di iniezione SQL ha i suoi vantaggi e le sue sfide. Comprendere queste tecniche è fondamentale per identificare e mitigare le vulnerabilità di iniezione SQL nelle applicazioni Web. L’iniezione SQL in-band è facile da sfruttare e rilevare ma è rumorosa e può essere facilmente monitorata. L’iniezione SQL inferenziale (cieca) è più difficile da sfruttare e richiede più richieste ma può essere utilizzata quando non sono disponibili messaggi di errore dettagliati. L’iniezione SQL out-of-band è meno comune e altamente efficace, richiede il controllo del server esterno e si basa sulla capacità del database di effettuare richieste out-of-band. Padroneggiando queste tecniche, i penetration tester possono identificare e sfruttare efficacemente le vulnerabilità di iniezione SQL, aiutando le organizzazioni a proteggere le proprie applicazioni Web da queste minacce critiche.