Tutorial sull'iniezione SQL: come imparare con l'esempio
Cos'รจ un'iniezione SQL?
SQL Injection รจ un attacco che avvelena le istruzioni SQL dinamiche per commentare alcune parti dell'istruzione o aggiungere una condizione che sarร sempre vera. Sfrutta i difetti di progettazione delle applicazioni Web mal progettate per sfruttare le istruzioni SQL per eseguire codice SQL dannoso.
I dati sono uno dei componenti piรน vitali dei sistemi informativi. Le applicazioni Web basate su database vengono utilizzate dall'organizzazione per ottenere dati dai clienti. SQL รจ l'acronimo di Structured Query Language. Viene utilizzato per recuperare e manipolare i dati nel database.
Come funziona l'attacco SQL Injection?
I tipi di attacchi che possono essere eseguiti utilizzando SQL injection variano a seconda del tipo di motore di database. L'attacco funziona su istruzioni SQL dinamiche. Un'istruzione dinamica รจ un'istruzione generata in fase di esecuzione utilizzando la password dei parametri da un modulo Web o una stringa di query URI.
Esempio di iniezione SQL
Consideriamo una semplice applicazione web con un modulo di accesso. Il codice per il modulo HTML รจ mostrato di seguito.
<form action=โindex.phpโ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
QUI,
- Il modulo soprastante accetta l'indirizzo e-mail e la password, quindi li invia a un PHP file denominato index.php.
- Ha un'opzione per memorizzare la sessione di accesso in un cookie. Lo abbiamo dedotto dalla casella di controllo remember_me. Utilizza il metodo post per inviare i dati. Ciรฒ significa che i valori non vengono visualizzati nel URL.
Supponiamo che l'istruzione nel backend per il controllo dell'ID utente sia la seguente
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
QUI,
- L'istruzione precedente utilizza i valori di
$_POST[]array direttamente senza igienizzarli. - La password viene crittografata utilizzando l'algoritmo MD5.
Illustreremo l'attacco di iniezione SQL utilizzando sqlfiddle. Apri il URL http://sqlfiddle.com/ nel tuo browser web. Otterrai la seguente finestra.
Nota: dovrai scrivere le istruzioni SQL
Passo 1) Inserisci questo codice nel riquadro di sinistra
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(45) NULL,
`password` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
insert into users (email,password) values ('m@m.com',md5('abc'));
Passo 2) Fare clic su Crea schema
Passo 3) Inserisci questo codice nel riquadro di destra
select * from users;
Passo 4) Fai clic su Esegui SQL. Vedrai il seguente risultato
Supponiamo che le forniture dell'utente admin@admin.sys and 1234 come password. L'istruzione da eseguire sul database sarebbe
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Il codice sopra puรฒ essere sfruttato commentando la parte della password e aggiungendo una condizione che sarร sempre vera. Supponiamo che un aggressore fornisca il seguente input nel campo indirizzo email.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx per la password.
L'istruzione dinamica generata sarร la seguente.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
QUI,
- xxx@xxx.xxx termina con una virgoletta singola che completa la virgoletta della stringa
OR 1 = 1LIMITE 1 รจ una condizione che sarร sempre vera e limita i risultati restituiti a un solo record.- โ ' AND โฆ รจ un commento SQL che elimina la parte relativa alla password.
Copia l'istruzione SQL sopra e incollala SQL FiddleEsegui la casella di testo SQL come mostrato di seguito
Attivitร di hacking: SQL Inject in un'applicazione Web
Abbiamo una semplice applicazione web su http://www.techpanda.org/ che รจ vulnerabile agli attacchi SQL Injection solo a scopo dimostrativo. Il codice del modulo HTML sopra รจ tratto dalla pagina di login. L'applicazione fornisce una sicurezza di base, come la sanificazione del campo email. Ciรฒ significa che il nostro codice sopra non puรฒ essere utilizzato per bypassare il login.
Per aggirare questo problema possiamo invece sfruttare il campo password. Il diagramma seguente mostra i passaggi da seguire
Supponiamo che un aggressore fornisca il seguente input
- Passaggio 1: inserisci xxx@xxx.xxx come indirizzo email
- Passaggio 2: immettere xxx') OPPURE 1 = 1 โ ]
- Fare clic sul pulsante Invia
- Verrai indirizzato alla dashboard
L'istruzione SQL generata sarร la seguente
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Il diagramma seguente illustra la generazione della dichiarazione.
QUI,
- La dichiarazione presuppone in modo intelligente che venga utilizzata la crittografia MD5
- Completa la virgoletta singola e la parentesi di chiusura
- Aggiunge una condizione all'affermazione che sarร sempre vera
In generale, un attacco SQL Injection riuscito tenta una serie di tecniche diverse come quelle mostrate sopra per eseguire un attacco riuscito.
Altri tipi di attacchi SQL injection
Le SQL Injection possono causare piรน danni che semplicemente passando gli algoritmi di accesso. Alcuni degli attacchi includono
- Eliminazione dei dati
- Aggiornamento dei dati
- Inserimento dati
- Esecuzione di comandi sul server che possono scaricare e installare programmi dannosi come trojan
- Esportazione di dati preziosi come dettagli di carte di credito, e-mail e password sul server remoto dell'aggressore
- Ottenere i dettagli di accesso dell'utente ecc.
- SQL injection basata sui cookie
- Iniezione SQL basata su errori
- Iniezione SQL cieca
L'elenco sopra riportato non รจ esaustivo; ti dร solo un'idea di cosa sia SQL Injection
Strumenti di automazione per SQL Injection
Nell'esempio precedente, abbiamo utilizzato tecniche di attacco manuale basate sulla nostra vasta conoscenza di SQL. Esistono strumenti automatizzati che possono aiutarti a eseguire gli attacchi in modo piรน efficiente e nel piรน breve tempo possibile. Questi strumenti includono
- Mappa SQL โ http://sqlmap.org/
- Iniezione JSQL โ https://tools.kali.org/vulnerability-analysis/jsql
Come prevenire gli attacchi SQL Injection
Un'organizzazione puรฒ adottare la seguente politica per proteggersi dagli attacchi SQL Injection.
- Lโinput dellโutente non dovrebbe mai essere considerato attendibile โ Deve essere sempre ripulito prima di essere utilizzato nelle istruzioni SQL dinamiche.
- Procedura di archiviazione - questi possono incapsulare le istruzioni SQL e trattare tutti gli input come parametri.
- Dichiarazioni preparate โ istruzioni preparate per funzionare creando prima l'istruzione SQL e poi trattando tutti i dati utente inviati come parametri. Ciรฒ non ha alcun effetto sulla sintassi dell'istruzione SQL.
- Espressioni regolari - questi possono essere utilizzati per rilevare potenziale codice dannoso e rimuoverlo prima di eseguire le istruzioni SQL.
- Diritti di accesso utente per la connessione al database โ agli account utilizzati dovrebbero essere concessi solo i diritti di accesso necessari connettersi al database. Ciรฒ puรฒ aiutare a ridurre ciรฒ che le istruzioni SQL possono eseguire sul server.
- Messaggio di errore - questi non dovrebbero rivelare informazioni sensibili e dove esattamente si รจ verificato un errore. Semplici messaggi di errore personalizzati come "Spiacenti, stiamo riscontrando errori tecnici. Il team tecnico รจ stato contattato. Riprova piรน tardi" possono essere utilizzati invece di visualizzare le istruzioni SQL che hanno causato l'errore.
Attivitร di hacking: utilizzare Havij per SQL Injection
In questo scenario pratico, utilizzeremo il programma Havij Advanced SQL Injection per scansionare un sito Web alla ricerca di vulnerabilitร .
Nota: il tuo programma antivirus potrebbe segnalarlo a causa della sua natura. Dovresti aggiungerlo all'elenco delle esclusioni o mettere in pausa il tuo software antivirus.
L'immagine sotto mostra la finestra principale di Havij
Lo strumento di cui sopra puรฒ essere utilizzato per valutare la vulnerabilitร di un sito/applicazione web.
Sintesi
- SQL Injection รจ un tipo di attacco che sfrutta istruzioni SQL errate
- L'iniezione SQL puรฒ essere utilizzata per bypassare gli algoritmi di accesso, recuperare, inserire, aggiornare ed eliminare dati.
- Gli strumenti di iniezione SQL includono SQLMap, SQLPinge SQLSmack, ecc.
- Una buona politica di sicurezza durante la scrittura dell'istruzione SQL puรฒ aiutare a ridurre gli attacchi SQL injection.








