错误和布尔与基于时间的盲注之间的区别?

时间:2019-03-08 09:11:36

标签: question2answer question-answering

我正在寻找基于错误的SQL注入基于布尔的盲注入基于时间的盲注入之间的区别,但找不到合适的方法这些SQL错误的区别。如果有人可以举例说明,那将是很大的帮助。

1 个答案:

答案 0 :(得分:0)

基于错误的SQL注入: 有时,我们不能仅通过使用UNION命令来利用SQL注入漏洞。这可能是由于进行了一些安全检查或由于代码的复杂性。因此,为了执行基于错误的SQL注入,我们使网站抛出SQL错误,从而可以提取关键信息。现在,不同的数据库服务器使用不同的方法执行基于错误的SQL注入,因为它们抛出的错误本质上是不同的。

为了更好地理解,让我们看下面的示例:

在Microsoft SQL Server中,有一个称为convert()的SQL函数,该函数用于将第二个参数转换为第一个参数中给定的数据类型。 看一下语法:convert(,)

这意味着,如果我们使用convert(int,'145'),则输出将为145。 但是,如果我们尝试转换不是有效数据类型的值,例如convert(int,‘abcd’),该怎么办 如您所料,服务器将抛出错误消息: “无法将字符串“ abcd”转换为整数”

因此,我们的动机是执行SQL注入。这意味着,我们要求SQL Server而不是使用convert(int,’abcd)来转换(int,db_name())。如您所知,db_name()与database()相同,并且假定数据库名称为“ secret_database”。如果我们尝试对其进行转换,则服务器将抛出错误消息: “无法将'secret_database'转换为int”

现在,如果网站引发显示SQL错误的消息,则意味着我们绝对可以在此处执行SQL注入。使用SQL注入,我们可以轻松地检索数据库的名称。一旦知道了数据库名称,我们就可以轻松地获取表,列的名称以及最终的数据。这些SQL注入称为基于错误的SQL注入,其中当Web应用程序抛出SQL错误时,我们将执行SQL注入。

基于布尔的盲注: 要了解注射剂,我们将其分为“布尔+盲注”。 因此,布尔值在编程方面仅表示True或False。这意味着,在执行这些注入时,我们可能会要求服务器以真或假来响应我们。 现在,第二部分是盲注或盲SQL注入。顾名思义,这些注入用于成功获取关键数据但无法以某种方式在网站上看到提取的数据的位置(因此,名称为blind),这可能归因于网站的构建方式。 因此,将这两个部分结合起来,在基于布尔的盲注中,我们通过询问服务器对还是错问题来执行SQL注入,并在响应的基础上提取关键信息。 让我们看下面的例子: 假设,如果我们要从网站获取学生的姓名,我们将仅使用此SQL查询

从id = 121的学生中选择姓名

输出将是ID为121的学生的姓名。

现在,要执行基于布尔的盲注,我们使用AND运算符。在下面的查询中,我们使用了基于布尔的盲注获取学生的姓名。

从id = 121 AND 1 = 1 +的学生中选择姓名

由于1等于1 us普遍成立,因此输出将获取学生的姓名。因此,这种注入与其他注入有何不同,因为我们只是以不同的方式提取相同的信息。 好吧,如果我们改为使用此查询呢?

从id = 121 AND 1 = 0 ++的学生中选择姓名

现在,1永远不能等于零,这意味着输出将为空白。因此,在这种情况下,基于布尔的盲注会起作用。查询如下所示:

从id = 121 AND(get_first_character_of(password))=‘a’-+

的学生中选择姓名

仔细看看,这次我们要求服务器告诉我们第一个字符为“ true”或“ false”。如果输出显示学生姓名,则表示密码以“ a”开头,我们可以采用类似的方式进一步获取完整密码,如果没有输出,则表示密码必须以其他字母开头。这就是执行基于布尔的盲注的方式。

基于时间的盲注: 这些注入用于我们无法通过使用基于UNION或ERROR的SQL注入来提取数据并且不能向网站提问True或False的情况。因此,为了提取关键信息,我们会篡改服务器响应时间。 每当对服务器提出请求时,都会花费一些时间来获取信息并将其交付给我们,这称为响应时间。现在,如果我们篡改此响应时间,则可以提取一些关键信息。

基于时间的盲注的语法类似于基于布尔的盲注。看一下基于时间的盲注查询。

从ID = 121 AND(如果密码的第一个字符='a'然后睡眠10秒钟)的学生中选择姓名-+

在这里,您可以看到,我们正在要求服务器告诉我们密码的第一个字符。如果密码从“ a”开始,则服务器将休眠10秒钟,这意味着响应时间将增加10秒钟。而且,如果密码不是以“ a”开头,则服务器将采用通常的响应时间。以类似的方式,我们可以预测整个密码。这就是执行基于时间的盲注的方法。

使用这种注射剂有很多缺点。首先,您可以看到,每次我们向服务器发出请求时,它都会休眠10秒钟。这意味着该注射将花费大量时间。其次,响应时间还取决于互联网的速度。如果两者之间的连接断开,则会增加响应时间,从而导致错误的结果。