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