关于MAT
MAT是一款针对MSSQL服务器的安全检测与审计工具,该工具使用C#开发,可以帮助广大研究人员快速识别和发现MSSQL 服务器中的安全问题,并实现安全检测与审计目的。
功能介绍
1、执行自动检查并识别安全问题;
2、允许通过 Windows 集成身份验证以及 SQL 身份验证登录;
3、如果权限存在则快速激活 XP_cmdshell(本地以及链接服务器上);
4、通过 XP_cmdshell 方便地执行系统命令(本地以及单/双链接服务器);
5、方便执行 SQL 命令(本地以及链接服务器上);
6、通过 XP_dirtree 快速触发 NTLM 请求;
7、自定义存储过程-用于执行操作系统命令(本地);
8、自动检查并启用 RPC OUT(如果链接服务器禁用 RPC OUT,则链接服务器上的存储程序(如 xp_cmdshell)将不可用);
9、自动转储 MSSQL 用户哈希;
工具要求
Visual Studio
CommandLineParser.2.9.1(NuGet包)
Costura.Fody(NuGet包)
工具安装
源码编译
广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/SySS-Research/MAT.git
然后打开Visual Studio,加载项目代码,根据操作系统平台架构编译项目代码即可。
发布版本
除此之外,我们也可以直接访问该项目的【Releases页面】下载最新版本的MAT可执行程序。
工具使用
Example: MAT.exe [options] Example: MAT.exe --server localhost -u sqlusername -p sqlpassword --os-command "whoami"
如果可执行文件在没有凭据的情况下执行(没有选项“-u:”或“-p:”),它将默认尝试使用 Windows 集成身份验证(当前登录的 Windows 用户)登录。
工具参数选项
Options: -s, --server SQL 服务器(必填) -u, --user SQL 用户 -p, --password SQL 密码 -d, --database 数据库名称 (默认: 'master') -r, --relay 通过XP_DIRTREE触发到给定IP的NTLM中继 -i, --impersonate 模拟指定的SQL用户 --dumphashes 如果当前用户具有管理员权限,则转储MSSQL用户哈希 -l, --linked-server 链接的SQL服务器 -e 在本地(-e)或链接服务器(-e LINKEDSERVER)上启动XP_CMD Shell --os-command 在所选目标系统中执行的OS命令 --sql-command 在所选目标系统中执行的SQL命令 --double-link 使用双链接通过XP_CMD执行OS命令 --stoprox 通过自定义程序集存储进程执行OS命令 --help 显示工具帮助信息 --version 显示版本信息
工具运行演示
在执行安全检测和审计期间,如果在本地服务器上识别出本地 MSSQL Server 实例,我们就可以直接使用MAT手动与目标实例建立连接:
MAT.exe --server localhost
该工具显示收集到的Windows用户凭证可以登录 SQL Server“COM1”(Windows 集成身份验证 - 无需输入用户名/密码)。该工具提供以下输出:
用户属于“sysadmin”组。这允许用户激活 XP_CMD shell 并执行系统命令或列出 SQL 用户登录(这在后面很重要)。
激活 XP_cmdshell 后(MAT.exe --server localhost -e),可以随后执行系统命令(MAT.exe --server localhost --os-command "whoami")。
使用参数“--os-command”而不使用附加参数“--linked-server”会告诉工具在条目 SQL Server(COM1)上本地执行该命令:
下一步,可以测试用户 COM1\user 是否可用于访问链接服务器,MAT识别出了以下链接服务器:
在 SQL Server 上查询链接服务器时,服务器本身(在本例中为 COM1)也始终会列出。此处的实际链接服务器是“COM2”。直接尝试使用受感染的用户在此链接服务器上执行 SQL 命令会失败(MSSQL 工具会自动执行这些检查):
这是因为 COM1 上没有当前用户的登录映射,登录映射可以确定 SQL Server COM1 中的哪个用户与 COM2 中的哪个用户相关联。
因此,了解 COM1 上有哪些用户非常重要,这样才能测试这些用户是否存在登录映射(如果权限足够高,则可以通过 SQL Management Studio 直接在链接服务器对象“COM2”中检查这一点)。此前,MAT检测到以下用户登录:
userx
user1
adminuser
拥有“sysadmin”权限的用户com1\user也可以模拟SQL用户。
因此,可以尝试模拟用户“userx”。通过参考用户/权限图表,可以发现模拟用户“userx”可以以“usery”的身份在 COM2 上执行 SQL 命令。需要注意的是,模拟后执行的所有操作都以模拟用户的身份进行。相关命令如下:
MAT.exe --server localhost --impersonate userx
使用该工具可获得以下结果:
在此演示场景中,该工具不仅能够在本地或链接服务器 COM2 上执行 OS 命令(通过 1 个链接),还可以从那里使用 SQL Server COM1 作为链接服务器(通过 2 个链接)。在三重链接场景中,COM1 将首先通过链接连接到 COM2,然后返回 COM1,然后再次通过链接连接到 COM2。指示“Pwn3d!”表示链接服务器上的映射用户属于“sysadmin”组,因此可以完全控制 SQL Server。
下图显示了每个 MSSQL 服务器的现有用户及其映射:
许可证协议
本项目的开发与发布遵循MIT开源许可协议。
项目地址
MAT:【GitHub传送门】