GetPrincipal详解

发布时间:2023-05-23

一、介绍

GetPrincipal 是一种微软开发的 Windows 认证加密框架。它可以用于从 Kerberos 和 NTLM 相互关联的网络环境中提取凭据,用于 Kerberos 到 NTLM 的跃点攻击。 GetPrincipal常用于渗透测试人员使用,主要攻击大型组织内部网络环境的 Windows 认证加密系统。当然,GetPrincipal也可以用于加强系统防御。

二、用途

GetPrincipal 通常用于以下场景:

  1. 攻击者通过漏洞入侵了目标网络,利用 GetPrincipal 提取目标系统当前用户的 NTLM 和 Kerberos 凭据。这使得攻击者可以使用这些凭据来执行 Kerberos 到 NTLM 的跃点攻击。
  2. 安全团队可以使用 GetPrincipal 来测试他们的环境中是否存在跨网络的 NTLM 中继。
  3. 安全团队可以使用 GetPrincipal 来排查他们的环境中是否存在窃听行为。

三、原理

GetPrincipal 可以用于 Kerberos 到 NTLM 的跃点攻击。Windows 系统使用 Kerberos 认证机制来验证用户和计算机之间的身份,而 NTLM 制定了一种备用的认证机制。在联合身份验证(Kerberos 和 NTLM)的环境中,攻击者可以通过 Kerberos 到 NTLM 的跃点攻击来获取目标用户的 NTLM 凭据,然后继续使用这些凭据提升为更高的权限。

四、使用方法

1. 安装 GetPrincipal

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip install -r requirements.txt
pip install .

2. 抓取目标用户的凭据

使用 GetUserSPNs.py 脚本抓取目标用户的 Kerberos 凭据,并将凭据写入到 outputfile 文件中:

python GetUserSPNs.py <domain_name>/<user_name>:<password> -dc-ip <domain_controller_ip> -request -outputfile <output_file>

3. 使用 GetPrincipal 提取目标用户的 NTLM 凭据

使用 GetPrincipal.py 脚本提取目标用户的 NTLM 凭据:

python GetPrincipal.py <domain_name>/<user_name>:<password> -request -format hashcat -outputfile <output_file>

4. 利用 NTLM 凭据钓鱼(以 Mimikatz 为例)

将获取的 NTLM 凭据使用反弹攻击的方式,调用域控制器的 lsass.exe 进程,执行 mimikatz 获取明文密码,首先需要获取到存在漏洞的机器的管理员权限,Windows 系统中的文件共享(SMB)协议会以明文输送密码:

mimikatz # sekurlsa::pth /user:[domain]\[username] /domain:[domain] /ntlm:[ntlm]

五、安全加固

对于 NTLM 中继攻击和 Kerberos 到 NTLM 的跃点攻击,建议采取以下防御措施:

  1. 禁用 Kerberos 委派,或者只允许跳转到特定的服务器或服务。
  2. 限制用户的管理权限,并寻找和修复可能导致密码泄露的漏洞。
  3. 监控对 NTLM 计算机帐户的尝试访问。使用日志记录和分析工具,如 Windows 安全事件日志和 ELK Stack。

六、总结

本文对 GetPrincipal 进行了详细的介绍,包括用途、原理以及使用方法等。同时,通过防御措施的介绍提醒大家加强系统安全防御。