专栏名称: Ms08067安全实验室
“Ms08067安全实验室”致力于网络安全的普及和培训!
相关文章推荐
丁香医生  ·  水果越甜,含糖越多吗? ·  15 小时前  
钱江晚报  ·  沈腾、马丽,有新身份 ·  2 天前  
丁香医生  ·  每个女生都应该趁早补的一个东西(不是铁 ·  2 天前  
FM93交通之声  ·  最多超200只!浙江一地大批猴子下山... ·  3 天前  
钱江晚报  ·  怎么洗草莓去农残效果最好?转发学起来 ·  3 天前  
51好读  ›  专栏  ›  Ms08067安全实验室

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

Ms08067安全实验室  · 公众号  ·  · 2024-05-16 17:09

正文

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

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

扫描二维码五折购书

域环境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/*

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

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

测试可访问性:







请到「今天看啥」查看全文