Il tipo di argomento non dovrebbe giocare alcun ruolo in SQL injection altro da come viene creata la query SQL in primo luogo.
SQL injection abusa di una query SQL creata dal parametro come una stringa. Il server Web considera l'intero URL come una stringa e analizza anche tutti i parametri come stringa. Pertanto, anche quando ID è numerico, ad esempio 1, viene trattato da un server Web come stringa e il codice viene quindi inserito come stringa. Ciò ti consente di inserire caratteri speciali, che non sarebbero possibili se fossero consentiti solo numeri.
Tuttavia, potrebbero esserci delle differenze nella query SQL. Quando si utilizza la stringa in una query SQL, la stringa deve essere racchiusa tra virgolette singole '
. I numeri possono, ma non devono essere.
Numero: SELECT * FROM Test WHERE id = $NUMBER;
Stringa: SELECT * FROM Test WHERE id = '$TEXT';
Quando hai una stringa racchiusa tra virgolette, devi prima chiudere le virgolette. Ad esempio, invierai A'; DROP TABLES *;--
che ti darebbe:
%codice%.
Puoi vedere il SELECT * FROM Test WHERE id = 'A'; DROP TABLES *; --'
di finire il primo '
in modo che il tuo comando '
sia trattato come un comando e non come testo. Il - è usato per i commenti in SQL e qui lo usiamo per eliminare DROP TABLES *;
di chiusura. Altrimenti, causerebbe una query SQL non valida.
Tieni presente che i numeri CAN utilizzano anche virgolette in una query, quindi l'utilizzo di questo metodo di escape potrebbe essere utile per provare anche se il sito utilizza solo numeri nel parametro. Inoltre, a seconda del motore SQL, altri tipi di virgolette possono essere utilizzabili virgolette singole, ad esempio virgolette doppie, che cambierebbero il modo in cui devi sfuggirle.