可以对多行​​查询进行SQL注入攻击吗?

时间:2019-05-24 11:52:23

标签: sql-server sql-injection

假设我有一个多行SQL查询,该查询接受来自用户的输入。是否可以通过注释破坏使用标准SQL注入?

这是针对Microsoft SQL Server查询的,该查询通过Loopback API接受用户输入。因为在多个位置使用了相同的用户输入,所以我似乎无法编写创建有效SQL查询以运行注入攻击的输入。

已编辑代码:

SELECT Field_Name
FROM Table_Name
WHERE  Field_Name != 'Hardcoded Value' AND (
                Field_1 LIKE '%userinput%' OR
                Field_2 LIKE '%userinput%' OR
                Field_3 LIKE '%userinput%' OR
                Field_4 LIKE '%userinput%'
            ) 

请注意,userinput是前端的实际输入,用在两个通配符之间。

使用以下用户输入运行此代码 ' DROP TABLE USERS; -- 会由于OR语句而出错。

此查询是否可以通过SQL注入打破?

2 个答案:

答案 0 :(得分:4)

是的,有可能,您只需要更多的创造力即可。攻击者可以通过尝试更多的工作并查看错误(或通过设计目标SELECT来生成页面输出)来轻松推断查询的形状。如果我们将userinput设置为

'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '

我们最终得到如下查询:

SELECT Field_Name
FROM Table_Name
WHERE  Field_Name != 'Hardcoded Value' AND (
    Field_1 LIKE '%'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '%' OR
    Field_2 LIKE '%'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '%' OR
    Field_3 LIKE '%'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '%' OR
    Field_4 LIKE '%'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '%'
) 

这在语法上是有效的,并且对可怜的Bobby Tables犯下了四重杀人罪。请注意,这里我们什至不需要评论;正确匹配分隔符就足够了。

答案 1 :(得分:1)

这是一个很好的问题,它基于一些极端常见的误解

有两件事,可能的注入实际利用,重要的是不要混淆它们。

  • SQL注入是根据用户输入更改SQL程序代码的可能性。只是可能性。
  • 实际漏洞利用是……实际漏洞利用,是执行某些操作的有效载荷,这些操作可能会更改数据库中的数据或检索攻击者不应该访问的某些数据。

如果您无法提出有用的利用程序,则并不意味着该注入不存在。是的一旦这样做,就会以这种方式或另一种方式发现漏洞。至于您的查询是多行查询还是允许注释或禁止某些字符或任何其他限制绝对不重要。漏洞利用的数量是 infinite ,如果一千个漏洞利用不了,那么前千个漏洞利用就可以了。

因此,您现在可以说(著名的)induction HS漏洞利用不是SQL注入的同义词。它只是无限数量可能的利用之一。

此外,尽管并非每个API都允许您执行多个查询,所以在查询中使用定界符总是会产生语法错误,这并不意味着您的查询是安全可靠的。即使不可能通过SQL注入运行数据修改查询,也并不意味着没有危害。可以获取未经授权的数据的漏洞可能比删除表更为有害。

那么,这只蚂蚁的收获是什么?

是的,该查询可以通过SQL注入来破坏,会带来致命的后果。

从开发人员的角度来看,您并不关心哪些特定的漏洞利用是可能的。您应该始终修复注入问题,包括所有可能的问题,而不是您意识到的某些特殊利用。为此,您绝不会像这样简单地让任何外部数据进入查询。