当前位置: 首页 > backend >正文

【内网渗透】——MS14-068漏洞利用以及复现黄金票据

内网渗透——MS14-068漏洞利用以及复现黄金票据


文章目录

  • 内网渗透——MS14-068漏洞利用以及复现黄金票据
    • @[toc]
    • 一:环境搭建
    • 二:kerberos认证流程图
      • 2.1**Kerberos 认证流程**
      • 2.2PAC
    • 三:**MS14-068漏洞利用思路**
    • 四.Kerberos域用户提权漏洞(MS14-068)分析
      • 4.1漏洞分析
      • 4.2漏洞利用
    • 五:实验过程【MS14-068注入过程】
      • **5.1用ms14-068工具生成伪造的kerberos协议认证证书**
      • 5.2PAC实验
    • 六:黄金票据和白银票据
      • 1.概念
      • 2,实验过程
      • 3.黄金票据和白银票据的区别

一:环境搭建

域控制器(DC)—— Kerberos 的“认证服务器”——Windows8

用户机(Client)—— Kerberos 的“客户端”——Windows10

设备可能角色说明
WIN10Client(用户机)普通域成员,用户从此机器登录域,请求 Kerberos 票据访问资源。
WIN8DC(域控制器)安装 Active Directory 并启用 KDC 服务,负责认证和票据分发。
WIN8Service Server如果同时运行文件共享/IIS 等服务,需验证客户端票据(如 ST)。

二:kerberos认证流程图

Kerberos 是一种网络认证协议,主要用于 非对称网络环境(如企业内网)下的 安全身份验证。它由 MIT 开发,现已成为 Active Directory(AD)域 的核心认证机制。

1690012013_64bb896dbaf6450069271.png!small?1690012014722

2.1Kerberos 认证流程

假设用户 Alice 想访问 文件共享服务(\\fileserver)

Step 1: AS-REQ & AS-REP(获取 TGT)

  1. Client → AS(Authentication Service)
    • Alice 输入密码,客户端用她的密码哈希加密当前时间戳,发送给 AS。
  2. AS → Client
    • AS 验证时间戳解密成功 → 返回 TGT(Ticket Granting Ticket)(用 krbtgt 密钥加密,Client 无法解密但可携带)。
    • 同时返回 Session Key(SK_TGS)(用于后续与 TGS 通信,用 Alice 的密码哈希加密)。

📌 TGT 的作用:证明用户已通过初始认证,后续无需重复输入密码。

Step 2: TGS-REQ & TGS-REP(获取 ST)

  1. Client → TGS(Ticket Granting Service)
    • 发送 TGT + 请求的服务名(如 cifs/fileserver) + 用 SK_TGS 加密的认证信息。
  2. TGS → Client
    • 验证 TGT(用 krbtgt 密钥解密)→ 返回 ST(Service Ticket)(用 fileserver 的服务密钥加密)。
    • 同时返回 Session Key(SK_Service)(用于与文件服务器通信,用 SK_TGS 加密)。

📌 ST 的作用:证明用户有权访问特定服务(如文件共享)。

Step 3: AP-REQ & AP-REP(访问服务)

  1. Client → Service Server

    • 发送 ST + 用 SK_Service 加密的认证信息。
  2. Service Server → Client

    • 用自身的服务密钥解密 ST → 验证通过后允许访问。

2.2PAC

我们知道在Kerberos最初的设计的流程里只说了如何证明客户端的真实身份, 并没有说明客户端是否有权限访问该服务,因为在域中不同的权限的用户 能够访问的资源是不同的,因此微软为了解决这个权限为题引入了PAC(特权属性证书)。

引入PAC以后,在AS REP阶段返回的TGT中会包含PAC,TGS REQ阶段中client将带有PAC的TGT发送给KDC,KDC除了验证TGT的合法性以外,还会验证PAC的合法性,如果两者都验证通过,再重新构造新的PAC放在ST里返回给客户端,client带着这个pac去请求服务,服务会根据PAC中的user id和group id来判断client具有的权限。

PAC主要有两个部分组成,一个是用户信息,一个是两个数字签名。

①用户信息:Client的User的SID、Group的SID等信息。根据用户信息去判断权限

②数字签名:这两个签名的作用是确保PAC不被篡改

三:MS14-068漏洞利用思路

1.发起一个PA_PAC_REQUEST里面选择include_pac为false,此时生成的TGT里面是不包含PAC的

2.伪造一个PAC,sid为当前用户的sid,将管理组的sid加入GRouple

3.利用pykek的代码制作一个PAC

4.发起TGS_REQ此时的TGT不包含PAC,然后在enc-authorization-data钟表馆加入伪造的pac

5,利用mimikatz发起pass the ticket Attack

如何伪造PAC。下面为其流程:

1.我们发送AS_REQ时将数据包中的include-PAC修改为False。

2.指定PAC的加密算法和密钥并将pac中的权限改为管理员权限,生成PAC

3.将PAC添加到数据包中发送KDC验证

4.KDC验证通过以后生成一个正常的TGT并返回给客户端

5.到此,我们拿到了高权限的TGT,将其导入内存中,我们就可以使用这个TGT去申请服务票据。

四.Kerberos域用户提权漏洞(MS14-068)分析

4.1漏洞分析

Kerberos 域用户提权漏洞(MS14-068,CVE-2014-6324),所有 Windows 服务器都会收到该漏洞影响。包括 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。

该漏洞可导致活动目录整体权限控制收到影响,允许攻击者将域内任意用户权限提升至域管理级别。

如果攻击者获取了域内任何一台计算机的 shell 权限,同时知道任意域用户的用户名、SID、密码,即可获取域管理员权限。

漏洞产生原理:用户在向 Kerberos 密钥分发中心(KDC)申请TGT(由票据授权服务产生的身份凭证)时,可以伪造自己的 Kerberos 票据。如果票据声明自己有域管理员权限,而KDC在处理该票据时未验证票据的签名,那么,返给用户的TGT就使普通域用户拥有了域管理员权限。该用户可以将TGT发送到KDC,KDC的TGS(票据授权服务)在验证了TGT后,将服务票据(Server Ticket)发送给该用户,而该用户拥有访问该服务的权限,从而使攻击者可以访问域内的资源。

参考文件

https://cloud.tencent.com/developer/article/1760132
https://www.freebuf.com/articles/network/373088.html

4.2漏洞利用

利用 MS14-068 漏洞,攻击者可以使用多种工具和方法,如 pyKEK 工具包、MSF 模块和 goldenPac.py 1 2 。

以下是使用 pyKEK 工具包生成高权限票据的步骤:

[!NOTE]

  1. PoC工具与代码
    1. PyKEK:伪造PAC的Python库。
    2. Mimikatz:执行票据传递攻击。

查看用户的 SID: whoami /user

生成高权限票据: ms14-068.py -u 用户名@域名 -s 用户SID -d 域控制器地址 -p 明文密码

将高权限票据注入内存: kerberos::ptc “TGT_用户名@域名.ccache”

pac不在默认地方也可以被识别

五:实验过程【MS14-068注入过程】

PyKEY 是一个利用 Kerberos 协议进行渗透测试的工具包。 使用 PyKEY 可以生成一张高权限的服务票据,并通过 mimikatz 将服务票据注入内存。

5.1用ms14-068工具生成伪造的kerberos协议认证证书

1)运行文件包内的ms14-068.py文件

ms-14-068.exe -u 域用户@域控名 -p 域用户密码 -s 域用户sid -d 域ip

[!NOTE]

参数说明:

-u 域账号+@+域名称,这里是ts1+@+yunying.lab

-p 为当前用户的密码,即ts1的密码

-s为ts1的SID值,可以通过whoami/all来获取用户的SID值

-d为当前域的域控

在这里插入图片描述

(2)查看域控制器的补丁安装情况

在这里插入图片描述

(3)拿到了域控的机器并且有管理员权限,并且已经拿到这个用户的密码。例如以用户User1的身份登录电脑。通过whoami /user 获取用户的sid

在这里插入图片描述

还可以使用这条命令获取域内所有用户的 SID:

在这里插入图片描述

(4)生成高权限票据 使用 PyKEY 生成高权限票据命令格式:

ms14-068.py -u 域成员@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码

例如本机的密码为:

域成员:krbtgtUser1

域名:test.com

mary 的 sid:S-1-5-21-4240251783-997276874-2853528738-1105

域控制器地址:192.168.70.135

域成员的密码:QAX@123

使用命令如下:

ms14-068.py -u krbtgtuser1@test.com -s S-1-5-21-4240251783-997276874-2853528738-1105 -d 192.168.70.139  -p QAX@123

在这里插入图片描述

在这里插入图片描述

之后会在当前路径下生成一个名为 :TGT_mary@god.org.ccache 的票据文件。

(5)获取到TGT文件以后,用mimikatz.exe将证书写入,从而提升为域管理员。

1.如果目标主机上内存中有票据的话,我们需要把票据都清除:
在这里插入图片描述

2.将高权限票据注入内存

将票据文件复制到 机器下的 mimikatz 目录下,使用 mimikatz 将票据注入内存:

kerberos::ptc "TGT_krbtgtuser1@test.com.ccache"

在这里插入图片描述

显示 Injecting ticket:OK ,表示注入成功!

(6)此时进行验证权限 使用 dir 列出域控制器 C 盘的内容,这个时候就可以访问域控制器 C 盘的内容。

dir \\WIN-ISB0SNPKEPI(DC域)\c$

之前没有权限显示拒绝访问

在这里插入图片描述

注入后获得权限可以查看:

在这里插入图片描述

5.2PAC实验

(1)wireshark抓包,过滤器选择为kerkeros,可以看到为FALSE

在这里插入图片描述

(2)Python2 运行脚本——得到PAC包(没有运行,但可以在文件夹内找到运行后的文件)

在这里插入图片描述

(3)使用Pykek生成伪造票据,使用kerberos测试工具。

在这里插入图片描述

在这里插入图片描述

(4)导入测试工具之中获得最后的票据

在这里插入图片描述

在这里插入图片描述

(5)清除票据信息

在这里插入图片描述

(6)导入票据,有了票据之后有了权限可以访问DC的盘

在这里插入图片描述

获得权限后可以查看:

在这里插入图片描述

六:黄金票据和白银票据

1.概念

6.1 什么是黄金票据?

黄金票据(Golden Ticket)是 Kerberos 认证协议中的一种攻击技术,攻击者利用 域控制器的 KRBTGT 账户的 NTLM Hash 伪造 TGT(Ticket Granting Ticket),从而获得域内任意用户的权限,包括 域管理员(Domain Admin) 权限。

6.2 黄金票据的特点

  • 持久性强:只要 KRBTGT 账户的密码(Hash)未更改,黄金票据就有效(默认情况下,域控每 60 天 自动更改 KRBTGT 密码)。

  • 无需与 KDC(Key Distribution Center)交互:攻击者可以离线生成 TGT。

  • 可伪造任意用户:可以伪造 域管理员 或其他高权限用户身份。

  • 绕过大部分安全检测:由于黄金票据是合法的 Kerberos 票据,许多安全产品难以检测。

6.3 黄金票据攻击的前提条件

  1. 获取 KRBTGT 账户的 NTLM Hash(通常通过 域控提权DCSync 攻击 获取)。

  2. 知道域的 SID(Security Identifier)(可通过 whoami /userGet-ADDomain 获取)。

  3. 知道目标用户名(如 Administrator)。

  4. 攻击者已进入内网(可以访问域控或域内机器)。

2,实验过程

(1)获取 KRBTGT 账户的 NTLM Hash——通过 Mimikatz 提取 KRBTGT Hash

在这里插入图片描述

记录 KRBTGT 的 NTLM Hash:fce53cd1db024b186ca08786b1b5ae81

记录 域的 SID:S-1-5-21-4240251783-997276874-2853528738-500

(2)生成黄金票据

使用 Mimikatz 生成黄金票据

mimikatz # kerberos::golden /user:Administrator /domain:test.com /sid:S-1-5-21-4240251783-997276874-2853528738-500 /krbtgt:fce53cd1db024b186ca08786b1b5ae81 /id:500 /ptt

[!NOTE]

  • /user:伪造的用户(如 Administrator)。
  • /domain:目标域(如 evilcorp.local)。
  • /sid:域的 SID。
  • /krbtgt:KRBTGT 的 NTLM Hash。
  • /id:用户 RID(500 是 Administrator)。
  • /ptt:将票据注入当前会话(Pass-the-Ticket)。

在这里插入图片描述

验证票据是否注入成功:klist

在这里插入图片描述

(3)利用黄金票据访问域控

在这里插入图片描述

如果成功,说明黄金票据生效。

3.黄金票据和白银票据的区别

(1)特征对比

对比项黄金票据(Golden Ticket)白银票据(Silver Ticket)
伪造的票据类型TGT(Ticket Granting Ticket)ST(Service Ticket)
依赖的密钥KRBTGT 账户的 NTLM/AES Key目标服务账户的 NTLM/AES Key(如 CIFS$HTTP$
攻击范围整个域(可访问任何服务)仅限特定服务(如 CIFSLDAPMSSQL
是否需要与 KDC 交互不需要(完全离线伪造)不需要(离线伪造)
持久性长期有效(直到 KRBTGT 密码重置)短期有效(默认 10 小时)
典型攻击目标域控(DC)特定服务(如文件共享、数据库)

(1)攻击方式对比

黄金票据(Golden Ticket)

  • 攻击流程

    1. 获取 KRBTGT 账户的 Hash(通过 DCSync、域控提权等)。
    2. 伪造 TGT,包含任意用户身份(如 Administrator)。
    3. 使用伪造的 TGT 请求 任意服务的 ST,获得高权限访问。
  • 示例命令(Mimikatz)

    kerberos::golden /user:Administrator /domain:evilcorp.local /sid:S-1-5-21-... /krbtgt:aad3b435... /ptt
    

白银票据(Silver Ticket)

  • 攻击流程

    1. 获取 目标服务账户的 Hash(如 CIFS$MSSQL$)。
    2. 直接伪造 ST(无需 TGT),仅针对特定服务。
    3. 访问该服务(如 \\dc\C$)。
  • 示例命令(Mimikatz)

    kerberos::golden /user:Administrator /domain:evilcorp.local /sid:S-1-5-21-... /target:dc.evilcorp.local /service:CIFS /rc4:1a2b3c4d... /ptt
    

黄金票据是 最危险的 Kerberos 攻击之一,攻击者一旦获取 KRBTGT Hash,就可以 长期控制整个域。防御的关键在于 保护 KRBTGT 账户监控异常 Kerberos 活动黄金票据适合长期权限维持,白银票据适合针对性渗透。

FS ‘ 、 ‘ M S S Q L `、`MSSQL MSSQL)。 2. 直接伪造 **ST**(无需 TGT),仅针对特定服务。 3. 访问该服务(如 \dc\C$`)。

  • 示例命令(Mimikatz)

    kerberos::golden /user:Administrator /domain:evilcorp.local /sid:S-1-5-21-... /target:dc.evilcorp.local /service:CIFS /rc4:1a2b3c4d... /ptt
    

黄金票据是 最危险的 Kerberos 攻击之一,攻击者一旦获取 KRBTGT Hash,就可以 长期控制整个域。防御的关键在于 保护 KRBTGT 账户监控异常 Kerberos 活动黄金票据适合长期权限维持,白银票据适合针对性渗透。

http://www.xdnf.cn/news/5419.html

相关文章:

  • 操作系统: 第三章节 :中断和处理机调度
  • Scrapy 核心组件解析:Request Response 的深度应用与实战
  • 缓存(5):常见 缓存数据淘汰算法/缓存清空策略
  • Oracle Goldengate并行复制进程状态查看没有transaction信息
  • 不可导的几种情况
  • ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
  • TypeScript 装饰器详解
  • 论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》
  • 17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--loki
  • Stream流
  • 一周内学完计算机网络课程之二:计算机网络物理层的理解
  • STM32智能窗帘系统:从零到一的开发实战
  • 如何租用服务器并通过ssh连接远程服务器终端
  • 【计算机网络01】 网络组成与三种交换方式
  • Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
  • 【RAG】11种Chunking Strategies分块策略介绍和选择
  • VirtualBox中安装并运行ubuntu-24.04.2-desktop虚拟机
  • Linux基础整理
  • Docker Compose 完全指南:从入门到生产实践
  • java的Stream流处理
  • 数据库事务以及JDBC实现事务
  • 模型欠拟合是什么?
  • 基于VSCode + PlatformIO平台的ESP8266的DS1302实时时钟
  • AI日报 · 2025年05月11日|传闻 OpenAI 考虑推出 ChatGPT “永久”订阅模式
  • Linux中常见开发工具简单介绍
  • 05.three官方示例+编辑器+AI快速学习three.js webgl - animation - skinning - ik
  • Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
  • MySql(进阶)
  • 【大模型】AI智能体Coze 知识库从使用到实战详解
  • 基于Dify实现对Excel的数据分析