-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

In-Band SQL Injection


Quando un'applicazione web permette di inviare comandi SQL non autorizzati al database tramite l'interfaccia utente.

In-Band SQL Injection

La In-Band SQL Injection è un tipo di attacco SQL Injection che si verifica quando un'applicazione web permette a un utente malintenzionato di inviare comandi SQL non autorizzati al database tramite l'interfaccia utente.
In questo tipo di attacco, l'aggressore ottiene feedback (risultati) direttamente nel browser o nell'applicazione stessa, e non richiede canali di comunicazione separati per ricevere le risposte dal database.

Esistono principalmente due varianti di In-Band SQL Injection:
1. Error-based SQL Injection: sfrutta i messaggi di errore restituiti dal database per dedurre informazioni sulla struttura e sul contenuto del database stesso.
2. Union-based SQL Injection: sfrutta l'operatore `UNION` per combinare i risultati di query lecite con quelle malevole, restituendo così dati extra direttamente visibili all'attaccante.

Esempio di Error-based SQL Injection

L'attaccante può inviare un input malevolo che induce l'applicazione a generare un errore dal database, rivelando dettagli utili. Ad esempio, su un form di login o di ricerca che non è adeguatamente protetto, si può inserire un payload SQL come:

' OR 1=1 --

Se l'applicazione concatena l'input alla query SQL senza sanitizzazione, l'iniezione potrebbe causare un errore, rivelando informazioni sui campi o sulla struttura del database.

Esempio di Union-based SQL Injection

In questo caso, l'attaccante utilizza `UNION SELECT` per combinare la propria query con una legittima, visualizzando dati dal database. Supponiamo che il sito abbia una query SQL simile:

SELECT nome, email FROM utenti WHERE id = '1';


Un attaccante potrebbe tentare di manipolare l'input in modo che l'intera query diventi:

SELECT nome, email FROM utenti WHERE id = '1' UNION SELECT username, password FROM utenti -- ;


In questo esempio, se il database restituisce i risultati, l'aggressore potrebbe visualizzare username e password della tabella `utenti`.

Fasi per effettuare un'In-Band SQL Injection

1. Identificazione: l'attaccante cerca parametri vulnerabili (come campi di input, URL con query string, o intestazioni HTTP).
2. Testing: vengono inseriti payload standard (ad es. `' OR 1=1 --`, oppure `UNION SELECT`) per verificare la risposta del database.
3. Sfruttamento: una volta verificata la vulnerabilità, l'attaccante ottimizza il payload per estrarre dati utili.

Difese contro In-Band SQL Injection

- Parametrizzare le query: utilizzo di prepared statements e query parametrizzate per separare i comandi SQL dai dati.
- Validazione degli input: rimuovere caratteri speciali o impedire inserimenti sospetti.
- Gestione degli errori: evitare che il database ritorni errori dettagliati all'utente.
- Principio del privilegio minimo: limitare i permessi dell'utente del database utilizzato dall'applicazione.

Questo tipo di SQL Injection è uno dei più facili da individuare e sfruttare ma, se adeguatamente protetti, si può prevenire completamente.