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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了误差与布尔和基于时间的盲注射之间的区别?相关的知识,希望对你有一定的参考价值。

我正在寻找基于错误的SQL注入和基于布尔的盲注射和基于时间的盲注射之间的区别,但无法找到这些SQL错误的正确差异。如果有人能用一些例子来解释那将是一个很大的帮助。

答案

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

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

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

这意味着,如果我们使用convert(int,'145'),输出将是145.但是,如果我们尝试转换一个非有效数据类型的值,如此转换(int,'abcd')当你可能已经预料到,服务器会抛出错误说:“无法将字符串'abcd'转换为int”

所以,我们的动机是执行SQL注入。这意味着,我们要求SQL服务器转换(int,db_name()),而不是使用convert(int,'abcd)。如您所知,db_name()与database()相同,并假设数据库名称为“secret_database”。如果我们尝试转换它,服务器将抛出错误说:“无法将'secret_database'转换为int”

现在,如果网站抛出显示SQL错误的消息,这意味着我们肯定可以在这里执行SQL注入。使用SQL注入,我们可以轻松检索数据库的名称。一旦数据库名称已知,我们就可以轻松获取表,列的名称以及最终的数据。这些SQL注入称为基于错误的SQL注入,当Web应用程序抛出SQL错误时,我们执行SQL注入。

基于布尔的盲注射:要理解注射,让我们将其分解为布尔+盲注射。因此,布尔在编程方面只是意味着真或假。这意味着,在执行这些注入时,我们可能会要求服务器以真或假的方式回复我们。现在,第二部分是盲注射或盲注SQL注射。顾名思义,这些注入用于我们能够成功获取关键数据的地方,但不知何故,提取的数据在网站上是不可见的(因此,名称为盲),这可能归因于网站的构建方式。因此,结合这两个部分,在基于布尔的盲注射中,我们通过询问服务器真或假问题来执行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注入提取数据的情况,并且既不能将网站问题视为真或假。因此,为了提取关键信息,我们会篡改服务器响应时间。每当向服务器发出请求时,都需要一些时间来获取信息并将其传递给我们,这称为响应时间。现在,如果我们篡改这个响应时间,我们可以提取一些关键信息。

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

从id = 121 AND的学生中选择姓名(如果密码的第一个字符='a',则休眠10秒) - +

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

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

以上是关于误差与布尔和基于时间的盲注射之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

残差和误差有啥区别?

“混蛋注射剂”和“穷人注射剂”的真正区别是啥

测量不确定度与测量误差的区别与联系?

Ruby 中的布尔表达式 - or 和 || 之间的区别[复制]

T检验与F检验的区别

SQLMAP自动注入