SQL盲注零基础教程 | SQL注入技巧
作者:FancyPig | 发布时间: | 更新时间:
相关阅读
视频讲解
本期视频将带你探索一个网络安全世界里的神秘角落——SQL盲注攻击!这可不是你熟悉的那种普通SQL注入,而是一种更加隐蔽、复杂的技术。
想象一下,你在黑暗中摸索着数据库,而不让网络应用感知到你的存在。这就是SQL盲注!它的特点在于攻击者无法直接看到结果,而是通过观察应用程序的响应或行为来获取信息。
虽然这种攻击方式可能会比较慢,但它却悄无声息地进行,让你在漏洞赏金狩猎中大展身手。本期视频将教你如何发现和利用SQL盲注漏洞,让你的网络安全技能再上一层楼!
我们将深入探讨基于布尔的攻击和基于时间的攻击,让你了解如何根据不同的应用程序行为来找出隐蔽的注入点。
图文讲解
SQL注入攻击是网络应用程序安全中一个著名的漏洞。它们涉及将恶意的SQL代码注入到Web应用程序中,以操纵数据库查询。但今天我们谈论的不是任何老式的SQL注入。我们正在探索更加隐蔽和复杂的SQL盲注技术。

不像经典的注入技术,攻击者可以直接看到他们的攻击结果,SQL盲注是有点不同。

盲目(blind)方面是指攻击者注入恶意的SQL代码,而没有从网络应用中得到直接的响应或错误。本质上,我们是在盲目地浏览数据库。那么,为什么这很重要,你可能会问?嗯,即使一个应用程序可能不会透露信息,我们仍然可以通过发送特定的请求和观察应用程序的响应或行为来检索数据。这种类型的攻击由于其迭代的性质,可能会比较慢,但它也比较微妙,因此经常会在雷达下溜走,如果你在做漏洞赏金的话,它是一个很好的漏洞来狩猎。在本视频结束时,你将对如何发现和利用SQL盲注漏洞有一个很好的理解。和往常一样,如果你喜欢这个视频,别忘了点赞和订阅。让我们深入了解一下。在潜入演示之前,让我们再探讨一下理论。由于我们没有得到直接的回应,我们从应用程序查询回来的数据,我们需要依靠应用程序的行为。而有两种主要技术来实现这一点。

基于布尔的攻击,也就是真假语句,和基于时间的攻击。所以延迟五秒,十秒,比如说。在基于布尔的攻击中,我们将发送SQL查询,这些查询将导致不同的页面内容或应用程序的响应,取决于查询是否确实为真或假。

基于时间的盲注攻击依赖于发送SQL查询,迫使数据库在响应之前等待一段特定的时间。
通过观察服务器响应所需的时间,我们可以推断出注入的有效载荷是真的还是假的。

关于盲SQL盲注,需要记住的几件事是,它们通常很耗时,需要有深厚的SQL知识。通常你需要能够知道或列举出基础数据库的结构。而自动化或脚本就非常方便了。我应该花点时间说,像SQLmap这样的工具可以使寻找和利用盲目的漏洞成为一个非常容易和快速的过程。但在有些情况下,这些工具是不起作用的。例如,任何基本的网络应用程序防火墙或没有匹配有效载荷的新颖SQL查询都会导致你的攻击失败。让我们来看看一个实际的例子。所以在这里,我们在我们脆弱的应用程序。

当我们在做网络应用程序渗透测试时,我经常谈到的东西是寻找奇怪的行为。我马上就能看到,当我们刷新这个应用程序时,我们得到了这个欢迎回来的消息,而这个消息以前并不在这里。

尤其是SQL盲注,像这样显示行为变化的东西,所以无论消息是在那里还是不在那里,都可以帮助我们验证真假声明。因此,让我们仔细看看,看看我们是否可以验证这个注入点。我将来到burpsuites,清除历史,再次刷新这个页面。然后到这里来,CTRL + R来发送中继器。

这里我们就可以开始了。所以我准备发送这个。而我们得到的回复是11451。

如果我搜索欢迎回来的信息,你可以看到在右下角,我们有一个匹配。

在这里,我们有它。所以在这种情况下,如果我们搞乱了这个跟踪cookie,那么比如说,我只是要添加一个单引号来尝试打破SQL。我们发送这个,实际上我们得到了零匹配。

所以我们没有得到欢迎回来的信息。所以接下来,我们要验证一下,我们是否真的能从中得到可靠的真假语句。如果我们不知道底层数据库是什么,我们可能需要尝试一些不同的有效载荷。因此,看一看SQL速查表,了解 Oracle、Postgres、MySQL和SQL Server之间的区别,确实会对你有所帮助。 所以我所要做的就是加一等于一。

而这应该返回一个真实的语句。所以我们得到我们的匹配,因为应用程序已经找到了跟踪cookie。而且一等于一也是真的。而如果我们尝试和1等于2,并再次发送同样的东西,我们看到,我们得到了零匹配。

所以在这里我们已经验证了确实有SQL盲注。现在,有几种方法可以从这里进行。这取决于你已经有多少信息,正如我之前提到的。但回到这里的说明,我们确实有一点关于表的信息,那就是用户,列,用户名和密码。而我们要找的是管理员用户(administrator)。

所以我们可以继续这个目标。在其他情况下,我们可能需要对表和列名做一些列举。所以让我们验证一下用户管理员是否真的存在于用户表中。要做到这一点,我所要做的就是保持我的结束语。我将select一个单字符,比方说'a',from users where username='administrator',像这样。然后我希望这个选择语句等于‘a'。


再一次,我们可以做的是通过改变这个来验证我们的真假语句。所以如果我把它改成'b',那么从用户中选择'b',其中用户名等于管理员。然后把这个和'a'比较,我们会得到一个错误的声明。但由于它们匹配,我们应该得到欢迎回来的消息。而我们确实在这里得到了欢迎回来的信息。再次,我们可以看到,在角落里有一个匹配。所以我们接下来要做的是逐个验证管理员的密码字符。所以,将密码的第一个字符与A比较,然后是B,然后是C,然后是D。当一个字符返回为真时,我们就知道这是管理员密码的第一个字符。我想我们将手动完成第一个,以便你能看到这个过程。然后我们再看看如何把剩下的密码也自动化。所以我想回到我的语句,输入select substring。我们要从用户名等于管理员的用户中选择密码和第一个字符和长度为1。

我们想再一次将其与A进行比较。因此,重申一下,这里的语句是选择密码和该密码的第一个字符, 并且只选择用户名等于管理员的密码中的一个字符。如果我把它改为3,这将选择密码的前三个字符。
如果我把它改为4,例如,这将选择密码的第四个字符。

所以,如果密码是Jeremy,这将是J,这将是E,这将是R。然后我们把它和这个比较。因此,如果这是正确的,如果第一个字符是A,我们将得到一个匹配,它会显示欢迎回来信息。 如果我们没有得到一个匹配,我们将得到零个匹配。所以让我们快速手动操作,看看是否能找到第一个字符。好的,所以我们找到了J。正如你所看到的,我们在下面有一个匹配。所以我们得到这个欢迎回来的消息。所以我们知道密码的第一个字符是J。现在,这样做需要相当长的时间,而且我们实际上也不确定密码有多长。有一些技术可以尝试获得密码的长度,但通常当我在编写脚本时,一旦我们在超过长度后耗尽字符,那么这也表明长度。所以我们不一定非要检查密码的确切长度。因此,我要通过点击CTRL + I 将其发送到Intruder。我要清除所有的选择。

而我要做的实际上是要改变这两个。所以我要在这里标出字符空间,同时也标出结束字符。

而我们想要的攻击类型是集束炸弹(cluster bomb)。

因此,这种攻击使用多个有效载荷集。每个定义的位置都有一个不同的有效载荷集,最多有20个。而且攻击依次迭代每个有效载荷集,以便对有效载荷组合的所有排列组合进行测试。 所以,让我们选择这个,然后来看看有效载荷。

首先,我们只需要0到9,我想。如果字符较长,我们可以在此基础上再添加一些。

然后第二个有效载荷集,我们要添加A到Z,还有0到9也是。

我不确定这里是否有大写字母,但我们会边走边找。


我们将点击开始攻击。这是相当快的。

所以我们要寻找的是长度。而且你可以看到,我们有一堆不同的响应。

所以在这里,我们大部分的长度是11499,但在顶部我们有11560。而如果我们看一下有效载荷1,例如,我们确实又有J。所以让我们通过欢迎回来的信息来过滤。

所以我只是要把欢迎词打到这里,然后我所要做的就是在这里给它们排序。

所以密码是J8WTGR5CC。
你可以看到,我们到了9,然后它停止了。所以我只是要关闭这个并点击丢弃,因为它是相当快的。回到这里,然后添加10,11,12,13,14,15,16,17,18,19,20。

所以从这里开始,我只是要打开mousepad,我只是要看下列表,然后把它打出来。

所以我就做,比如说,J8WTG。你可以看到我们有这个密码。
所以我只是要复制这个,回到我们的应用程序,点击我的帐户,输入管理员,祈祷它是正确的密码。

我们解决了实验室的问题。

所以,这个视频就到此为止。如果你喜欢它,那么点击喜欢和订阅按钮真的可以帮助我们。我们下期再见。