0x01介绍
Kerberos是一种支持票证身份验证的安全协议。如果客户端计算机身份验证请求包含有效的用户凭据和服务主体名称 (SPN),则 Kerberos 身份验证服务器将授予一个票证以响应该请求。然后,客户端计算机使用该票证来访问网络资源。在内部网络中,SPN扫描通过查询向域控制器执行服务发现。可以帮助我们识别正在运行重要服务的主机,如终端、交换机、微软SQL等,并隐藏他们。此外,SPN的识别也是kerberoasting攻击的第一步。
0x02关于spn
服务主体名称(SPN:Service Principal Names)是服务实例,可以将其理解为一个服务(比如 HTTP、MSSQL)的唯一标识符,服务在加入域中时是自动注册的。
如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个 SPN。SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机名称或别名注册 SPN。
如果用一句话来说明的话就是SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN,如果想使用 Kerberos 协议来认证服务,那么必须正确配置 SPN。
SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下
当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。
SPN格式为
serviceclass/host:port servicename
微软官方也给出了详细的解释和语法规则
有兴趣的可以详细阅读一下:
https://social.technet.microsoft.com/wiki/contents/articles/717.service-principal-names-spn-setspn-syntax.aspx
在查询SPN的时候,会向域控制器发起LDAP查询,这是正常Kerberos票据行为的一部分,所以这个操作很难被检测出来。
0x03实验
这里我们准备了两个靶机来让大家了解SPN查询的详细内容,以下是详细的靶机情况,通过3389即可连接
Win08_dc_dns
192.168.5.70
zhujian.com
Win7
192.168.5.116
我们可以通过以下命令来查询当前域下的所有SPN
setspn –q */*
查看ZHUJIAN域的所有SPN
···
setspn –T zhujian –q /
···
与刚刚的内容肯定是一样的,因为win7这台机子只在zhujian这一个域中。
其中以CN开头的,每一行都代表一个账户
这两个为机器账户
下面这个为域用户账户
我们也可以根据微软的官方文档去自己注册SPN,这里我们还是尽可能的去模拟一下真实的情况,我们在win7上安装一下MSSQL,然后再去看内容是否有变化
MSSQL的安装包已经在win7中的桌面提供了,直接安装即可。
双击时会遇到这种情况,这是因为当前是域用户不是此机器的管理员权限
这里我们使用以下的账号密码来进行验证
接下来就是正常的安装,不详细展开了,我们这里的目的是只要安装好就可以了
注:这里如果遇到不能正常运行安装的情况,请直接切换用户进行安装,安装之后再切换回域用户,如果因为硬盘不足的原因,请手动扩充
安装好之后,请切换到域用户
我们运行命令
···
setspn –q /
···
可以发现在SECQUAN_WIN7-PC上多了一个服务
这个正是MSSQL所对应的SPN
这样就可以帮助我们快速获得域内的一些服务
常见的几种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:CiscoUnity 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 FinalCut Server
FileRepService:WSFileRepService.exe
FIMService:MicrosoftForefront标识管理器(FIM)
ftp:文件传输协议
GC:域控制器全局编录服务
HDFS:Hadoop(Ambari)
host:主机服务代表主机。HOSTSPN用于在创建服务票据时访问由Kerberos协议使用长期密钥的主机帐户。
http:支持Kerberos身份验证的http网络服务的SPN
Hyper-V副本服务:MicrosoftHyper-V的副本服务
IMAP:Internet消息访问协议
IMAP4:Internet消息访问协议版本4
ipp:Internet打印协议
iSCSITarget:iSCSI 配置
kadmin:Kerberos
ldap:LDAP服务,如域控制器或ADAM实例。
Magfs:MaginaticsMagFS
mapred:Cloudera
Microsoft虚拟控制台服务:HyperV主机
Microsoft虚拟系统迁移服务:P2V支持(Hyper-V)
mongod:MongoDBEnterprise
mongos:MongoDBEnterprise
MSClusterVirtualServer:Windows群集服务器
MSOLAPSvc:SQLServer分析服务
MSOLAPSvc.3:SQLServer分析服务
MSOLAPDisco.3:SQLServer分析服务
MSOMHSvc:Microsoft系统中心运营经理(2007/2012)管理服务器
MSOMSdkSvc:MicrosoftSystem Center Operations Manager(2007/2012)管理服务器
MSServerCluster:Windows群集服务器
MSServerClusterMgmtAPI:此群集API需要此SPN才能通过使用Kerberos向服务器进行身份验证
MSSQL:Microsoft SQLServer
MSSQLSvc:MicrosoftSQL Server
MSSQL $ ADOBECONNECT:支持Adobe Connect的Microsoft SQL Server
MSSQL $ BIZTALK:MicrosoftSQL 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:OracleKerberos身份验证
pcast:苹果播客制作人
PCNSCLNT:自动密码同步解决方案(MIIS 2003&FIM)
POP:邮箱协议
POP3:邮箱协议版本3
PVSSoap:Citrix ProvisioningServices(7.1)
RestrictedKrbHost:使用服务类字符串等于“RestrictedKrbHost”的 SPN的服务类,其服务凭单使用计算机帐户密钥并共享会话密钥。
RPC:远程过程调用服务
SAP:SAP /SAPService
SAS:SAS服务器
SCVMM:System Center虚拟机管理器
secshd:IBMInfoSphere
sip:会话启动协议
SMTP:简单邮件传输协议
SMTPSVC:简单邮件传输协议
SoftGrid: Microsoft应用程序虚拟化(App-V)以前的“SoftGrid”
STS:VMWare SSO服务
SQLAgent $ DB01NETIQ:NetIQ的SQL服务
tapinego:与路由应用程序相关联,例如Microsoft防火墙(ISA,TMG等)
TERMSRV:Microsoft远程桌面协议服务,又名终端服务。
tnetd:JuniperKerberos身份验证 “Tnetd是一个守护进程,用于路由引擎和数据包转发引擎等不同组件之间的内部通信”
vmrc:Microsoft VirtualServer 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:ClouderaMapReduce
···
至于更多的SPN值,请自己去尝试和搜集
最后,我们再提供一个探测MSSQL服务的ps脚本,类似的脚本也还有很多,大家可以去GitHub上进行搜集和更改
···
https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSMSSQLServers
···
文章首发公众号:无心的梦呓(wuxinmengyi)
这是一个记录红队学习、信安笔记,个人成长的公众号
扫码关注即可