是否可以将sql注入删除语句?

时间:2011-07-15 10:46:13

标签: sql-server sql-injection

我建立了使用sql server的网站,并使用这个sql来删除来自querystring的id的项目:

DELETE FROM tablename WHERE GUID = 'param'

是否可以注入将返回db_name()的sql?

我知道我只能为这样的选择语句注入sql

select name from tablename where 'parems' 
union all
select db_name()

但是删除语句

呢?

我知道我可以将表插入到表中,但是在这个阶段我需要知道我是否可以得到一些数据,例如:db_name()

4 个答案:

答案 0 :(得分:5)

不确定。这个参数值:

' OR ''='

将导致此声明:

DELETE FROM tablename WHERE GUID ='' OR '' = ''

将删除表格中的所有数据。

答案 1 :(得分:1)

是的,查询总是返回结果,因此如果数据库驱动程序允许,您只需在删除后添加另一个查询。

像这样的输入:

x'; select db_name() --

会给:

DELETE FROM tablename WHERE GUID = 'x'; select db_name() --'

答案 2 :(得分:0)

您应该阅读wiki& SQL注入MS docs

答案 3 :(得分:0)

我认为你的问题是否可能使用纯粹的删除声明。如果是这样,可以通过添加OUTPUT clause来实现:

DELETE Sales.ShoppingCartItem
OUTPUT DELETED.* 
WHERE ShoppingCartID = 20621;

这将输出删除行。

要避免SQL注入,您应该使用SQL参数