我正在为我的公司应用程序测试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)会议暂停。
如果有人知道这个问题,我会非常感激。
答案 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中修改数据。