首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在多行查询上运行SQL注入攻击吗?

可以在多行查询上运行SQL注入攻击吗?
EN

Stack Overflow用户
提问于 2019-05-24 11:52:22
回答 2查看 1K关注 0票数 0

假设我有一个接受用户输入的多行SQL查询。是否可以通过注释中断使用标准SQL注入?

这是针对Microsoft SQL Server查询的,该查询通过Loopback API接受用户输入。由于相同的用户输入在多个点中使用,我似乎无法编写一个创建有效SQL查询来运行注入攻击的输入。

经修订的守则:

代码语言:javascript
复制
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是来自前端的实际输入,在两个通配符之间使用。

由于OR语句,在用户输入为' DROP TABLE USERS; --的情况下运行此代码将出错。

此查询是否可通过SQL注入进行拆分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-24 12:09:25

是的,这是可能的,你只是需要更多的创造性。攻击者只需尝试更多的内容并查看错误(或页面输出,通过创建目标SELECT),就可以很容易地推断出查询的形状。如果我们将userinput设置为

代码语言:javascript
复制
'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '

最后,我们得到一个如下所示的查询:

代码语言:javascript
复制
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 ('' = '%'
) 

在句法上是有效的,在可怜的鲍比桌子上犯了四次杀人罪。注意,我们在这里甚至不需要注释;适当地匹配分隔符就足够了。

票数 5
EN

Stack Overflow用户

发布于 2019-05-24 12:12:51

这是一个很好的问题,是基于一些非常普遍的误解。

有两件事,可能的注入和实际的开发,这是非常重要的,不要混淆它们。

  • SQL注入是根据用户输入更改SQL程序代码的可能性。只是有可能。
  • 实际的发现是..。实际利用漏洞,执行某些操作以更改数据库中的数据或检索atacker不应该访问的某些数据的有效负载。

如果您不能想出一个有用的漏洞,这并不意味着注入不存在。确实如此。一旦这样做了,就会发现这样或那样的剥削。至于您的查询是多行的,还是允许注释,还是不允许某些字符或任何其他限制,这一点都不重要。功绩的数量是无限的,如果一千个功绩不能发挥作用,一千个第一个就行了。

因此,现在您可以知道,( in )著名的' DROP TABLE USERS;利用的不是SQL注入的同义词。这只是无数可能的利用之一。

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

那么,从这个咆哮中得到的是什么呢?

是的,此查询可通过SQL、进行拆分,从而带来致命的后果。

从开发人员的角度来看,您并不关心哪些特定的漏洞是可能的。您应该始终修复注入,整个可能性,而不是某些您所知道的特定漏洞。为此,您永远不会让任何外部数据进入您的查询,就像这样简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56292129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档