INSERT上的SQL注入

时间:2011-01-04 12:28:29

标签: sql mysql sql-injection

我正在为我的公司应用程序测试Vulnerabiltys到SQL Injections作为它的实习生。

所以我发现,应用程序确实容易受到注入,因为我可以改变一些插入语句。

所以我将insert语句改为:

INSERT INTO tablename( column, column1, column2, column3, column4,column5, column6, column7, column8 ) 
VALUES ( 10965972, 185796154, 25, 23,2023, '', CURRENT_DATE, 'v0201100',
18); 

DELETE * 
  FROM tablename;-- , 2023,'a', CURRENT_DATE, 'v0201100', 18 )

我认为这应该是一个正确的声明,但MySQL服务器返回此错误: MySQL错误:1064(您的SQL语法中有错误; [...]

如果有人可以提供帮助并告诉我为什么语法错误会很好......

感谢您的帮助: - )

编辑: 谢谢你的所有答案。 :)不幸的是*不是问题。 我尝试在没有删除部分的情况下执行语句(语句由php执行) 所以声明如下:

[...] VALUES(10963455,182951959,23,23,2023,'',CURRENT_DATE,'v0201100',18) - ,2023,'',CURRENT_DATE,'v0201100',18)

但即使这样,MySQL服务器也返回了相同的错误。 这是完整错误消息:

  

MySQL错误:1064(您有错误   在你的SQL语法中;检查手册   对应于您的MySQL服务器   用于正确语法的版本   靠近' - ,2023,'',CURREN'在线   17)会议暂停。

如果有人知道这个问题,我会非常感激。

7 个答案:

答案 0 :(得分:5)

查看MySQL spec for DELETE,没有任何迹象表明您可以立即包含*继续执行DELETE语句。尝试删除它。

select语句中使用*来选择所有列。在这里指定它是没有意义的,因为你要删除行。

我相信解析器会忽略--注释掉的行(我当然希望它会被忽略),所以这段代码应该没问题。如有疑问,请将其作为测试删除。

答案 1 :(得分:4)

如果在 SINGLE ->query()调用中执行该查询样本块,则MySQL的驱动程序不允许在单个查询调用中进行多个查询。它消除了bobby tables类型的注入攻击,但不会阻止注入会操纵where子句等等的值。

答案 2 :(得分:0)

当我在多行上拆分你的sql语句时使用;作为分隔符,我得到:

1)VALUES(10965972,185796154,25,23,2023,'',CURRENT_DATE,'v0201100',18);
2)DELETE * FROM tablename;
3) - ,2023,'a',CURRENT_DATE,'v0201100',18)

对我来说,3)对我来说看起来不像是有效的SQL ...

答案 3 :(得分:0)

如果没有delete语句,MySQL不允许where查询。您可以使用:

DELETE * FROM tablename WHERE 1 = 1

您可能还必须在*之后删除delete,它看起来不像MySQL支持的那样。

答案 4 :(得分:0)

@freddy:DELETE * FROM tablename应为DELETE FROM tablename

答案 5 :(得分:0)

DELETE语句的ANSI SQL定义不包含asterix *

尝试,DELETE FROM tablename

答案 6 :(得分:-1)

此外,您正在使用SQL注入。 SQL-Injections在您公司可能出现的原因是秘密(只是使用preapred语句),但这不是问题。大多数SQL注入是由使用mysql_query()而不进行过滤/转义引起的。 mysql_query()只允许1个查询。必须有mysql_multi_query(),如果这应该工作。 MySQL禁止在SELECT-Statements中修改数据。