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

点击星标,即时接收最新推文

3df741ccba06ffdd371f15d3a603d8c5.png

本文选自《内网安全攻防:红队之路》

扫描二维码五折购书

域环境MSSQL枚举

在渗透测试过程,如果我们获取了一个普通域用户权限,或者针对域环境执行假定入侵渗透测试,我们通常需要枚举域环境是否集成了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进行查询:

setspn -T dev.ms08067.cn -Q MSSQLSvc/*

4b8b6723742da319cbb0b45188a16338.png

 使用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输出类似:

. .\GetUserSPNs.ps1 -GCName  'DC=dev,DC=ms08067,DC=cn'

a952b03573d1ca792e1a27f852c2c6fe.png

使用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,

首先导入脚本:

. .\PowerUpSQL.ps1

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

Get-SQLInstanceDomain

测试可访问性:

Get-SQLInstanceDomain -Verbose | Get-SQLConnectionTestThreaded -Verbose -Threads 10 | Where-Object {$_.Status -like "Accessible"}

3652053166aa1fd7e05732e258bdc1e0.png

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

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

Get-SQLServerInfo -Instance  dev-dc01.dev.ms08067.cn

83a8c66d4a3b2165abc8d0445f2b316c.png

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

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

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

—  实验室旗下直播培训课程  —

51a15f061a0175caa207111af776643a.png

49e20444072292212bb73b1b206511e5.jpeg

28dffe33d87414901aab6ee0954da976.jpeg26dae1e3f61091b27c3571eeb10b61a7.png

5d2ae7c3018121cd8e6974f875153061.png

099657ea79c55adda21ea1d859cb9964.jpeg

aff13b6d57a3bcd21242be596381fa29.jpeg

bab050f2d0a1c04ee972791ad2724f7c.jpeg

1da8e80e96914422163c3cc35e070261.png

和20000+位同学加入MS08067一起学习

297519d9928481cc2ab95a3b821e82e5.gif

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值