È stato visto che i tester di sicurezza inseriscono "o; nei punti di ingresso dell'applicazione per testare l'iniezione SQL. Perché vengono utilizzati questi caratteri?
È stato visto che i tester di sicurezza inseriscono "o; nei punti di ingresso dell'applicazione per testare l'iniezione SQL. Perché vengono utilizzati questi caratteri?
Il carattere '
è usato perché questo è il limitatore di caratteri in SQL. Con '
delimitate le stringhe e quindi potete verificare se le stringhe sono correttamente scappate nell'applicazione di destinazione o meno. Se non sono direttamente sfuggiti, è possibile terminare qualsiasi stringa fornita all'applicazione e aggiungere successivamente un altro codice SQL.
Il carattere ;
viene utilizzato per terminare le istruzioni SQL. Se puoi inviare il carattere ;
a un'applicazione e non è sfuggito all'esterno di una stringa (vedi sopra), puoi terminare qualsiasi istruzione SQL e crearne una nuova che lasci una violazione della sicurezza.
Leggi esempi di Wikipedia di iniezioni SQL , in particolare la sezione "Caratteri di escape erroneamente filtrati".
Essenzialmente, in un'iniezione ci si aspetta che fornisca un comando pronto con un parametro. Costruisci questo parametro in modo che contenga un comando incorporato, rispettando la sintassi di SQL.
Poiché un comando è in genere SELECT FROM / UPDATE WHERE FOO='<your entry point>'
, puoi utilizzare nop'; Your own command here
. La combinazione dei due darà una sequenza di due comandi sintatticamente validi che saranno entrambi eseguiti.
Per prevenire le iniezioni SQL, assicurati di convalidare tutti gli input non attendibili verificando che appartengano a un dominio di input accettati in white list (in questo caso in genere sfuggi a caratteri speciali) e assicurati di delegare la composizione del comando a l'API DB che utilizzi invece di farlo tu stesso: usa una chiamata diversa per fornire il comando e i parametri in modo che l'API su cui fai affidamento possa eseguire ulteriori controlli ed evitare ulteriori imbarazzi!
I tester stanno cercando di trovare i bug che possono ottenere credito per la ricerca ; non stanno cercando di trovare l'ultimo problema rimasto.
Nella maggior parte dei casi, l'input viene controllato prima di passare in SQL tramite una funzione ben scritta o viene utilizzato un parametro. Pertanto è probabile che se viene arrestato anche il tipo più elementare di SQL-injection, tutti i tipi di SQL-injection vengono arrestati per il campo modulo specificato.
Quindi, inserire un ‘
in ogni punto di ingresso è un modo semplice e veloce per ottenere molti vantaggi per il tester e il datore di lavoro del tester.
(Allo stesso modo un sacco di tester copia / incolla in un lungo pezzetto di testo, anche se nessun utente lo farà mai, poiché è un modo rapido per verificare se l'applicazione è codificata per far fronte agli input che sono troppo lungo.)
Leggi altre domande sui tag sql-injection