SQL注入 基于布尔的盲注(less-5)

盲注

当不能像前面那样直接在网页中显示我们要的数据时就需要用到盲注,来得到数据库之类的名字。基于布尔的盲注就是通过判断语句来猜解,如果判断条件正确则页面显示正常,否则报错 ,这样一轮一轮猜下去直到猜对。是挺麻烦但是相对简单的盲注方式。

盲注猜解(less-5)

通过一些语句来猜数据库、表名等需要的信息。

1.猜数据库名长度:’ and length (database())=x(某个值,用大于或者小于某个值也可以)--+

【通过输入条件可以判断数据库名字的长度,当猜对时页面才会显示正常,已知数据库为security所以输入=8才会显示you are in…,如下图】

《SQL注入 基于布尔的盲注(less-5)》

2.猜数据库名(任何系统函数可以知道的内容,例如Mysql、操作系统版本号等):’ and left(database(),1)=’s’--+

【left用来取database()的前1位然后和外面的字符对比,如果正确则页面正常,不一定得是等于,前期用大于小于条件来判断会快点,然后继续把1改成2取前两位,则此时外面字符为’se’时将会发现页面显示正确,以此类推得到数据库名,如图】

《SQL注入 基于布尔的盲注(less-5)》

3.获取数据库下的表:' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) = 101--+

【这里database()与’security’等同,substr(a,b,c)作用将字符串a从第b位开始取c位数出来,这里用上面的left方法也是可以,ascii将其转换为ascii码,这里已知第一个表为emails,所以为e,对应ascii为101,所以当=101时页面显示正常,当然如果不用ascii则可以直接外面写=’e’,效果相同,但是这样区分不了大小写,转换成ascii猜可以区别。
如果要猜表的第二位则改成substr(x,2,1),这个时候就猜下一位的单字符,或者改成substr(x,1,2),这个时候就猜前两位的单字符,如图】

《SQL注入 基于布尔的盲注(less-5)》

《SQL注入 基于布尔的盲注(less-5)》

【接下来将要猜别的表的时候把limit后面的第一个数改一改就行,比如users表在第四个,那么就可以改成limit 3,1,如图】

《SQL注入 基于布尔的盲注(less-5)》

4.获取表里的列名: ' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^us[a-z]' limit 0,1)--+

【这里用select 1,当后面的列存在时返回1,不存在则返回空,从而可以和外面的=1匹配,如果用select 2则存在时返回2。通过已知的表名来猜表当中的列名,这里用regexp ‘X[a-z]’,猜列的前几位,猜第一位时候就’u[a-z]’发现正确,再下前两位’us[a-z]’以此类推…。猜表名列名等等都可以用上面的left和substr,但是这两个每要多确认一位数就得截取的长度加1,比较麻烦

5.获取表里列的内容: ' and ord(mid((select ifnull(cast(username as char),x(这里是错误返回值,只要不要给对的值,加啥都可以))from security.users order by id limit 0,1),1,1))=68--+

【ord跟ascii相同,mid(a,b,c)和substr相同,cast(X as b)将X转换成b数据类型,ifnull(a,b)作用为若a不为null则返回a,否则返回b,已知username列第一个数据为Dumb,所以第一位是D,即68】

    原文作者:dawsonenjoy
    原文地址: https://www.jianshu.com/p/127f3bc8df5c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞