Comprensione dell'iniezione SQL basata su booleana

9

Sto cercando di capire il concetto di Boolean Based Blind SQL Injection. Ho seguito Guida OWASP a SQLi per capirlo. Tuttavia sono confuso da come funziona esattamente. Di seguito è quello che ho capito dall'articolo nel link sopra. Per favore fatemi sapere se la mia comprensione è corretta o se sto fraintendendo qualcosa.

Quindi, come per il link sopra, assumiamo un URL di esempio in cui il parametro vulnerabile è 'id' come:

http://www.example.com/index.php?id=1'

Quindi la query corrispondente centrale eseguita sul server potrebbe essere:

SELECT field1, field2, field3 FROM Users WHERE Id='$Id' 

Ora assumendo che Users contenga un campo chiamato Username , vogliamo estrarre il valore del campo Username dove id=1 usando la nostra tecnica booleana. Quindi proviamo a indovinare questo valore carattere per carattere in questo modo:

$Id=1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1 

L'articolo dice che continuiamo ad aumentare il valore ASCII dal 97 in poi 1 per 1 ogni volta che riteniamo che la valutazione sia falsa.

Now the problem here is how to find whether the result that gets returned from the above query is TRUE or FALSE.

Quindi per risolvere questo problema, l'articolo dice che proviamo a eseguire quanto segue prima di provare quanto sopra:

$Id=1' AND '1' = '2 so this would generate the query SELECT field1, field2, field3 FROM Users WHERE Id='1' AND '1' = '2'.

Dopo l'esecuzione della query precedente, il server restituirebbe determinati stati (una pagina, un reindirizzamento ecc.). Dato che 1=2 sarà sempre valutato a FALSE , verremmo a sapere cosa succede nell'evento di un FALSE risultato restituito da una query.

Now we can match this result with the result that we get by the execution of $Id=1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1 and thus conclude if the test against 97 (or any specific ASCII value) evaluates to TRUE FALSE.

  1. La mia comprensione di quanto sopra è corretta?
  2. Se sì, allora nella query, $Id=1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1 , perché abbiamo bisogno della parte dopo AND ? Voglio dire, non possiamo confermare il risultato (come confermato nell'analisi sopra) senza il grassetto della query? Perché la parte in grassetto della query è davvero necessaria?
  3. Poiché in questa tecnica stiamo anche cercando di vedere la pagina di errore e distinguerla dalla pagina di successo, non dovrebbe essere considerata come una SQLi basata sull'errore piuttosto che chiamarla basata su boolean?
posta qre0ct 22.06.2014 - 04:40
fonte

1 risposta

9

Is my understanding of the above correct ?

Sì, la tua comprensione è corretta.

If yes, then in the query, $Id=1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1, what is the need of the bold part above? I mean, can't we confirm the result (as confirmed in the analysis above) without the bold pat of the query ? Why is bold part of the query really needed ?

Per sfruttare correttamente un'iniezione SQL è necessario che l'SQL risultante sia valido. Il trailing AND '1'='1 serve per adattare il codice inserito nell'istruzione esistente. Dato che siamo scappati da una stringa letterale con 1' all'inizio, dobbiamo introdurre una nuova stringa letterale alla fine. Tuttavia, si potrebbe anche usare AND ASCII(SUBSTRING(username,1,1))='97 dato che MySQL può confrontare la stringa con valori interi.

Since in this technique also we are basically trying to see the error page and distinguish it from the success page, should it not be considered as an Error Based SQLi rather than calling it Boolean Based ?

L'iniezione SQL basata sull'errore si verifica quando il server risponde con il messaggio di errore tecnico effettivo come:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

Qui puoi vedere quale porzione dell'SQL risultante ha avuto esito negativo e potresti decidere come risolverlo con l'iniezione.

Nell'iniezione SQL booleana tutto ciò che vedi è solo un comportamento diverso su input diversi. Questo diverso comportamento può includere la risposta di un messaggio di errore, ma a meno che non sia uno con dettagli tecnici che dicono a quale è andato storto non ti aiuta più di qualsiasi altro comportamento booleano.

    
risposta data 22.06.2014 - 09:21
fonte

Leggi altre domande sui tag