pyWhisker 认证方式全解析:NTLM、Kerberos、Pass-the-Hash 等8种方法
pyWhisker 认证方式全解析:NTLM、Kerberos、Pass-the-Hash 等8种方法
【免费下载链接】pywhiskerPython version of the C# tool for "Shadow Credentials" attacks项目地址: https://gitcode.com/gh_mirrors/py/pywhisker
pyWhisker 是一款用于“Shadow Credentials”攻击的 Python 工具,它能够操纵目标用户或计算机的msDs-KeyCredentialLink属性,从而实现对目标对象的完全控制。作为 C# 工具 Whisker 的 Python 等效版本,pyWhisker 基于 Impacket 和 PyDSInternals 库开发,为 UNIX 系统提供了完整的攻击原语利用能力。
核心认证方法概述
pyWhisker 支持多种身份验证方式,满足不同场景下的攻击需求。这些认证方法涵盖了 NTLM、Kerberos 等主流协议,以及多种“Pass-the-X”技术,为渗透测试人员提供了灵活的选择。
NTLM 认证机制
1. 明文密码认证
这是最基础的 NTLM 认证方式,直接使用用户名和明文密码进行身份验证。在 pyWhisker 中,通过-u指定用户名,-p指定密码即可实现。
2. Pass-the-Hash (PtH)
Pass-the-Hash 允许攻击者使用用户的 NT/LM 哈希值而非明文密码进行认证。在 pyWhisker 中,通过-H参数提供哈希值(格式为LMhash:NThash)即可利用此技术,无需获取用户的实际密码。
Kerberos 认证机制
3. 明文密码 Kerberos 认证
与 NTLM 明文认证类似,但通过 Kerberos 协议进行。使用-k参数启用 Kerberos 认证,并结合-u和-p提供的凭据进行身份验证。
4. Pass-the-Key (PtK) / Overpass-the-Hash (OPtH)
这种方法利用用户的 AES 密钥进行 Kerberos 认证。通过--aes-key参数提供 128 位或 256 位的 AES 密钥,实现无需明文密码的 Kerberos 身份验证。
5. Pass-the-Cache (PtC)
Pass-the-Cache 是一种 Pass-the-Ticket 技术,它利用存储在本地缓存文件(.ccache)中的 Kerberos 凭据进行认证。当使用-k参数且未提供其他凭据时,pyWhisker 会自动尝试从缓存文件中获取有效的 Kerberos 凭据。
证书与通道认证
6. LDAP over Schannel (Pass-the-Cert)
通过 Schannel 协议使用证书进行 LDAP 认证。需要提供用户证书(PEM 格式)和私钥文件(PEM 格式),分别通过-crt和-key参数指定,实现基于证书的安全身份验证。
7. 无密码认证
使用--no-pass参数可以在不提供密码的情况下进行认证,通常与-k(Kerberos)结合使用,适用于已获取有效的 Kerberos 票证缓存的场景。
8. 跨域认证
pyWhisker 支持跨域操作,通过-td/--target-domain参数指定目标域,当认证用户与目标对象不在同一域时,可实现跨域的msDs-KeyCredentialLink属性操作。
实际操作演示
列出和获取 KeyCredentials 信息
使用list动作可以查看目标账户当前的 KeyCredentials ID 和创建时间,而info动作则能展开显示 KeyCredential 结构的详细信息,包括 RSA 公钥参数等。
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "list" python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "info" --device-id 6419739b-ff90-f5c7-0737-1331daeb7db6pyWhisker 列出和获取 KeyCredentials 信息的操作界面,展示了设备 ID 和详细的 KeyCredential 结构数据
添加新的 KeyCredential
pyWhisker 能够生成 RSA 密钥和 X.509 证书,并将其添加到目标的msDs-KeyCredentialLink属性中。支持 PEM 和 PFX 两种证书格式导出。
PEM 格式示例
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test2 --export PEMpyWhisker 添加 PEM 格式 KeyCredential 的过程,包括证书生成和属性更新
PFX 格式示例
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test1pyWhisker 添加 PFX 格式 KeyCredential 的操作输出,显示了证书生成和存储路径
导出和导入 KeyCredentials
通过export动作可以将msDs-KeyCredentialLink属性中的 KeyCredentials 解析并保存为 JSON 格式,而import动作则能从 JSON 文件恢复该属性。
pyWhisker 导出 KeyCredentials 为 JSON 文件的操作结果,展示了导出的数据结构
pyWhisker 从 JSON 文件导入 KeyCredentials 并恢复属性的过程
攻击前置条件与注意事项
使用 pyWhisker 进行“Shadow Credentials”攻击需要满足以下前置条件:
- 目标域功能级别必须为 Windows Server 2016 或更高
- 目标域至少有一台运行 Windows Server 2016 或更高版本的域控制器
- 攻击中使用的域控制器必须拥有自己的证书和密钥
- 攻击者必须控制一个能够修改目标用户或计算机
msDs-KeyCredentialLink属性的账户
值得注意的是,用户对象无法编辑自身的msDs-KeyCredentialLink属性,但计算机对象可以。不过,计算机对象仅能在不存在 KeyCredential 时添加新的凭据。此外,确保攻击主机与 KDC(通常是域控制器)之间的时间同步至关重要,pyWhisker 生成的证书默认有效期为前后各 40 年,以避免时间偏差导致的问题。
总结
pyWhisker 作为一款功能强大的“Shadow Credentials”攻击工具,支持多达 8 种不同的认证方式,为渗透测试人员提供了灵活多样的攻击路径选择。无论是基于 NTLM 的 Pass-the-Hash,还是 Kerberos 的各种“Pass-the-X”技术,亦或是基于证书的 Schannel 认证,pyWhisker 都能胜任。通过本文的解析,希望能帮助安全从业者更好地理解和使用这款工具,从而在实际测试中发现并防范相关安全风险。
要开始使用 pyWhisker,可通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/py/pywhisker【免费下载链接】pywhiskerPython version of the C# tool for "Shadow Credentials" attacks项目地址: https://gitcode.com/gh_mirrors/py/pywhisker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
