本文部分节选于《域渗透攻防指南》,购买请长按如下图片扫码。
-
一种是注册在活动目录的机器帐户(Computers)下,当一个服务的权限为 Local System 或 Network Service时,则SPN注册在机器帐户(Computers)下。域中的每个机器账户都会注册两个SPN:HOST/主机名 和 HOST/主机名.xie.com -
另一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户下。
-
可以使用工具Setspn来手动注册SPN。但是这不是一个最好的方法,毕竟手工注册不是长久之计。如果SPN下次丢了,又要再次手动注册。 -
所以比较好的方法,是让SQL Server当前启动域账号有注册SPN的权力。要在DC上为域账号赋予 “Read servicePrincipalName” 和 “Write serverPrincipalName” 的权限即可。
SPN的配置
<service class>/<host>:<port>/<service name>
-
<service class>:服务类,用于标识服务常规类的字符串;例如,"HOST"。 有一些已知的服务类名称,例如 Web 服务的"WWW"或目录服务的"LDAP"。 一般情况下,可以是服务类唯一的任何字符串。 请注意,SPN 语法使用正斜杠 (/) 分隔元素,因此此字符不能出现在服务类名中。 -
<host>:运行服务的计算机的名称。 这可以是完全限定的 DNS 名称(FQDN)或 NetBIOS 名称。 请注意,不确保 NetBIOS 名称在林中是唯一的,因此,包含 NetBIOS 名称的 SPN 可能不是唯一的。 -
<port>:一个可选端口号,用于区分单个主计算机上同一服务类的多个实例。 如果服务使用服务类的默认端口,则省略此组件。 -
<service name>:可复制服务SPN中使用的可选名称,用于标识服务或服务所服务的域提供的数据或服务。 此组件可以具有以下格式之一:
-
服务中对象的可分辨名称或 objectGUID Active Directory 域,例如 SCP (连接) 。 -
为整个域提供指定服务的服务的域的 DNS 名称。 -
SRV 或 MX 记录的 DNS 名称。
基于主机的服务
<service class>/<host>
<service class>/<host>:<port>
#Host服务
HOST/WIN2008
HOST/WIN2008.xie.com
#RDP服务
TERMSRV/WIN2008
TERMSRV/Win2008.xie.com
#WSMan/WinRM/PSRemoting服务
WSMAN/Win2008
WSMAN/Win2008.xie.com
#RestrictedKrbHost服务
RestrictedKrbHost/WIN2008
RestrictedKrbHost/WIN2008.xie.com
可复制的服务
<service class>/<host>:<port>/<service name>
MyDBService/host1.example.com/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host2.example.com/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host3.example.com/CN=hrdb,OU=mktg,DC=example,DC=com
使用SetSPN注册SPN
-
如果是注册在域用户下,还可以使用-U -A参数注册 -
如果是注册在机器用户下,可以使用-C -A参数注册
SPN注册权限
setspn -S MySQL/win7.xie.com:3306 hack
setspn -S MySQL/win7.xie.com:3306 hack
将SPN注册在域账号下
setspn -S SQLServer/win7.xie.com:1433/MSSQL hack
setspn -U -S SQLServer/win7.xie.com:1443/MSSQL hack
#查询hack用户注册的SPN
setspn -L hack
将SPN注册在机器账号下
setspn -S SQLServer/win7.xie.com:1433/MSSQL win7
setspn -C -S SQLServer/win7.xie.com:1443/MSSQL win7
#查询win7机器注册的SPN
setspn -L win7
SPN的查询和发现
setspn
#查看当前域内所有的SPN
setspn -Q */*
#如果在域林中,则可以使用如下命令查看指定域xie.com内的SPN。如果指定域不存在,则默认切换到查找本域的SPN
setspn -T xie.com -Q */*
#查找本域内重复的SPN
setspn -X
#删除指定SPN:
setspn -D MySQL/win7.xie.com:1433/MSSQL hack
#查找指定用户/主机名注册的SPN
setspn -L username/hostname
impacket
python3 GetUserSPNs.py -dc-ip 10.211.55.4 xie.com/hack:P@ss1234
PowerShellery
#Powershellery/Stable-ish/Get-SPN/ 下Get-SPN.psm1脚本的使用,需要powershell3.0及以上版本才能使用
Import-Module .Get-SPN.psm1
Get-SPN -type service -search "*"
Get-SPN -type service -search "*" -List yes | Format-Table
#Powershellery/Stable-ish/ADS/ 下Get-DomainSpn.psm1脚本的使用
Import-Module .Get-DomainSpn.psm1
Get-DomainSpn
PowerShell-AD-Recon
#探测域内注册的SQLServer服务的SPN
Import-Module .Discover-PSMSSQLServers.ps1;
Discover-PSMSSQLServers
#探测域内注册的Exchannge服务的SPN
Import-Module .Discover-PSMSExchangeServers.ps1;
Discover-PSMSExchangeServers
#扫描域中所有的SPN信息
Import-Module .Discover-PSInterestingServices.ps1;
Discover-PSInterestingServices
END
原文始发于微信公众号(谢公子学安全):SPN服务主体名称
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论