Skip to main content

Test delle vulnerabilità di iniezione SQL

Identifying True Worship, Part 11: Unrighteous Riches (Aprile 2025)

Identifying True Worship, Part 11: Unrighteous Riches (Aprile 2025)
Anonim

Gli attacchi SQL Injection rappresentano un rischio enorme per le applicazioni Web che dipendono dal back-end del database per generare contenuti dinamici. In questo tipo di attacco, gli hacker manipolano un'applicazione web nel tentativo di iniettare i propri comandi SQL in quelli emessi dal database. Per un esempio, vedere l'articolo SQL Injection Attacks on Databases. In questo articolo, diamo uno sguardo a diversi modi in cui puoi testare le tue applicazioni web per determinare se sono vulnerabili agli attacchi di SQL Injection.

Scansione automatica dell'iniezione SQL

Una possibilità è l'utilizzo di uno scanner di vulnerabilità di applicazioni Web automatizzate, come WebInspect di HP, AppScan di IBM o Hailstorm di Cenzic. Questi strumenti offrono tutti modi semplici e automatizzati per analizzare le tue applicazioni web per potenziali vulnerabilità di SQL Injection. Tuttavia, sono piuttosto costosi, con un costo fino a $ 25.000 per posto.

Test di iniezione manuale SQL

Cosa deve fare un povero sviluppatore di applicazioni? È possibile eseguire alcuni test di base per valutare le applicazioni Web per le vulnerabilità di SQL Injection utilizzando nient'altro che un browser Web. Innanzitutto, una parola di cautela: i test che descriviamo riguardano solo i difetti di base di SQL Injection. Non rileveranno tecniche avanzate e sono un po 'noiose da usare. Se te lo puoi permettere, vai con uno scanner automatico. Tuttavia, se non riesci a gestire il prezzo, il test manuale è un ottimo primo passo.Il modo più semplice per valutare se un'applicazione è vulnerabile è sperimentare con innocui attacchi di iniezione che non danneggeranno effettivamente il tuo database se ci riusciranno, ma ti forniranno la prova che devi correggere un problema. Ad esempio, supponiamo che tu abbia una semplice applicazione web che ricerca un individuo in un database e che fornisca informazioni di contatto come risultato. Quella pagina potrebbe utilizzare il seguente formato URL:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Possiamo supporre che questa pagina esegua una ricerca nel database, utilizzando una query simile alla seguente:

SELEZIONA telefono

Dalla directory

WHERE lastname = 'chapple' e firstname = 'mike'

Sperimentiamo un po 'questo. Con la nostra ipotesi sopra, possiamo apportare una semplice modifica all'URL che verifica gli attacchi SQL injection:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Se l'applicazione Web non è stata adeguatamente protetta dall'iniezione SQL, inserisce semplicemente questo falso nome nell'istruzione SQL che esegue sul database, risultante in:

SELEZIONA telefono

Dalla directory

WHERE lastname = 'chapple' e firstname = 'mike'

AND (seleziona count (*) da fake)> 0

O '1' = '1'

Noterai che la sintassi sopra riportata è leggermente diversa dall'URL originale. Ci siamo presi la libertà di convertire la variabile con codifica URL per i loro equivalenti ASCII per rendere più facile seguire l'esempio. Ad esempio,% 3d è la codifica dell'URL per il carattere '='. Abbiamo anche aggiunto alcune interruzioni di riga per scopi simili.

Valutare i risultati

Il test arriva quando provi a caricare la pagina web con l'URL sopra elencato. Se l'applicazione Web è ben educata, eliminerà le virgolette singole dall'input prima di passare la query al database. Ciò si tradurrà semplicemente in una strana ricerca per qualcuno con un nome che include un sacco di SQL. Verrà visualizzato un messaggio di errore dall'applicazione simile a quello riportato di seguito:

Errore: nessun utente trovato con nome mike + AND + (seleziona + conta (*) + da + falso) +% 3e0 + OR + 1% 3d1

Chapple!

D'altra parte, se l'applicazione è vulnerabile all'iniezione SQL, passerà l'istruzione direttamente al database, risultando in una delle due possibilità. Innanzitutto, se il tuo server ha abilitato messaggi di errore dettagliati (cosa che non dovresti), vedrai qualcosa di simile a questo:

Errore Microsoft OLE DB Provider per driver ODBC '80040e37'

Microsoft Driver ODBC SQL Server SQL Server Nome oggetto non valido 'falso'.

/directory.asp, riga 13

D'altra parte, se il tuo server web non visualizza messaggi di errore dettagliati, otterrai un errore più generico, come ad esempio:

Errore interno del serverIl server ha riscontrato un errore interno o una configurazione errata e non è stato in grado di completare la richiesta.

Si prega di contattare l'amministratore del server per informare dell'ora in cui si è verificato l'errore e di tutto ciò che potrebbe aver fatto che potrebbe aver causato l'errore.

Ulteriori informazioni su questo errore potrebbero essere disponibili nel log degli errori del server.

Se si riceve uno dei due errori di cui sopra, l'applicazione è vulnerabile all'attacco SQL injection. Alcuni passaggi che è possibile adottare per proteggere le applicazioni dagli attacchi di SQL Injection includono:

  • Implementare il controllo dei parametri su tutte le applicazioni. Ad esempio, se chiedi a qualcuno di inserire un numero cliente, assicurati che l'input sia numerico prima di eseguire la query.
  • Limita le autorizzazioni dell'account che esegue query SQL. Si applica la regola del privilegio minimo. Se l'account utilizzato per eseguire la query non ha il permesso di eseguirlo, non avrà esito positivo.
  • Utilizzare stored procedure (o tecniche simili) per impedire agli utenti di interagire direttamente con il codice SQL.