SPN(Service Principal Names)
SPN
服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:
(1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service
(2)域用户账户(Users)注册:注册在一个域用户权限下
- 域内常见的SPN实例
* MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
* ExchangeMDB/adsmsEXCAS01.adsecurity.org
* TERMSERV/adsmsEXCAS01.adsecurity.org
* WSMAN/adsmsEXCAS01.adsecurity.org
* ……
2. 常见的服务主体名称和对应的服务
* AcronisAgent:针对Acronis备份和数据恢复软件
* Afpserver:Apple归档协议
* AgpmServer:Microsoft高级策略管理(AGPM)
* ExchangeAB:Exchange通讯簿服务
* ExchangeRFR:交换通讯簿服务
* ExchangeMDB:RPC客户端访问服务器角色
* MSSQLSvc:Microsoft SQL Server
* MSOMHSvc:Microsoft 系统中心运营经理管理服务器
* MSOMSdkSvc:Microsoft System Center Operations Manager 管理服务器
* MSServerCluster:Windows集群服务器
* MSServerClusterMgmtAPI:集群的API需要此SPN才能使用Kerberos向服务器进行验证
* MSClusterVirtualServer:Windows 集群服务器
* TERMSRV:Microsoft 远程桌面协议服务
* WSMAN:Windows远程管理服务
* ……
注册SPN
使用setspn命令可以注册、查询SPN,该命令在Win 7 和 Win Server 2008以上版本系统自带
setspn -A MSSQLSvc/my.domain.com:1433 accountname
SPN查询
setspn.exe
setspn.exe -q */* # 查询当前域内的所有SPN
setspn.exe -T test -q */* # 查看test域的所有SPN
PowerShell-AD-Recon
https://github.com/PyroTek3/PowerShell-AD-Recon/
powershell -ExecutionPolicy Bypass
Import-Module .\Discover-PSInterestingServices.ps1
Discover-PSInterestingServices -GetAllForestSPNs # 列出所有SPN
GetUserSPNS
https://github.com/nidem/kerberoast
powershell -ExecutionPolicy Bypass -File .\GetUserSPNs.ps1
cscript GetUserSPNs.vbs
PowerView.ps1
该脚本的功能是搜集域信息,包括了GPO、Domain Trust、User-Hunting等模块,相比上面的工具,该脚本提供更详细的信息
https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
powershell -ExecutionPolicy Bypass
Import-Module .\powerview.ps1
Get-NetUser -SPN
除了上面的工具,也可以通过dsquery、ldifde、csvde、adfind、Adexplorer等工具从域内机器或者工作组机器上查询|导出LDAP内容筛选serviceprincipalname字段来确定SPN。例如:可以通过搜索ServicePrincipalName= MSSQL* 来快速发现Active Directory域或者林中的SQL服务器
利用
-
SPN扫描可以发现重要的服务器机器,如:终端、交换机、邮服、数据库之类;不需要进行主动扫描相比之下隐蔽性更高
-
所有的域用户都可以通过LDAP获取到域内所有SPN,进而通过Kerberoasting攻击完成域内提权等
-
在获得SPN修改权限后可以为制定域用户添加SPN,通过随时获取该用户的TGS破解明文密码,作为域内持久化手段
参考文章
https://www.cnblogs.com/backlion/p/8082623.html