本文将探讨如何从 Microsoft SQL Server (MSSQL) shell 升级到在目标计算机上执行命令,核心是利用内置功能 xp_cmdshell。
这种攻击比表面看起来更严重。虽然进程是从 MSSQL shell 启动的,但同样可以通过 SQL 注入 (SQLi) 攻击触发。如果攻击者能注入 SQL 命令,就可能借此在系统上执行命令。
攻击概述
先交代一下环境:我已经拿到一个 Microsoft SQL shell,界面如下:

接着准备执行第一条 SQL 命令,尝试在本地计算机上运行命令。前面已经提到,我们要用 xp_cmdshell 来实现。
xp_cmdshell "whoami"
这条命令通过 SQL Server 的 xp_cmdshell 功能执行 whoami 实用程序。whoami 会返回当前进程对应的用户,也就是运行 SQL Server 的账户。执行它可以确认 SQL Server 服务账户在目标机器上的权限级别。这个信息非常关键,如果 SQL Server 服务以高于预期的权限运行,还可能给后续提权提供机会。

第一次尝试没有成功。从错误信息看,似乎缺少某些权限。不过我已经以管理员身份登录 MSSQL shell,下一步是调整两个配置项,再重新执行命令。
SP_CONFIGURE "show advanced options", 1
RECONFIGURE
SP_CONFIGURE 用于修改服务器级配置。把 show advanced options 设置为 1,可以打开默认隐藏的高级配置项。随后执行 RECONFIGURE 让修改立即生效。在启用 xp_cmdshell 这类用于执行系统命令的功能之前,通常都需要先完成这一步。

再试一次后,还是同样的错误。唯一的解决办法如下:
SP_CONFIGURE "xp_cmdshell", 1
这条命令会启用 SQL Server 中的 xp_cmdshell 功能。默认情况下,出于安全考虑该功能是关闭的,因为它允许在 SQL Server 环境中执行系统命令。把它设置为 1 后,再执行 RECONFIGURE 应用变更。启用 xp_cmdshell 后,就可以运行操作系统命令了,这也是在目标机器上执行后续操作的关键步骤。
RECONFIGURE
xp_cmdshell "whoami"

终于成功
最终想法
配置调整完成后,攻击成功执行。通过启用高级选项并调整设置,我们用 xp_cmdshell 在目标机器上运行了命令。这也说明保证 SQL Server 配置安全有多重要:被忽略的设置很容易被利用,正确管理这些配置是防范此类漏洞的关键。
|