一、SPN定义
服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:
(1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service
(2)域用户账户(Users)注册:注册在一个域用户权限下
二、SPN格式
1. 域内常见的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查询
1. setspn.exe
setspn.exe -q */* # 查询当前域内的所有SPN setspn.exe -T test -q */* # 查看test域的所有SPN
2. PowerShell-AD-Recon
Discover-PSInterestingServices # 默认列出SPN中包含特殊字符串的项目,如,"Dfs","DNS","Exchange","ftp","http",vnc","vpn"等 Discover-PSInterestingServices -GetAllForestSPNs # 列出所有SPN Discover-PSInterestingServices -OptionalSPNServiceFilter ("Microsoft Virtual Console Service","Dfsr") # 根据关键字进行筛选
其中的Find-PSServiceAccounts 脚本也能查询的SPN:
Find-PSServiceAccounts -Forest Find-PSServiceAccounts -Domain "ad.domain.com" Find-PSServiceAccounts -Domain "ad.domain.com" -DumpSPNs
3. GetUserSPNS
PS:当vbs使用wscript执行时显示结果会弹窗,cscript会显示在命令行中
4. autokerberoast.ps1
List-UserSPNs List-UserSPNs -Group "Domain Admins" List-UserSPNs -Domain "dev.testlab.local"
5. PowerView.ps1
该脚本的功能是搜集域信息,包括了GPO、Domain Trust、User-Hunting等模块,相比上面的工具,该脚本提供更详细的信息:Get-NetUser -SPN
同时该脚本也可以查询指定域的LDAP内容:
Get-NetUser -Domain testing Get-NetUser -ADSpath "LDAP://OU=secret,DC=testlab,DC=local"
也可以根据关键字进行筛选SPN:
除了上面的工具,也可以通过dsquery、ldifde、csvde、adfind、Adexplorer等工具从域内机器或者工作组机器上查询|导出LDAP内容筛选serviceprincipalname字段来确定SPN。例如:可以通过搜索ServicePrincipalName= MSSQL* 来快速发现Active Directory域或者林中的SQL服务器
四、渗透利用
1. SPN扫描可以发现重要的服务器机器,如:终端、交换机、邮服、数据库之类;不需要进行主动扫描相比之下隐蔽性更高
2. 所有的域用户都可以通过LDAP获取到域内所有SPN,进而通过Kerberoasting攻击完成域内提权等
3. 在获得SPN修改权限后可以为制定域用户添加SPN,通过随时获取该用户的TGS破解明文密码,作为域内持久化手段
学习参考backlion师傅博客:
https://www.cnblogs.com/backlion/p/8082623.html
No Leanote account ? Sign up now.