Sql注入之注入点类型和是否存在注入判断
SQL注入之判断注入类型
注入类型分为数字型和字符型和搜索型
例如数字型语句:select * from table where id =3,则字符型如下:select * from table where name=’admin’。可见在测试时需要添加引号去闭合参数时才能使页面返回正确的是字符型注入,不需要添加的是数字型注入。
1.数字型直接带入查询:
select * from <表名> where id = x and 1=1
select * from <表名> where id = x and 1=2
2.字符型需闭合后带入查询:
select * from <表名> where id = ‘x‘ and ‘1‘=‘1‘
select * from <表名> where id = ‘x‘ and ‘1‘=‘2‘
3.搜索型:
一般出现在查询搜索处,要进行搜索型注入,我们还得了解一下sql数据查询中where子句使用Like操作符的知识,Like操作符所起的作用就是模糊查询,要使用Like进行模糊查询必须还要配合通配符才能完成,”%”就是Like操作符中的一种通配符,它代表零个或多个任意字符,为了大家理解,为大家举了一些例子:
Like ‘sina%‘ //返回以sina开始的任意字符
Like ‘%sina‘ //返回以sina结尾的任意字符
Like ‘%sina%‘ //返回以包含sina的任意字符
a%’ and 1=1 -- 正常
a%’ and 1=2 -- 错误
SQL注入之判断是否存在注入
1.显错注入的判断方法
如这么一个网站www.example.com/index.php?id=1,首先第一步我们先进行是否存在注入的判断,先在数字1后加单引号 ‘,若页面处错,则存在Sql注入,但注入点是否可利用还和服务端代码和服务器配置息息相关(如过滤一些危险函数或者限制参数的长度时就不可以利用)。其次还可以使用逻辑符号来判断是否存在注入,参数后加and 1=1和and 1=2,若and 1=1页面返回正常,and 1=2返回错误时,则存在Sql注入(这是Sql语法运算符的特点,SQL AND & OR 运算符如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。),否则不一定存在注入。 同理也可以使用or来判断是否存在注入。需要注意的是,我们需要根据注入点的类型来判断是否需要在整个参数中添加注释符或引号。
2.不显错的判断方法
在单引号and和or下都不报错时,也可能存在注入,由于服务器可能配置在参数错误时依然返回原有页面,这样即使存在注入页面也不会发生变化了。我们可利用页面返回时间来判断是否存在注入,如and if(1=0,1, sleep(10)),注意是否需要使用单引号或者注释符。不同的数据库有不同的延时函数,需要结合具体情况来使用。