假设我有一个接受用户输入的多行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是来自前端的实际输入,在两个通配符之间使用。
由于OR语句,在用户输入为' DROP TABLE USERS; --的情况下运行此代码将出错。
此查询是否可通过SQL注入进行拆分?
发布于 2019-05-24 12:09:25
是的,这是可能的,你只是需要更多的创造性。攻击者只需尝试更多的内容并查看错误(或页面输出,通过创建目标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 ('' = '%'
) 在句法上是有效的,在可怜的鲍比桌子上犯了四次杀人罪。注意,我们在这里甚至不需要注释;适当地匹配分隔符就足够了。
发布于 2019-05-24 12:12:51
这是一个很好的问题,是基于一些非常普遍的误解。
有两件事,可能的注入和实际的开发,这是非常重要的,不要混淆它们。
如果您不能想出一个有用的漏洞,这并不意味着注入不存在。确实如此。一旦这样做了,就会发现这样或那样的剥削。至于您的查询是多行的,还是允许注释,还是不允许某些字符或任何其他限制,这一点都不重要。功绩的数量是无限的,如果一千个功绩不能发挥作用,一千个第一个就行了。
因此,现在您可以知道,( in )著名的' DROP TABLE USERS;利用的不是SQL注入的同义词。这只是无数可能的利用之一。
此外,虽然并不是每个API都允许执行多个查询,所以在查询中使用分隔符总是会产生语法错误,但并不意味着查询是安全可靠的。即使不可能通过SQL注入运行数据修改查询,也不意味着没有任何危害。获取未经授权的数据的漏洞可能比删除表更有害。
那么,从这个咆哮中得到的是什么呢?
是的,此查询可通过SQL、进行拆分,从而带来致命的后果。
从开发人员的角度来看,您并不关心哪些特定的漏洞是可能的。您应该始终修复注入,整个可能性,而不是某些您所知道的特定漏洞。为此,您永远不会让任何外部数据进入您的查询,就像这样简单。
https://stackoverflow.com/questions/56292129
复制相似问题