tags: sql_injection Time_Based_SQL_injection Blind_SQL_Injection
Questo tipo di SQL Injection viene fatta quando il server non fornisce nessuna risposta rilevante a qualsiasi richiesta posta dall’utente, quindi l’unico modo per capire se la nostra richiesta è stata accettata o meno dobbiamo utilizzare il tempo di risposta e messaggi booleani, ecco degli esempi:
Time-based
Si utilizza l’istruzione “WAITFOR DELAY” per valutare il ritardo temporale in risposta alle query true o false inviate al database:
; IF EXISTS(SELECT * FROM creditcard) WAITFOR DELAY '0:0:10’--- Controllerà se il database “creditcard” esiste o meno
- Se No, visualizza “Non siamo in grado di elaborare la tua richiesta. Riprova più tardi”
- Se Sì, va in stop per 10 secondi e dopo 10 secondi, visualizza “Non siamo in grado di elaborare la tua richiesta. Riprova più tardi.”
Questo ritardo nella risposta conferma l’esistenza del database di destinazione e consente agli aggressori di lanciare ulteriori attacchi.
Heavy Query
In alcune circostanze, è impossibile utilizzare funzioni di ritardo temporale nelle query SQL, poiché l’amministratore del database potrebbe disabilitare l’uso di tali funzioni. In tali casi, un aggressore può utilizzare query pesanti per eseguire un attacco SQL injection con ritardo temporale senza utilizzare funzioni di ritardo temporale. Una query pesante recupera una quantità enorme di dati e richiederà molto tempo per essere eseguita sul motore del database. Gli aggressori generano query pesanti utilizzando più join su tabelle di sistema perché le query su tabelle di sistema richiedono più tempo per essere eseguite. Ad esempio, la seguente è una query pesante in Oracle che richiede molto tempo per essere eseguita:
SELECT count(*) FROM all_users A, all_users B, all_users C Se un aggressore inietta un parametro dannoso nella query di cui sopra per eseguire un’iniezione SQL basata sul tempo senza utilizzare funzioni, assume la seguente forma:
1 AND 1 < SELECT count(*) FROM all_users A, all_users B, all_users C The final resultant query takes the form
SELECT * FROM products WHERE id=1 AND 1 < SELECT count(*) FROM all_users A, all_users B, all_users CUn attacco di query pesante è un nuovo tipo di attacco di iniezione SQL che ha un impatto significativo sulle prestazioni del server.
SQLMap
Tramite questo strumento è possibile automatizzare l’attacco, tramite il seguente comando:
sqlmap -u "http://www.moviescope.com" --time-sec=5 --technique=T --dbs • -u: Specifica l’URL del target.
• —time-sec=5: Imposta il tempo di attesa per le risposte del server a 5 secondi.
• —technique=T: Indica a SQLMap di utilizzare la tecnica Time-Based.
• —dbs: Enumera i database disponibili sul server.