2014-09-26 65 views
2

今天凌晨以来,我们在电子商务商店中搜索以下搜索查询。我了解它的SQL注入。我们也使用参数化查询。所以它没有造成任何伤害。但由于查询的长度,全文搜索需要时间来处理,并最终超时和网站暂停一段时间。商店搜索中的SQL注入模式

立即,我已经限制最大租船人搜索到75,并添加逻辑来检测SQL注入并防止它到达sql server作为额外的安全。

我们的环境: ASP.Net电子商务网站 带有全文搜索的SQL Server 2012 Express数据库。 Windows 2012标准服务器。

只是想知道什么搜索人试图理解/学习?或者他们只是想挂网站?上述修复后忽略是安全的吗?

搜索条件如下。 “输入型号或墨盒代码”是我们默认的搜索文本框文本。 (28)=(SELECT UPPER(XMLType(CHR(60)|| CHR(58)|| CHR(113)|| CHR(112)|| CHR(97)||)。 CHR(119)|| CHR(113)||(选择(CASE WHEN(2895 = 2895)THEN 1 ELSE 0 END) (INT,(SELECT CHAR()(CHR(121)|| CHR(113)|| CHR(62)))FROM(9170 = 9170

输入型号或Cartridge Code')AND 3733 = CONVERT + CHAR(113)+ CHAR(104)+ CHAR(106)+ CHAR(113)+(SELECT(CASE WHEN(3733 = 3733)THEN CHAR(49)ELSE CHAR(48)END))+ CHAR )+(CHAR(106)+ CHAR(113)+ CHAR(107)+ CHAR(113)))和('KzHP'='KzHP

输入型号或Cartridge Code%'AND(SELECT 2396 FROM COUNT(*),CONCAT(0x7170617a71,( SELECT(CASE WHEN(2396 = 2396)THEN 1 ELSE 0 END)),0x7177637971,FLOOR(RAND(0)* 2))x FROM INFORMATION_SCHEMA。CHARACTER_SETS GROUP BY x)a)AND'%'='

输入型号或Cartridge Code%'AND 4201 = CONVERT(INT,(SELECT CHAR(113)+ CHAR(112)+ CHAR(97)+ CHAR (119)+ CHAR(119)+ CHAR(119)+ CHAR(113)+(SELECT(CASE WHEN(4201 = 4201)THEN CHAR(49)ELSE CHAR (112)+ CHAR(113)))AND'%'='

输入型号或Cartridge Code')AND 6442 = CAST((CHR(113)|| CHR(112)|| CHR(97)| | CHR(122)|| CHR(113))||(SELECT(CASE WHEN(6442 = 6442)THEN 1 ELSE 0 END)):: text ||(CHR(113)|| CHR(119)|| CHR (INT,(SELECT CHAR(113)|| CHR(121)|| CHR(113))ASNUMICIC) + CHAR(113)+ CHAR(104)+ CHAR(106)+ CHAR (113)+(SELECT(CASE WHEN(3733 = 3733)THEN CHAR(49)ELSE CHAR(48)END))+ CHAR(113)+ CHAR(106)+ CHAR(113)+ CHAR(107)+ CHAR 113))) - ZgIZ

输入型号或盒代码)和6442 = CAST((CHR(113)|| CHR(112)|| CHR(97)|| CHR(122)|| CHR( (119))||(SELECT(CASE WHEN(6442 = 6442)THEN 1 ELSE 0 END)):: text ||(CHR(113)|| CHR(119)|| CHR(99)|| CHR(121) (CHR(113))AS NUMERIC)AND(8167 = 8167

输入型号或Cartridge Code AND 3733 = CONVERT(INT,(SELECT CHAR(113)+ CHAR(113)+ CHAR(104)+ CHAR (106)+ CHAR(113)+(SELECT(CASE WHEN(3733 = 3733)THEN CHAR(49)ELSE CHAR(48)END))+ CHAR(113)+ CHAR(106)+ CHAR(113)+ CHAR 107)+ CHAR(113)))

输入型号或碳粉盒C (112)CHR(97)|| CHR(122)|| CHR(113))||(SELECT(CASE WHEN(6442)= 6442)THEN 1 (113))CHR(119)|| CHR(99)|| CHR(121)|| CHR(113)) - CuDa

+0

我喜欢你的问题:) – Fka 2014-09-26 06:56:38

回答

4

作为一名SQL注入专家,似乎这些只是通用查询来了解SQL注入是否存在,以及它是哪种数据库类型。 您可以看到,在某些情况下,他使用CHR(Oracle的版本号用于char到char),而在其他情况下,他使用CHAR作为其他DB的函数名称(SQL Server),在另一种情况下,他提到了INFORMATION_SCHEMA。 CHARACTER_SETS表是MySQL中的表。 他只是发送几个常规查询来查找注入和数据库类型。 尽管如此,如果你的网站挂了这个,你应该执行一些更好的输入验证的特殊字符(括号?)除了长度验证

+0

这是一个很好的捕获。感谢上帝,从那时起我们再也没有做任何尝试。 – Jeyara 2015-01-21 22:32:02

+0

欢迎:) 我建议您添加一些基于白名单的输入验证,并仅包含字母和数字等必需字符,以防止您的全文查询变得疯狂。如果您需要任何特殊字符作为业务需要,请将其包含在您的白名单当然。 – 2015-01-21 22:37:23