Administrator
发布于 2024-02-24 / 26 阅读
0
0

2.8 服务主体名称

服务主体名称SPN是服务实例的唯一标识符,Kerberos使用SPN将服务实例与服务登录账户相关联,想使用Kerberos来认证服务就必须配置正确的SPN。

类型

SPN分两种类型

1、SPN注册在机器账号

域中的机器会自动注册两个SPN,SPN都注册在机器账户中,分别是

HOST/主机名,HOST/主机名.域名

C:\Users\Administrator>setspn -l DESKTOP-GBE538B$
Registered ServicePrincipalNames 用于 CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com:
        RestrictedKrbHost/DESKTOP-GBE538B
        HOST/DESKTOP-GBE538B
        RestrictedKrbHost/DESKTOP-GBE538B.sec.com
        HOST/DESKTOP-GBE538B.sec.com

C:\Users\Administrator>

2、SPN注册在用户账号

1)SPN注册在一个用户账号下,只能归属一个用户账号

2)一个用户可以有多个SPN,默认上限是10个

配置

1、在同一林中SPN不能重复

2、SPN包含4个元素(红色为必要元素)

具体格式:/:/

service class:服务类(如HOST、WWW)

host:运行服务的计算机名称

port:可选端口

service name:可复制服务SPN中使用的可选名称,用于标识数据或者服务

类型

1、基于主机的服务:

RestrictedKrbHost/DESKTOP-GBE538B
HOST/DESKTOP-GBE538B
RestrictedKrbHost/DESKTOP-GBE538B.sec.com
HOST/DESKTOP-GBE538B.sec.com

2、可复制的服务

可复制服务可以有多个服务实例(副本),提供的服务自然相同,如果希望访问指定的服务,可以这样:

MyDBService/host1.sec.com:3306/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host2.sec.com:3306/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host3.sec.com:3306/CN=hrdb,OU=mktg,DC=example,DC=com

使用SetSPN注册SPN

1、默认只有机器账号和管理员账号可以注册SPN

2、机器注册的SPN的必须为当前机器DNS名称,域管理员(域控机器账户)无此限制

机器账户注册:

# 先用PsExec -i -s cmd进入System用户的控制台
C:\Windows\System32>hostname
DESKTOP-GBE538B
C:\Windows\System32>whoami
nt authority\system
# 证明SPN唯一
C:\Windows\System32>setspn -S MySQL/DESKTOP-GBE538B.sec.com:3306 DESKTOP-GBE538B
正在检查域 DC=sec,DC=com
CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com
        MySQL/desktop-gbe538b.sec.com:3306
        RestrictedKrbHost/DESKTOP-GBE538B
        HOST/DESKTOP-GBE538B
        RestrictedKrbHost/DESKTOP-GBE538B.sec.com
        HOST/DESKTOP-GBE538B.sec.com

发现重复的 SPN,正在终止操作!
# 证明机器账户注册的SPN必须为当前主机的DNS名称
C:\Windows\System32>setspn -S MySQL/AAA.sec.com:3306 DESKTOP-GBE538B
正在检查域 DC=sec,DC=com

为 CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com 注册 ServicePrincipalNames
        MySQL/AAA.sec.com:3306
无法在帐户“CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com”上指定 SPN,错误为 0x200b/8203 -> 指定给目录服务的属性语法无 效。
# 注册成功
C:\Windows\System32>setspn -S PGSQL/DESKTOP-GBE538B.sec.com:5432 DESKTOP-GBE538B
正在检查域 DC=sec,DC=com

为 CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com 注册 ServicePrincipalNames
        PGSQL/DESKTOP-GBE538B.sec.com:5432
更新的对象

普通域用户注册

默认情况下,普通域用户没有权限添加SPN账户

C:\Users\testnoadmin>whoami
sec\testnoadmin

C:\Users\testnoadmin>hostname
DESKTOP-GBE538B

C:\Users\testnoadmin>setspn -S MySQL1/DESKTOP-GBE538B.sec.com:3306 DESKTOP-GBE538B
正在检查域 DC=sec,DC=com

为 CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com 注册 ServicePrincipalNames
        MySQL1/DESKTOP-GBE538B.sec.com:3306
无法在帐户“CN=DESKTOP-GBE538B,CN=Computers,DC=sec,DC=com”上指定 SPN,错误为 0x2098/8344 -> 访问特权不够,不能执行该操 作。

但是可以在域控上添加权限,需要添加读取和写入ServicePrincipalName的权限

域管用户注册

可以看到给任意host也没问题

Microsoft Windows [版本 10.0.22631.3007]
(c) Microsoft Corporation。保留所有权利。

C:\Users\Oyama>setspn -S test/xxx.sec.com:3308 Oyama
正在检查域 DC=sec,DC=com

为 CN=Oyama,CN=Users,DC=sec,DC=com 注册 ServicePrincipalNames
        test/xxx.sec.com:3308
更新的对象

C:\Users\Oyama>

SPN的查询和发现

1、setspn查询

# 查看当前域内所有的SPN
setspn -Q */*

# 删除指定的SPN
setspn -D Mysql/win7.sec.com:11443/MXX hack

# 查找指定用户/主机名注册的SPN
setspn -L username
setspn -L hostname

2、Impacket查询

C:\root> impacket-GetUserSPNs -dc-ip 172.16.80.189 sec.com/administrator:Az123456@
Impacket v0.11.0 - Copyright 2023 Fortra

ServicePrincipalName          Name           MemberOf                                               PasswordLastSet             LastLogon                   Delegation
----------------------------  -------------  -----------------------------------------------------  --------------------------  --------------------------  ----------
cifs/DESKTOP-GBE538B.sec.com  Administrator  CN=Group Policy Creator Owners,CN=Users,DC=sec,DC=com  2024-02-17 16:55:04.981324  2024-02-24 14:21:05.183699
test/xxx.sec.com:3308         Oyama          CN=Enterprise Admins,CN=Users,DC=sec,DC=com            2024-02-17 16:58:51.888759  2024-02-24 14:21:15.971155

3、其他

还有PowerShellery和PowerShell-AD-Recon等ps1脚本可以查询


评论