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

新手上路,请多包涵

以下查询返回表 tbl_user 中的所有密码,但我不明白为什么会这样。

 SELECT password FROM tbl_users WHERE name = 'admin' OR 1=1 -- '

请帮助我理解这部分查询:’admin’ OR 1=1 – ‘

你能介绍其他类似的威胁(网站、书籍等)吗?

原文由 Daniyal Javani 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这是一个典型的 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

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

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

 SELECT pass from users WHERE user_name = 'admin' or (1=1) -- 'and permission='superadmin'

通常情况下,(如果 1=1 没有被注入),你会为具有管理员用户名和超级管理员权限的用户提取密码。您现在已将其注释掉,但未执行。这就是可以返回整个密码表的方式。

原文由 Andy 发布,翻译遵循 CC BY-SA 3.0 许可协议

逻辑 OR 的结果如下:

 a     | b     | a OR b
-----------------------
false | false | false
false | true  | true
true  | false | true
true  | true  | true

如果其中一个操作数为真,则 a OR b 的结果为真。

 1 = 1 evaluates to true

=>

 (any expression) OR 1 = 1 evaluates to true

=>

 name = 'admin' OR 1 = 1

对表的每一行求值为真

结果:

 SELECT password FROM tbl_users WHERE name = 'admin' OR 1=1 -- '

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

--

是sql注释的开始。

原文由 VMai 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题