一、介绍
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/ : -dc-ip -request -outputfile
3. 使用GetPrincipal 提取目标用户的NTLM凭据
使用“GetPrincipal.py”脚本提取目标用户的NTLM凭据:
python GetPrincipal.py/ : -request -format hashcat -outputfile
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 进行了详细的介绍,包括用途,原理以及使用方法等。同时,通过防御措施的介绍提醒大家加强系统安全防御。