是否可以对多行​​查询运行 SQL 注入攻击?

Dan*_*C12 0 sql-server sql-injection

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

这是针对通过环回 API 接受用户输入的 Microsoft SQL Server 查询。因为在多个位置使用相同的用户输入,我似乎无法编写一个输入来创建有效的 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%'
            ) 
Run Code Online (Sandbox Code Playgroud)

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

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

这个查询是否可以通过 SQL 注入破坏?

Jer*_*ert 5

是的,这是可能的,您只需要多一点创造力。攻击者可以通过尝试更多内容并查看错误(或通过制作目标SELECTs的页面输出)轻松推断出您的查询的形状。如果我们设置userinput

'); DROP TABLE [BobbyTables]; SELECT 1 FROM Table_Name WHERE ('' = '
Run Code Online (Sandbox Code Playgroud)

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

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 ('' = '%'
) 
Run Code Online (Sandbox Code Playgroud)

这在语法上是有效的,并且在糟糕的 Bobby Tables 上犯下了四重杀人罪。注意我们这里甚至不需要注释;正确匹配分隔符就足够了。