La consulta en cuestión probablemente se parece a esto:
SELECT * FROM users WHERE user = '$user' AND pass = '$pass'
Las variables $user
y $pass
probablemente se desinfectan eliminando o escapando a "
y / o '
. Es por eso que un ataque estándar de ' or '1'='1
o similar no está funcionando.
Con su inyección, obtendrá la siguiente consulta:
SELECT * FROM users WHERE user = '\' AND pass = '||1#'
A medida que escapa '
de la consulta, user
ahora se compara con ' and pass =
(que probablemente se evaluará como false
, ya que no existe tal usuario). #
es un comentario que corta el resto de la consulta, por lo que ||1#'
se evalúa como OR true
, lo cual será cierto. Ahora es probable que el código de autenticación obtenga el primer resultado de esa consulta, o verifique si se devolvió algo y, por lo tanto, se autentique.