I dati sono una delle 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.
Cos'è una SQL injection?
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 nelle applicazioni Web mal progettate per sfruttare le istruzioni SQL per eseguire codice SQL dannoso.
In questo tutorial imparerai le tecniche di SQL Injection e come puoi proteggere le applicazioni web da tali attacchi.
- Come funziona SQL Injection
- Attività di hacking: SQL Inject un'applicazione Web
- Altri tipi di attacco SQL Injection
- Strumenti di automazione per SQL Injection
- Come prevenire gli attacchi SQL injection
- Attività di hacking: utilizzare Havji per SQL Injection
Come funziona 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.
Consideriamo una semplice applicazione web con un form di login. Il codice per il modulo HTML è mostrato di seguito.
QUI,
- Il modulo sopra accetta l'indirizzo e-mail e la password quindi li invia a un file PHP 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 nell'URL.
Supponiamo che l'istruzione nel backend per il controllo dell'ID utente sia la seguente
SELEZIONA * DAGLI utenti DOVE email = $ _POST ['email'] AND password = md5 ($ _ POST ['password']);
QUI,
- L'istruzione precedente utilizza i valori dell'array $ _POST [] direttamente senza eliminarli.
- La password viene crittografata utilizzando l'algoritmo MD5.
Illustreremo l'attacco SQL injection utilizzando sqlfiddle. Apri l'URL http://sqlfiddle.com/ nel tuo browser web. Otterrai la seguente finestra.
Nota: dovrai scrivere le istruzioni SQL
Passaggio 1) Immettere 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 ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Passaggio 2) Fare clic su Crea schema
Passaggio 3) Immettere questo codice nel riquadro di destra
seleziona * dagli utenti;
Passaggio 4) Fare clic su Esegui SQL. Vedrai il seguente risultato
Supponiamo che l'utente fornisca Questo indirizzo e-mail è protetto dallo spam bot. Devi abilitare JavaScript per vederlo. e 1234 come password. L'istruzione da eseguire sul database sarebbe
SELECT * FROM users WHERE email = ' Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo. ' 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 utente malintenzionato fornisca il seguente input nel campo dell'indirizzo di posta elettronica.
Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo. ' OPPURE 1 = 1 LIMITE 1 - "]
xxx per la password.
L'istruzione dinamica generata sarà la seguente.
SELECT * FROM users WHERE email = ' Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo. ' OR 1 = 1 LIMIT 1 - '] AND password = md5 (' 1234 ');
QUI,
- Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo. termina con una virgoletta singola che completa la citazione della stringa
- OPPURE 1 = 1 LIMITE 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 nella casella di testo SQL FiddleRun SQL come mostrato di seguito
Attività di hacking: SQL Inject un'applicazione Web
Abbiamo una semplice applicazione web su http://www.techpanda.org/ vulnerabile agli attacchi SQL Injection solo a scopo dimostrativo. Il codice del modulo HTML sopra è preso dalla pagina di accesso. L'applicazione fornisce una sicurezza di base come la disinfezione del campo della posta elettronica. Ciò significa che il nostro codice sopra non può essere utilizzato per bypassare l'accesso.
Per ovviare a questo, possiamo invece sfruttare il campo della password. Il diagramma seguente mostra i passaggi da seguire
Supponiamo che un utente malintenzionato fornisca il seguente input
- Passaggio 1: inserisci questo indirizzo e-mail è protetto dallo spam bot. Devi abilitare JavaScript per vederlo. come indirizzo e-mail
- Passaggio 2: inserisci 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 = ' Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo. ' AND password = md5 ('xxx') OR 1 = 1 -] ');
Il diagramma seguente mostra che l'istruzione è stata generata.
QUI,
- L'istruzione presume in modo intelligente che venga utilizzata la crittografia md5
- Completa virgolette singole e parentesi di chiusura
- Aggiunge una condizione alla dichiarazione che sarà sempre vera
In generale, un attacco SQL Injection riuscito tenta una serie di tecniche diverse come quelle dimostrate sopra per eseguire un attacco con successo.
Altri tipi di attacco SQL Injection
Le SQL injection possono causare più danni del semplice passaggio degli algoritmi di accesso. Alcuni degli attacchi includono
- Eliminazione dei dati
- Aggiornamento dei dati
- Inserimento di dati
- Esecuzione di comandi sul server in grado di scaricare e installare programmi dannosi come i trojan
- Esportazione di dati preziosi come dettagli della carta di credito, e-mail e password sul server remoto dell'aggressore
- Ottenere i dettagli di accesso dell'utente, ecc
L'elenco sopra non è esaustivo; ti dà solo un'idea di cosa 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
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Come prevenire gli attacchi SQL injection
Un'organizzazione può adottare la seguente policy per proteggersi dagli attacchi SQL Injection.
- L'input dell'utente non dovrebbe mai essere considerato attendibile: deve sempre essere disinfettato prima di essere utilizzato nelle istruzioni SQL dinamiche.
- Stored procedure: possono incapsulare le istruzioni SQL e trattare tutti gli input come parametri.
- Istruzioni preparate: istruzioni preparate per funzionare creando prima l'istruzione SQL, quindi trattando tutti i dati utente inviati come parametri. Ciò non ha effetto sulla sintassi dell'istruzione SQL.
- Espressioni regolari: possono essere utilizzate per rilevare codice potenzialmente dannoso e rimuoverlo prima di eseguire le istruzioni SQL.
- Diritti di accesso utente per la connessione al database: solo i diritti di accesso necessari devono essere forniti agli account utilizzati per connettersi al database. Ciò può aiutare a ridurre ciò che le istruzioni SQL possono eseguire sul server.
- Messaggi di errore: questi non dovrebbero rivelare informazioni sensibili e dove si è verificato esattamente un errore. Semplici messaggi di errore personalizzati come "Siamo spiacenti, stiamo riscontrando errori tecnici. Il team tecnico è stato contattato. Si prega di riprovare più tardi ”può essere utilizzato 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 eseguire la scansione di un sito Web alla ricerca di vulnerabilità.
Nota: il tuo programma antivirus potrebbe contrassegnarlo 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 sopra può essere utilizzato per valutare la vulnerabilità di un sito web / applicazione.
Sommario
- SQL Injection è un tipo di attacco che sfrutta istruzioni SQL errate
- SQL injection può essere utilizzata per bypassare gli algoritmi di accesso, recuperare, inserire e aggiornare ed eliminare i dati.
- Gli strumenti di SQL injection includono SQLMap, SQLPing e SQLSmack, ecc.
- Una buona politica di sicurezza durante la scrittura dell'istruzione SQL può aiutare a ridurre gli attacchi di SQL injection.