Ho letto da qualche parte che in SQL injection gli aggressori usano queste parole chiave nei punti di ingresso delle applicazioni. Qual è lo scopo di questo?
Ho letto da qualche parte che in SQL injection gli aggressori usano queste parole chiave nei punti di ingresso delle applicazioni. Qual è lo scopo di questo?
Il frammento AND 1=0
viene sempre valutato a false
e pertanto la query restituisce sempre un set vuoto, ad es. se il frammento SQL nell'applicazione è
SELECT * FROM users WHERE username = '<placeholder>'
quindi posso trasformare questa query in
SELECT * FROM users WHERE username = 'admin' AND 1=0 --'
quando si utilizza admin' AND 1=0 --
come valore per il segnaposto.
Ora posso inserire una seconda istruzione che viene eseguita al posto di quella desiderata, ad es.
SELECT * FROM users WHERE username = 'admin' AND 1=0; TRUNCATE TABLE users; --'
Qui svuoterò la tabella users
come attacco.
Un'altra cosa utilizzata è OR 1=1
che viene sempre valutata a true
. Questo è usato per interrogare un'intera tabella ed eliminare completamente il where-caluse, ad es.
SELECT * FROM users WHERE username = 'admin' OR 1=1 --'
Ciò si ottiene utilizzando admin' OR 1=1 --
come segnaposto nell'esempio sopra.
In questo caso verrà restituita la tabella completa users
.
1=0
è sempre falso, quindi anche una clausola contenente AND 1=0
sarà sempre falsa. Questo, come il sempre vero OR 1=1
, può essere usato per ignorare le condizioni in una clausola WHERE
.
La variante OR 1=1
è più generalmente utile (ad esempio SELECT username WHERE userid=173
per ottenere il tuo nome utente diventa SELECT username WHERE userid=173 OR 1=1
per ottenere ogni nome utente sul sistema), ma la variante AND 1=0
può, ad esempio, essere utilizzata per ignorare un controllo "è già registrato".
Leggi altre domande sui tag sql-injection mysql attacks