首页 欧洲联赛正文

000 前语

Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在经过运用密钥加密技能为客户端/效劳器应用程序供给强身份验证。

在了解 Kerberos 的进程中,发现许多网站上的相关文章有一些是机器直接翻译过来艾复堂的,也有一些写的比较优异的文章,可是实操性比较弱,或许第一次了解 Kerberos 的同学会不知道怎样上手。所以本文首要是经过更具体的试验结合原理来阐明与 Kerberos 相关的一些进犯方法。

本文将分为三篇。第一篇也便是这一篇的内容首要包含域环境和 Kerberos 协议的阐明以及 Kerberoasting 的进犯黄润美方法。第二篇首要包含 MS14068 缝隙和 Kerberos 收据的运用阐明。第三篇的内容首要阐明关于 Kerberos 派遣的进犯方法及原理。

001 域环境

由于 Kerberos 首要是用在域环境下的身份认证协议,所以在说之前先说下域环境的一些概念。首要域的发生是为了处理企业内部的资源办理问题,比方一个公司就能够在网络中树立一个域环境,更便利内部的资源办理。在一个域中有域控、域办理员、普通用户、主机等等各种资源。

鄙人图中 YUNYING.LAB 为其他两个域的根域,NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB 均为 YUNYING.LAB 的子域,这三个域组成了一个域树。子域的概念能够理解为一个集团在不同事务上分公司,他们有事务重合的点而且都归于 YUNYING.LAB 这个根域,但又独立运作。相同 TEST.COM 也是一个独自的域树,两个域树 YUNYING.LAB 和 TEST.COM 组合起来被称为一个域林。

本文就以根域为 YUNYING.LAB 的这个域来演示,YUNYING.LAB 的域控是 DC.YUNYING.LAB,子域 NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB 的域控分别为 NEWSDC.NEWS.YUNYING.LAB 和 DEVDC.DEV.YUNYING.LAB。

上面说的都是 FQDN(FullyQualified Domain Name) 称号,也便是全限制域名,是一同包含主机名和域名的称号。

例:DC.YUNYING.LAB 中 DC 为主机名,域名为 YUNYING.LAB,那他的 FQDN 称号便是 DC.YUNYING.LAB。

怎么树立域环境以及捕俘拳全套教育视频怎么树立子域可参阅网上的一些阐明,这儿放两个链接作为参阅,进程就不再具体阐明。

本域中选用的操作体系为 Windows Server 2008 R2+Windows 7。

002 Kerberos 简介

在 Kerberos 认证中,最首要的问题是怎么证明「你是你」的问题,如当一个 Client 去拜访 Server 效劳器上的现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2某效劳时,Server 怎么判别 Client 是否有权限来拜访自己主机上的效劳,一同确保在这个进程中的通讯内容即便被阻拦或篡改也不影响通讯的安全性,这正是 Kerberos 处理的问题。在域浸透进程中 Kerberos 协议的攻防也是很重要的存在。

1.Kerberos 协议结构

在 Kerberos 协议中首要是有三个人物的存在:

1. 拜访效劳的 Client;

2. 供给效劳的 Server;

3.KDC(Key Distribution Center)密钥分发中心。

其间 KDC 效劳默许会装置在一个域的域控中,而 Client 和 Server 为域内的用户或许是效劳,如 HTTP 效劳,SQL 效劳。在 Kerberos 中 Client 是否有权限拜访 Server 端的效劳由 KDC 发放的收据来决议。

假如把 Kerberos 中的收据类比为一张火车票,那么 Client 端便是乘客,Server 端便是火车,而 KDC 便是便是车站的认证体系。假如 Client 端的收据是合法的(由你自己身份证购买并由你自己持有)一同有拜访 Server 端效劳的权限(车票对应车次正确)那么你才干上车。当然和火车票不一样的是 Kerberos 中有存在两张票,而火车票自始至终只要一张。

由上图中能够看到 KDC 又分为两个部分:

Authentication Server:AS 的效果便是验证 Client 端的身份(确认你是身份证上的自己),验证经过就会给一张 TGT(Ticket Granting Ticket)票给 Client。

Ticket Granting Server:TGS 的效果是经过 AS 发送给 Client 的票(TGT)交换拜访 Server 端的票(上车的票 ST)。现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2ST(ServiceTicket)也有材料称为 TGS Ticket,为了和 TGS 差异,在这儿就用 ST 来阐明。

KDC 效劳结构中包含一个 KRBTGT 账户,它是在创立域时体系主动创立的一个账号,你能够暂时理解为他便是一个无法登陆的账号,在发放收据时会运用到它的暗码 HASH 值。

2.Kerberos 认证流程

当 Client 想要拜访 Server 上的某个效劳时,需求先向 AS 证明自己的身份,然后经过 AS 发放的 TGT 向 Server 建议认证恳求,这个进程分为三块:

The A汤灿死刑犯打针现场uthentication Service Exchange:Client 与 AS 的交互;

The Ticket-Granting Service (TGS) Exchange:Client 与 TGS 的交互;

The Client/Server Authentication Exchange:Client 与 Server 的交互。

(1)TheAuthentication Service Exchange

KRB_AS_REQ

Client->AS现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2:发送 Authenticator1(Client 暗码加密 TimeStamp)

第一步 Client 先向 KDC 的 AS 发送 Authenticator1,内容为经过 Client 暗码 Hash 加密的时刻戳、ClientID、网络地址、加密类型等内容。

KRB_AS_REP

AS-> Client:发送 Client 暗码加密的 sessionkey-as 和收据 TGT(KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp)

在 KDC 中存储了域中一切用户的暗码 HASH,当 AS 接纳到 Client 的恳求之后会依据 KDC 中存储的暗码来解密,解密成功而且验证信息。验证成功后回来给 Client 由 Client 暗码 HASH 加密的 sessionkey-as 和 TGT(由 KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp 等信息)。

(2)TheTicket-Granting Service (TGS) Exchange

KRB_TGS_REQ

Client ->TGS 发送 Authenticator2 (sessionkey-as 加密 TimeStamp) 和收据 TGT(KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp)

Client 接纳到了加密后的 Sessionkey-as 和 TGT 之后,用本身暗码解密得到 Sessionkey-as,TGT 是由 KDC 暗码加密,Client 无法解密。这时 Client 再用 S现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2essionkey-as 加密 TimeStamp 和 TGT 一同发送给 KDC 中的 TGS(TicketGranting Server)收据授权效劳器交换能够拜访 Server 的收据。

KRB_TGS_REP

TGS-> Client 发送 密文 1(sessionkey-as 加密 sessionkey-tgs) 和 收据 ST(Server 暗码 HASH 加密 sessionkey-tgs)

TGS 收到 Client 发送过来的 TGT 和 Sessionkey-as 加密的 TimeStamp 之后,首要会检查本身是否存在 Client 所恳求的效劳。假如效劳存在,则用 KRBTGT 暗码解密 TGT。一般状况下 TGS 会检查 TGT 中的时刻戳检查 TGT 是否过期,且原始地址是否和 TGT 中保存的地址相同。验证成功之后将用 sessionkey-as 加密的 sessionkey-tgs 和 Server 暗码 HASH 加密的 Sessionkey-tgs 发送给 Client。

(3)TheClient/Server Authentication Ex现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2change

KRB_AP_REQ

Client ->Server 发送 Authenticator3(sessionkey-tgs 加密 TimeStamp) 和收据 ST(Server 暗码 HASH 加密 sessionkey-tgs)

Client 收到 sessionkey-as 加密的 sessionkey-tgs 和 Server 暗码 HASH 加密的 sessionkey-tgs 之后用 sessionkey-as 解密得农门继妃之错嫁离王府到 sessionkey-tgs,然后把 sessionkey-tgs 加密的 TimeStamp 和 ST 一同发送给 Server。

KRB_AP_REP

Server-> Client

server 经过自己的暗码解密 ST,得到 sessionkey-tgs, 再用 sessionkey-tgs 解密 Authenticator3 得到 TimeStamp,验证正确回来验证成功。

这便是 Kerberos 认证的流程,假如还想知道更具体的信息能够参阅下面链接。

https://tools.ietf.org/html/rfc4120.html

3.PAC

在 Kerberos 开始规划的几个流程里阐明晰怎么证明 Client 是 Client 而不是由其他人来冒彝良气候充的,但并没有声明 Client 有没有拜访 Server 效劳的权限,由于在域中不同权限的用户能够拜访的资源是有差异的。

所以微软为了处理这个问题在完结 Kerberos 时加入了 PAC 的概念,PAC 的全称是 Privilege Attribute Certificate(特权特点证书)。能够理解为火车有一等座,也有二等座,而 PAC 便是为了差异不同权限的一种方法。

(1)PAC 的完结

当用户与 KDC 之间完结了认证进程之后,Client 需求拜访 Server 所供给的某项效劳时,Server 为了判别用户是否具有合法的权限需求将 Client 的 User SID 等信息传递给 KDC,KDC 经过 SID 判别用户的用户组信息,用户权限等,进而将成果回来给 Server,Server 再将此信息与用户所讨取的资源的 ACL 进行比较,终究决议是否给用户供给相应宅男撸管的效劳。

PAC 会在 KRB_AS_REP 中 AS 放在 TGT 里加密发送给 Client,然后由 Client 转发给 TGS 来验证 Client 所恳求的效劳。

在 PAC 中包含有两个数字签名 PAC_SERVER_CHECKSUM 和 PAC_PRIVSVR_CHECKSUM,这两个数字签名分别由 Server 端暗码 HASH 和 KDC 的暗码 HASH 加密。

一同 TGS 解密之后验证签名是否正确,然后再从头结构新的 PAC 放在 ST 里回来给客户端,客户端将 ST 发送给效劳端进行验证。

(2)Server 与 KDC

PAC 能够理解为一串校验信息,为了避免被假造和串改,原则上是存放在 TGT 里,而且 TGT 由 KDC hash 加密。一同尾部会有两个数字签名,分别由 KDC 暗码和 server 暗码加密,避免数字签名内容被篡改。

一同 PAC 指定了固定的 User SID 和 Groups ID,还有其他一些时刻等信息,Server 的程序收到 ST 之后解密得到 PAC 会将 PAC 的数字签名发送给 KDC,KDC 再进行校验然后将成果已 RPC 回来码的方法回来给 Server。

003 Kerberos 与 SPN 1 SPN 简介

效劳主体称号(SPN:ServicePrincipal Names)是效劳实例(能够理解为一个效劳,比方 HTTP、MSSQL)的仅有标识符。Kerberos 身份验证运用 SPN 将效劳实例与效劳登录帐户相关联。假如在整个林或域中的核算机上装置多个效劳实例,则每个实例都有必要具有自己的 SPN。假如客户端或许运用多个称号进行身份验证,则给定效劳实例能够具有多个 SPN。SPN 一直包含运转效劳实例的主机的称号,因而效劳实例能够为其主机的每个称号或现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2别号注册 SPN。

假如用一句话来阐明的话便是假如想运用 Kerberos 协议来认证效劳,那么有必要正确装备 SPN。

2 SPN 格局与装备:

在 SPN 的语法中存在四种元诱妻欢素,两个有必要元素和两个额定元素,其间和为有必要元素:

/:/

:标识效劳类的字符串

:效劳地点主机称号

:效劳端口

:效劳称号

例:

假如我想把域中一台主机 S2 中的 MSSQL 效劳注册到 SPN 中则能够运用指令:

Setspn-A MSSQLSvc/s2.yunying.lab:1433 tsvc

注册成功之后能够经过下面两个指令来检查现已注册的 SPN。

setspn –q */*

setspn -T yunying.lab –q */*

SPN 在其注册的林中有必要是仅有的。假如它不仅有,则身份验证将失利。

在注册 SPN 时,能够运用 NetBIOS 称号,如 s2。也能够运用 FQDN(FullyQualified Domain Name 全限制域名),如 s2.yunying.lab。有或许存在某一种称号注册的 SPN 不能成功拜访的状况,假如没有装备正确能够换一种称号试一试。

一般状况下依据主机的效劳会省掉后边两个组件,格局为/:

MSSQLSvc/s2.yunying.lab

假如效劳运用非默许端口或许此主机存在多个效劳实例的状况下,需求包含端口号或效劳名:

MSSQLSvc/ s2.yunying.lab:1433 3 SPN 扫描

在了解了 Kerberos 和 SPN 之后咱们能够经过 SPN 来获取咱们想要的信息,比方想知道域内哪些主机装置了什么效劳,咱们就不需求再进行批量的网络端口扫描。在一个大型域中一般会有不止一个的效劳注册 SPN,所以能够经过「SPN 扫描」的方法来检查域内的效劳。相关于一般的网络端口扫描的长处是不必直接和效劳主机树立衔接,且荫蔽性更高。

(1) 扫描东西

扫描东西有多种,下面挑选几种较为常见的东西来阐明一下:

powershell 脚本运用之前运用 Import-module 指令先加载。

Discover-PSMSSQLServers:

Discover-PSMSSQLServers 是 Powershell-AD-Recon 东西会集的一个东西,用来查询现已注册了的 MSSQL 类型的 SPN。

GetUserSPNs:

GetUserSPNs 是 Kerberoast 东西会集的一个 powershell 脚本,用来查询域内注册的 SPN。

PowerView:

PowerView 是由 Will Schroeder(https://twitter.com/harmj0y)开发的 Powershell 脚本,在 Powersploit 和 Empire 东西里都有集成,PowerView 相关于上面几种是依据不同用户的 objectsid 来回来,回来的信息愈加具体。

还有一些其他的脚本,运用方法根本相似,能够自己挑选适宜的东西运用,本文运用的东西会在文章底部标示下载链接。

(2) 原理阐明

在 SPN 扫描时咱们能够直接经过脚本,或许指令去得悉内网现已注册的 SPN 内容。那假如想了解这个进程是怎么完结的,就需求提到 LDAP 协议。

LDAP 协议全称是 LightweightDirectory Access Protocol,一般翻译成轻量目录拜访协议。是一种用来查询与更新 Active Directory 的目录效劳通信协议。AD 域效劳运用 LDAP 命名途径(LDAP naming path)来表明目标在 AD 内的方位,以便用它来拜访 AD 内的目标。

LDAP 数据的安排方法:

更直观的说能够把 LDAP 协议理解为一个联系型数据库,其间存储了域内主机的各种装备信息。

在域控中默许装置了 ADSI 修改器,全称 ActiveDirectory Service Interfaces Editor (ADSIcomicdown Edit),是一种 LDAP 的修改器,能够经过在域控中运转 adsiedit.msc 来翻开(效劳器上都有,可是只要域控中的有整个域内的装备信息)。

经过 adsiedit.msc 咱们能够修正和修改 LADP,在 SPN 查询时实际上便是查询 LADP 中存储的内容。

比方在咱们是试验环境域 YU现代朗动,Kerberos协议探求系列之扫描与爆炸篇,起亚k2NYING.LAB 中,存在名为 svcserver 的一个 OU(OrganizationUnit,能够理解为一个部分,如开发部、财务部等等),其间包含了 tsvc 这个用户,从用自爱九紫户特点中能够看到 tsvc 注册过的 SPN 内容。

当咱们在一台主机履行

setspn -T yunying.lab -q */*青岛cbd

指令查询域内 SPN 时,经过抓包能够看到正是经过 LDAP 协议向域控中装置的 LDAP 效劳查询了 SPN 的内容。

所以其实那些 Powershell 脚本其实首要便是经过查询 LDAP 的内容并对回来成果做一个过滤,然后展现出来。

004 Kerberoasting

在前面介绍 Kerberos 的认证流程时提到,在 KRB_TGS_REP 中,TGS 会回来给 Client 一张收据 ST,而 ST 是由 Client 恳求的 Server 端暗码进行加密的。当 Kerberos 协议设置收据为 RC4 方法加密时,咱们就能够经过爆炸在 Client 端获取的收据 ST,然后取得 Server 端的暗码。

下图为设置 Kerberos 的加密方法,在域中能够在域控的「组战略办理」中进行设置:

设置完结之后运转里输入「gpupdate」改写组战略,战略收效。

1 前期的 Kerberoasting

Kerberoasting 这种进犯方法开始应该是由 TimMedin(https://twitter.com/TimMedin)提出,下面咱们经过试验来进行演示。

试验环境:

域:YUNYING.LAB

域控:WindowsServer 2008 R2 x64(DC)

域内主机:Windows7 x64(s1):用户 ts1

域内主机:Windows Server2008 R2 x64(s2):用户 tsvc

所需东西:

Kerberoast 东西包

Mimikatz

进犯流程:

一、在域内主机 s1 中经过 Kerberoast 中的 GetUserSPNs.ps1 进行 SPN 扫描。

也能够运用 GetUserSPNs.vbs 东西。

二、依据扫描出的成果运用微软供给的类 KerberosRequestorSecurityToken 建议 kerberos 恳求,恳求 ST 票重庆渝北区气候预报据。

(这个类的概况能够参阅https://docs.microsoft.com/en-us/dotnet/api/system.identitymodel.tokens.kerberosrequestorsecuritytoken?redirectedfrom=MSDN&view=netframework-4.7.2)

PS C:\> Add-Type -AssemblyNameSystem.IdentityModel

PS C:\> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/s2:1433"

能够看到这个进程经过 AS-REQ、AS-REP、TGS-REQ、TGS-REP 这四个认证流程,获取到 RC4 方法加密的收据。

三、Kerberos 协议中恳求的收据会保存在内存中,能够经过 klist 指令检查其时会话存储的 kerberos 收据。

运用 mimikatz 导出。

运用 kerberoast 东西会集的 tgsrepcrack.py 东西进行离线爆炸,成功得到 tsvc 账号的暗码 admin1234!

2 Kerbe德阳常鸣roasting 的「新姿态」

试验环境:

域:YUNYING.LAB

域控:WindowsServer 2008 R2 x64(DC)

域内主机:Windows7 x64(s1):用户 ts1

域内主机:WindowsServer 2008 R2 x64(s2):用户 tsvc

所需东西:

Invoke-Kerberoast.ps1

HashCat

进犯流程:

在之前的 Kerberoasting 中需求经过 mimikatz 从内存中导出收据,Invoke-Kerberoast 经过提取收据传输时的原始字节,转换成 John the Ripper 或许 HashCat 能够直接爆炸的字符串。

环境不变,在 s1 主机上运用 Invoke-Kerberoast 脚本 (这儿运用的是 Empi别拿班花不妥干部re 中的 Invoke-Kerberoast.ps1)。

Invoke-kerberoast -outputformat hashcat |fl

这儿–outputformat 参数能够指定输出的格局,可选 John the Ripper 和 Hashcat 两种格局,这儿以 Hashcat 做演示。

这个脚本恳求拜访的是 MSSQLSvc/s2.yunying.lab:1433 这个 SPN。检查数据包能够看到 Invoke-Kerberoast 输出的 Hash 值便是 TGS-REP 中回来的收据内容,然后拼接成了 Hashcat 能够直接爆炸的格局(以$krb5tgs$23*开始的)。

把内容保存至文档,也能够直接重定向到 TXT 文件:

PS C:> Invoke-Kerberoast-Outputformat Hashcat | fl > test1.tx捏奶头t

二、运用 HASHCAT 东西进行破解:

PSC:> hashcat64.exe –m 13100 test1.txt password.list --force

能够看到这儿现已离线破解成功,输出了 s2 的暗码 admin1234!。在这儿–漏阴m 表明挑选不同的加密类型,其间 13100 对应的是 Kerberos 5 TGS-REP 类型的密文。

Hashcat 能爆炸的类型十分多,还有 NTLM HASH 等,更多的 Hashcat 的类型能够参阅:

3 Invoke-kerberoast 的完结

开始进行这个试验的时分是直接在 GitHub 上查找的 Invoke-kerberoast,其时下载的是这个地址的,可是下载完之后发现这个地址的东西并不能正常运用,检查代码发现在字符串拼接时格局的问题,输出的内容并不契合 Hashcat 的格局。然后直接运用了 Empire 中的 Invoke-kerberoast.ps1 脚本(下载地址: )。下面就拿这个脚本来阐明。

在 Invoke-kerberoast 中经过两个要害函数看脚本履行的首要流程,一个是 function Invoke-Kerberoast {} 一个是 functionGet-DomainSPNTicket {}。

首要在 Invoke-Kerberoast 函数中经过脚本中的函数 Get-DomainUser 查询组内一切用户 LDAP 库中存储的内容,并去除 krbtgt 之后经过管道符传给 Get-DomainSPNTicket。

Get-DomainUser 输出的值(-erroraction”Silentlycontinue”消除 powershell 中的红字告警,也能够直接去掉):

函数 Get-DomainSPNTicket 在接纳到 Get-Do歌唱家陈思思老公是谁mainUser 的输出成果后提取 SPN(ServicePrincipalName)字段的值,然后取其间的第一个赋值给变量 UserSPN。咱们在代码中增加 echo 句子,然后再履行能够看到本次的成果选取了 SPN 列表中的第一条 MSSQLSvc/s2:SQLEXPRESS。

经过 KerberosRequestorSecurityToken 类的 GetRequest 函数建议 kerberos 恳求。随后经过匹配回来阿呷拉古值,提取收据内容。

将提取的收据的值组合成 Hashcat 要求的格局之后赋值给变量 HashFormat,也便是终究咱们能够用 Hashcat 或许 John theRipper 来爆炸的值。

相同,上图框中的变量$Etype 的值是 23,实际上便是 RC4 加密算法的代号。

总结下来 Kerberoasting 的实质是经过破解在 Kerberos 认证流程中的 KRB_TGS_REP 这个进程中 TGS 回来给 Client 的收据内容来进行暗码的获取,而且这种方法是离线爆炸,进程较为荫蔽。

005 小结

本文首要阐明晰 kerberos 的根本原理以及 SPN 扫描的内容,介绍了 Kerberoasting 的进犯方法,Kerberos 的原理较为杂乱,可是深刻理解之后有助于关于了解其他 Kerberos 进犯方法是由挖大脑很大协助的。一同 kerberos 在 windows 的完结中与其他的协议也有一些相关联,多了解一点其他协议也是有必要的。下一篇中我将对 MS14068 缝隙和银收据金收据的运用和原理进行探求,感谢阅览。

试验东西 参阅链接

*本文作者:360云影试验室,转载请注明来自FreeBuf.COM

中通 开发 客户端
声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。