前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最新域环境MSSQL的枚举和认证技术

最新域环境MSSQL的枚举和认证技术

作者头像
Ms08067安全实验室
发布2024-05-20 14:00:36
700
发布2024-05-20 14:00:36
举报

在渗透测试过程,如果我们获取了一个普通域用户权限,或者针对域环境执行假定入侵渗透测试,我们通常需要枚举域环境是否集成了MS SQL数据库,并测试是否存在漏洞或者误配置可以利用进行权限提升。

传统的方法是使用nmap之类的工具扫描开放的1433端口来定位MSSQL数据库服务器,但是一些数据库实例可能配置运行在非默认端口,比如命名的MS SQL实例,此时使用网络扫描工具就无法发现。

当MSSQL使用域用户账户上下文运行时,通常会和一个SPN(Service Principal Name)绑定。SPN存储在活动目录中,并将服务账户与SQL服务及其关联的Windows服务器联系起来。因此,我们可以通过向域控查询和MS SQL相关的SPN,来定位MS SQL实例。

普通域用户可以使用setspn命令查询注册的SPN,-T参数指定域或者林,-Q指定SPN通配符。下面以普通域用dave进行查询:

代码语言:javascript
复制
setspn -T dev.ms08067.cn -Q MSSQLSvc/*

使用setspn枚举SQL实例

从输出可以看到,dev.ms08067.cn域存在两个MS SQL实例,分别运行在dev-dc01和appsrv01主机。

除了使用setspn,我们也可以使用PowerShell脚本GetUsersSPNs.ps1进行枚举,下载地址为https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps。该脚本默认会查询根域,我们可以使用GCName参数指定子域。运行脚本,可以看到和setspn输出类似:

代码语言:javascript
复制
. .\GetUserSPNs.ps1 -GCName  'DC=dev,DC=ms08067,DC=cn'    

使用GetUsersSPN枚举SQL实例

通过上面setspn和GetUsersSPN的输出,我们可以获得域内MS SQL服务器的主机名和TCP端口,以及运行SQL服务的账户等信息。上面例子中,两个SQL实例都是运行在域账户SQLSvc的上下文,且该域账户是服务器本地管理员组成员。

域环境MSSQL认证

在我们通过枚举获得目标SQL服务器的基本信息后,接下来我们学习下MS SQL在集成到域环境时的认证过程。

MS SQL认证分为两个步骤。第一步先执行一个传统的登录,通常为SQL服务器登录或者Windows账户基于的登录。SQL服务器登录在每个单独的数据库服务上使用本地账户登录,比如使用sa登录。Windows认证通过Kerberos进行,允许任何域用户使用TGS(Ticket Granting Service)票据进行认证。

第二步是认证成功后,将登录账户映射到数据库账户。比如,我们使用内置的SQL服务器sa账户登录,将会映射到dbo用户账户。如果我们登录的账户和SQL用户账户没有关联,则会自动映射到guest用户账户。高权限账户如sa,映射到dbo用户时,将会获得sysadmin角色,有权限对SQL服务器进行管理。而映射到guest用户的登录,将获得public角色。

在SQL服务器和活动目录集成时,通常会启用Windows认证。此时我们可以使用Kerberos认证,而无需提供密码。

我们可以使用PowerUpSQL.ps1脚本进行测试,看当前用户对数据库是否有访问权限,以及对应的角色。脚本下载地址为:

https://github.com/NetSPI/PowerUpSQL/blob/master/PowerUpSQL.ps1,

首先导入脚本:

代码语言:javascript
复制
. .\PowerUpSQL.ps1

我们也可以使用PowerUpSQL枚举域内存在的SQL server实例:

代码语言:javascript
复制
Get-SQLInstanceDomain

测试可访问性:

代码语言:javascript
复制
Get-SQLInstanceDomain -Verbose | Get-SQLConnectionTestThreaded -Verbose -Threads 10 | Where-Object {$_.Status -like "Accessible"}

使用PowerUpSQL测试数据库可访问性

从输出可以看到当前用户对两个数据库都有访问权限。我们也可以使用Get-SQLServerInfo函数收集单个服务器信息:

代码语言:javascript
复制
Get-SQLServerInfo -Instance  dev-dc01.dev.ms08067.cn    

使用PowerUpSQL枚举单个服务器信息

可以看到我们当前以域用户DEV\dave登录数据库,但不是Sysadmin角色。

上面介绍了域环境MS SQL的枚举和认证过程后,接下来,我们将学习针对MS SQL常用的攻击手段。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档