为什么这个 SQl 注入只能与 AND ''=' 一起使用?

Why does this SQl injection only work together with AND ''='?

我正在 sqlzoo 上测试一些 SQL 东西。net/hack 我不明白为什么

' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '__w%') AND ''='

对 SQL 注入和

有效
' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '__w%')

不是。为什么要把这个放在最后

AND ''='

?

另外我猜想这些 SQL 注入非常 'old' 并且不会起作用。有更新的方法吗?有没有网站可以学习这个?

提前致谢。

因为你需要关闭'.

检查密码的代码可能是这样的:

"SELECT * FROM usersPassword where password = '" + TEXTINPUT + "';"

如果您想直接进去,' OR ''=' 就可以了。 完整的查询将是

"SELECT * FROM usersPassword where password = '' OR ''='';"

这是一个永远正确的条件。

网站上的例子做的更多。它会检查特定用户的密码,如果存在特定字符,您将知道您可以登录。

编辑:

在您的情况下,最终查询将是

"SELECT * FROM usersPassword where password = '' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '%w%') AND ''=''"

如果您不输入 AND

"SELECT * FROM usersPassword where password = '' OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '%w%')'" ----> 不关闭!

我认为这是因为它将连接到输入参数,这意味着您的第一个查询将是

OR EXISTS(SELECT * FROM users WHERE name='jake' AND password LIKE '%w%') A​​ND ''='' 或''='{somevalue}'

永远正确