La query in questione probabilmente è simile a questa:
SELECT * FROM users WHERE user = '$user' AND pass = '$pass'
Le variabili $user
e $pass
sono probabilmente sterilizzate rimuovendo o sfuggendo "
e / o '
. Ecco perché un attacco standard di ' or '1'='1
o simili non funziona.
Con l'iniezione, otterrai la seguente query:
SELECT * FROM users WHERE user = '\' AND pass = '||1#'
Poiché stai sfidando il '
dalla query, user
viene ora confrontato con ' and pass =
(che probabilmente valuterà a false
, poiché non esiste un utente di questo tipo). #
è un commento che taglia il resto della query, quindi ||1#'
valuta OR true
, che sarà vero. Il codice di autenticazione ora probabilmente preleverà il primo risultato di quella query, o controllerà se qualcosa è stato restituito, e quindi ti autenticherà.