Modifica: alla luce del riferimento di OP a Blind SQL Injection
Non riesco a vedere in alcun modo in cui "l'iniezione SQL basata su stringhe" possa essere interpretata in modo specifico come una forma di iniezione SQL cieca. L'iniezione SQL invisibile può verificarsi su qualsiasi tipo di dati, non su stringhe solo . Ovviamente può essere basato su stringhe, ma non più di quanto possa fare la normale iniezione SQL.
Certo, ci sono almeno un paio di articoli online, ma credo che questi abbiano confuso il termine. Per es.
Articoli da fonti più affidabili come OWASP non sembrano fare alcun collegamento tra i termini "basato su stringhe" e "cieco", ma per favore sentiti libero di correggermi. Inoltre, la tua domanda sembra descrivere ciò che è noto come SQL basato su errori Injection che non è cieco, né è specificamente "basato su stringhe".
Tuttavia, ecco la mia risposta originale che copre l'SQL Injection delle stringhe rispetto ad altri tipi di dati ...
Questo arriva fino al punto in cui viene iniettato il parametro vulnerabile; più specificamente, se viene iniettato all'interno di virgolette (una stringa) o in altro modo (ad esempio interi, timestamp, ecc.)
Ad esempio, considera il seguente URL:
http://www.example.com/search?id=23&txt=my+search+string
Ora supponiamo che questi feed in una query in modo dinamico tramite PHP come segue:
$id = $_GET('id');
$txt = $_GET('txt');
$querystring = "SELECT * FROM items WHERE id = $id OR txt = '$txt'"
Se $querystring
doveva essere eseguito in SQL, in questo caso entrambi i parametri sarebbero vulnerabili (sono stati concatenati senza validazione o sanificazione).
Tuttavia, il parametro txt è contenuto all'interno di virgolette '
, il che significa che per eseguire istruzioni SQL arbitrarie, devi prima eseguire l'escape della stringa includendo un carattere '
(cioè finiamo noi stessi la stringa in modo che il nostro SQL è incluso successivamente). Questo perché qualsiasi cosa all'interno delle virgolette fa parte della stringa di ricerca e pertanto non verrà eseguita.
Ad esempio:
http://www.example.com/search?id=23&txt='+OR+1=1--
Ne risulterebbe un $querystring
che assomigliava a:
SELECT * FROM items WHERE id = 23 OR txt = '' OR 1=1--'
Quindi abbiamo "scappato" la stringa iniettando il nostro '
. Pertanto, questo caso si basa molto sulla possibilità di includere il carattere '
.
Mentre il parametro id ha solo bisogno di spazi bianchi:
http://www.example.com/search?id=23+OR+1=1--&txt=my+search+string
...
SELECT * FROM items WHERE id = 23 OR 1=1 OR txt = 'my search string'