这两种简单的SQL注入攻击如何工作?

问题描述 投票:-2回答:2

我是一名软件开发人员,开始研究应用程序安全性,并且与SQL注入相关的问题与以下内容有关。

我正在观看视频课程,并且有以下两个示例:

1)我有一个不安全的SQL查询,如下所示:

txtSql = "SELECT * FROM Users WHERE UserId = " + txtUserId

如果传递的txtUserId值类似于99 OR 1 = 1

我将获得这样的查询

SELECT * FROM Users WHERE UserId = 99 OR 1 = 1

这将返回我Users表中包含的记录的整个列表,因为1 = 1始终为true,而OR串联将返回true,因此类似于此查询:

SELECT * FROM Users WHERE TRUE

返回了整个记录列表。这个推理正确吗?

2)然后有第二个更复杂的示例:

有一个用户登录表单(用户名和密码)。该表格的后面是这种不安全的查询实现:

sql = 'SELECT * FROM USERS WHERE Name = "' + uName + '" AND Pass = "' + uPass + '"'

如果用户在登录表单中插入以下数据,则很好:

uName = " OR ""="
uPass = " OR ""="

结果查询将是:

SELECT * FROM Users WHERE Name = "" OR ""="" AND Pass = "" OR ""=""

因此它正在选择记录,其中

  • [Name字段为空(“”)或等于“ =”(并且此条件应始终为false,因为拥有空的用户名或类似“ =“)。

  • Pass字段为空(“”)或等于“ =”(并且此条件应始终为false,因为拥有空密码或类似“ =”的密码非常奇怪“)。

所以我们有这样的信念:

WHERE FALSE AND FALSE

这里是我的疑问:假与假=假

为什么说这个查询返回我用户表记录的整个列表?

如果我很好地理解了逻辑,则先前的查询应以如下形式翻译:

SELECT * FROM Users WHERE FALSE AND FALSE

我的推理有什么问题?我想念什么?

sql security sql-injection owasp penetration-testing
2个回答
2
投票

布尔逻辑的优先顺序是非与或,因此您要求

WHERE Name = "" OR (""="" AND Pass = "") OR ""=""

现在您得到

WHERE FALSE OR FALSE OR TRUE

导致TRUE agian


0
投票

告诉我,是"blank"="blank"吗?如果您的评论为“是”,那是您的答案。

© www.soinside.com 2019 - 2024. All rights reserved.