it-swarm.dev

Iniezione SQL con AND 1 = 1

Spiega il significato di "AND 1 = 1 "in un attacco di iniezione SQL. Viene da un esercizio nella mia università. Ad es.

select * from user where id = 'smith'' AND 1=1;--  and birthdate = 1970;

o

select * from user where id = 'smith' and birthdate = 1970 AND 1=1;--;
20
Alex

La domanda specifica è SQL injection con AND 1 = 1 e non OR 1 = 1. C'è una differenza grande qui in ciò che l'OP chiede. Se fossi il tuo insegnante e mi fornissi la risposta di JonathanMueller, otterresti un voto schifoso perché non capisci la domanda.

AND 1 = 1 viene utilizzato di solito in iniezioni SQL cieche . Questo è quando devi determinare tra uno stato vero o falso dal risultato dell'applicazione per capire quale sia il risultato effettivo. Non ottieni i dati elencati nel risultato, l'unica cosa restituita è uno stato di cambiamento.

Se provi a sfruttare un'iniezione di Blind SQL con OR 1 = 1 fallirai perché l'uso principale di OR 1 = 1 è creare un valore sempre vero per estrarre la maggior parte dei dati dal database o forzare un'istruzione vera nel caso in cui venga sfruttato uno script di accesso.

Un esempio pratico di exploit SQL cieco:

Usiamo il nostro esempio: http://www.site.com/news.php?id=7 Proviamolo: http://www.site.com/news.php ? id = 7 e 1 = 1 <--- questo è sempre vero e la pagina si carica normalmente, va bene.

http://www.site.com/news.php?id=7 e 1 = 2 <--- questo è falso, quindi se nella pagina restituita mancano del testo, delle immagini o del contenuto allora quel sito è vulnerabile all'iniezione cieca di sql.

Un altro esempio in cui provi a capire la versione di MySQL:

http://www.site.com/news.php?id=7 e sottostringa (@@ versione, 1,1) = 4 Questo dovrebbe restituire VERO se la versione di MySQL è 4. Sostituisci 4 con 5 e se la query restituisce VERO, la versione è 5.

Esempi presi da: http://www.exploit-db.com/download_pdf/14475

34
Chris Dale

Normalmente, vedresti la frase "OR 1 = 1 '". Il motivo è che se il programmatore non gestisce correttamente i parametri (come l'id utente), un utente malintenzionato potrebbe utilizzare un OR 1=1 per restituire tutti i dati nella tabella.

Ad esempio, supponiamo di voler ottenere dettagli su un utente di nome Smith. La query potrebbe essere select * from user where id = '?', in cui il punto interrogativo viene sostituito con un parametro dall'input di un utente. Se l'attaccante ha superato smith' OR 1=1--, l'SQL risultante sarebbe select * from user where id = 'smith' OR 1=1--'. In questo caso la seconda virgoletta singola della query originale viene ignorata perché fa parte di un commento e la query restituirà tutti i dati nella tabella utente.

15
JonathanMueller

Per dare un esempio (un po 'banale, in cima alla testa) di SQL sq injection, immagina questa query da qualche parte nel codice della tua app ...

select 1 from user where name='[NAME]' and password='[PASS]'

dopo che Guy Malicious ha impostato i parametri nominati sopra a sua scelta, ottieni:

select 1 from user where name='admin' --' and password='[PASS]'
 utilizzando i seguenti valori scelti e non autorizzati: 
 [NOME] = '-' e password = '[PASS]' 
 il valore della variabile [PASS] non è importante 

Pertanto, supponendo che la query debba restituire 1 per esito positivo e set vuoto per utente o passaggio non valido, verrà restituito erroneamente un 1, consentendo a questo utente malvagio di accedere come account "admin".

0
Garrett