'admin'是什么意思OR 1 = 1 - '

Dan*_*yal 5 php mysql security sql-injection cracking

以下查询返回表tbl_user中的所有密码,但我无法理解为什么会发生这种情况.

SELECT password FROM tbl_users WHERE name = 'admin' OR 1=1 -- '
Run Code Online (Sandbox Code Playgroud)

请帮我理解这部分查询:'admin'OR 1 = 1 - '

你能介绍一下这样的其他威胁(网站,书籍等)吗?

And*_*ndy 9

这是一个经典的SQL注入.

在我解释它的时候看到这个小提琴:SQLfiddle

在此示例中,有5个用户被添加到表中.然后运行您的查询.预期的结果是仅返回admin用户的密码值.

但是,通过添加1=1,这是一个真实的语句,将返回所有密码.

另一种帮助可视化的方法是添加括号,以便您可以看到如何评估所有内容.

SELECT pass FROM users WHERE (user_name = 'admin')              OR (1=1) -- '
                                 ^ Pulls only the admin user        ^ Pulls everything because 1=1
Run Code Online (Sandbox Code Playgroud)

因此,我们从用户名所在的表中选择密码admin.我们也在从1 = 1的表中提取密码 - 这总是正确的.每行评估为true,因此返回所有密码.

最后-- '一个用于注释掉查询的其余部分.

SELECT pass from users WHERE user_name = 'admin' or (1=1) -- 'and permission='superadmin'
Run Code Online (Sandbox Code Playgroud)

通常,(如果1=1没有注入),您将使用user_name的admin和superadmin权限为用户提取密码.你现在已经评论过了,并没有执行.这是整个密码表的返回方式.


VMa*_*Mai 5

逻辑结果OR如下:

a     | b     | a OR b
-----------------------
false | false | false
false | true  | true
true  | false | true
true  | true  | true
Run Code Online (Sandbox Code Playgroud)

如果其中一个操作数为true,则OR b的结果计算结果为true.

1 = 1 evaluates to true
Run Code Online (Sandbox Code Playgroud)

=>

(any expression) OR 1 = 1 evaluates to true
Run Code Online (Sandbox Code Playgroud)

=>

name = 'admin' OR 1 = 1 
Run Code Online (Sandbox Code Playgroud)

对于表的每一行,求值为true

结果:

SELECT password FROM tbl_users WHERE name = 'admin' OR 1=1 -- '
Run Code Online (Sandbox Code Playgroud)

将返回所有用户的密码,不仅仅是管理员,因为正如PeeHaa所述

--
Run Code Online (Sandbox Code Playgroud)

是一个SQL注释的开头.