MWR-CyberSec/PXEThief
GitHub: MWR-CyberSec/PXEThief
针对 Microsoft Endpoint Configuration Manager 操作系统部署功能的凭据提取与解密工具,支持通过 PXE 启动从分发点获取高权限域账户。
Stars: 414 | Forks: 67
# PXEThief
PXEThief 是一组工具集,实现了 DEF CON 30 演讲 _Pulling Passwords out of Configuration Manager_ (https://forum.defcon.org/node/241925) 中讨论的攻击路径,针对 Microsoft Endpoint Configuration Manager(或 ConfigMgr,通常仍被称为 SCCM)中的操作系统部署 (OSD) 功能。它允许从配置的网络访问账户 (https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/hierarchy/accounts#network-access-account) 收集凭据,以及从为“All Unknown Computers”集合配置的 ConfigMgr 集合变量中存储的任何任务序列账户或凭据中收集凭据。根据我的个人经验,这些 Active Directory 账户通常拥有过高的权限,允许在域中的某处将权限提升为管理访问权限。
该工具可能实施的最严重攻击可能涉及:在分发点上针对“All unknown computers”支持 PXE 启动,且没有密码或使用弱密码。如前所述,暴露于 OSD 的 ConfigMgr 账户的过高权限,随后可能允许仅凭对目标环境的网络访问就执行完整的 Active Directory 攻击链。
## 使用说明
```
python pxethief.py -h
pxethief.py 1 - Automatically identify and download encrypted media file using DHCP PXE boot request. Additionally, attempt exploitation of blank media password when auto_exploit_blank_password is set to 1 in 'settings.ini'
pxethief.py 2 - Coerce PXE Boot against a specific MECM Distribution Point server designated by IP address
pxethief.py 3 - Attempt to decrypt a saved media variables file (obtained from PXE, bootable or prestaged media) and retrieve sensitive data from MECM DP
pxethief.py 4 - Attempt to decrypt a saved media variables file and Policy XML file retrieved from a stand-alone TS media
pxethief.py 5 - Print the hash corresponding to a specified media variables file for cracking in Hashcat
pxethief.py 6 - Retrieve task sequences using the values obtained from registry keys on a DP
pxethief.py 7 - Decrypt stored PXE password from SCCM DP registry key (reg query HKLM\software\microsoft\sms\dp /v Reserved1)
pxethief.py 8 - Write new default 'settings.ini' file in PXEThief directory
pxethief.py 10 - Print Scapy interface table to identify interface indexes for use in 'settings.ini'
pxethief.py -h - Print PXEThief help text
```
`pxethief.py 5 ` 应用于生成媒体变量文件的“哈希”,该哈希可用于与发布在 [https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module](https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module) 的 Hashcat 模块配合进行密码猜测攻击。
## 配置选项
PXEThief 主文件夹中包含的一个文件用于设置更多的静态配置选项。如下所示:
```
[SCAPY SETTINGS]
automatic_interface_selection_mode = 1
manual_interface_selection_by_id =
[HTTP CONNECTION SETTINGS]
use_proxy = 0
use_tls = 0
[GENERAL SETTINGS]
sccm_base_url =
auto_exploit_blank_password = 1
```
### Scapy 设置
* `automatic_interface_selection_mode` 将尝试自动确定 Scapy 使用的最佳接口,以方便使用。它通过两种主要技术实现这一点。如果设置为 `1`,它将尝试使用能够到达机器默认网关的接口作为输出接口。如果设置为 `2`,它将查找第一个发现的、具有非自动配置或本地主机 IP 地址的 IP 地址的接口。在某些情况下,这将无法选择到合适的接口,因此您可以通过 'manual_interface_selection_by_id' 强制使用特定接口。
* `manual_interface_selection_by_id` 允许您指定希望 Scapy 使用的接口的整数索引。此文件中使用的 ID 应通过运行 `pxethief.py 10` 获取。
### 通用设置
* `sccm_base_url` 对于覆盖工具将与之通信的管理点 很有用。如果 DNS 无法解析(因此无法使用从媒体变量文件读取的值),或者您已识别出多个管理点并希望将流量发送到特定管理点,这将非常有用。应以基本 URL 的形式提供,例如 `http://mp.configmgr.com`,而不是 `mp.configmgr.com` 或 `http://mp.configmgr.com/stuff`。
* `auto_exploit_blank_password` 更改 `pxethief 1` 的行为,以自动尝试利用未受密码保护的 PXE 分发点。将其设置为 `1` 将启用自动利用,而将其设置为 `0` 将打印您应用于下载媒体变量文件的 tftp 客户端字符串。请注意,几乎所有情况下您都希望将其设置为 `1`,因为未受密码保护的 PXE 使用的是在您请求分发点执行 PXE 启动时收到的 DHCP 响应中发送的二进制密钥。
### HTTP 连接设置
在此版本中未实现
## 安装说明
1. 创建一个新的 Windows 虚拟机
2. 安装 Python(从 https://www.python.org/ 或通过商店安装,两者均可)
3. 通过 pip 安装所有依赖项 (`pip install -r requirements.txt`)
4. 安装 Npcap (https://npcap.com/#download)(或 Wireshark,它捆绑了 Npcap)以供 Scapy 使用
5. 将虚拟机网桥连接到运行配置了 PXE/OSD 的 ConfigMgr 分发点的网络
6. 如果使用 `pxethief.py 1` 或 `pxethief.py 2` 来识别和生成媒体变量文件,请确保工具使用的接口设置正确,如果不正确,请根据 `pxethief.py 10` 获取的正确索引 ID 在 'settings.ini' 中手动设置
## 限制
* HTTP 请求的代理支持 - 目前只能在代码中配置。可以在 `pxethief.py` 的第 35 行启用代理支持,并在第 693 行设置代理地址。我计划在代码库的下一次更新中将此功能移至 'settings.ini' 进行配置
* HTTPS 和双向 TLS (mutual TLS) 支持 - 目前未实现。不过可以使用拦截代理来处理,根据我的经验,这效果很好;为此,您需要配置如上所述的代理
* Linux 支持 - PXEThief 目前使用 `pywin32` 来利用一些内置的 Windows 加密函数。这在 Linux 上不可用,因为 Windows 加密 API 在 Linux 上不可用 :P 然而,`pxethief.py` 中的 Scapy 代码在 Linux 上是完全可用的,但您需要修补(至少)`win32crypt` 的导入才能使其在 Linux 下运行
## 概念验证说明
预计在使用此工具时会遇到错误处理方面的问题;ConfigMgr 中的每件事都有细微的差别,虽然为了该工具的发布我已经大幅改进了错误处理,但这绝不意味着已经完成。如果出现边缘情况失败,请提出详细的问题或修复它并发起 pull request :) 我会审查这些问题,看看在哪里可以进行合理的改进。如果您要在生产环境中运行它,请阅读代码/观看演讲并了解发生了什么。请记住许可条款——即使用本工具的风险由您自己承担。
## 相关工作
[识别和从 SCCM/MECM 任务序列中检索凭据](https://www.mwrcybersec.com/research_items/identifying-and-retrieving-credentials-from-sccm-mecm-task-sequences) - 在这篇文章中,我解释了在获得有效的 OSD 证书后,如何查找、下载和解密 ConfigMgr 策略的完整流程。我还想重点介绍这篇文章中的前两个参考文献,因为它们展示了当前正在进行的一些非常有趣的 SCCM 进攻性研究。
[DEF CON 30 幻灯片](https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20presentations/Christopher%20Panayi%20-%20Pulling%20Passwords%20out%20of%20Configuration%20Manager%20Practical%20Attacks%20against%20Microsofts%20Endpoint%20Management%20Software.pdf) - 演讲幻灯片链接
## 作者署名
版权所有 (C) 2022 Christopher Panayi, MWR CyberSec
标签:DefCon, MECM, OSD部署, PE 加载器, PXE启动, Python, SCCM, StruQ, Web报告查看器, 凭据窃取, 协议分析, 安全测试, 密码提取, 微软端点配置管理器, 攻击性安全, 数据解密, 无后门, 未知计算机集合, 权限提升, 活动目录, 网络安全, 网络引导, 网络访问账户, 逆向工具, 配置管理器安全, 隐私保护