NTLM协议
相当于读书笔记吧,这下面都是我手打的,图也是我画的,手好痛。也确实有段时间没有更新博客了,主要是方向的转变,不过网安依旧是我的主要攻略目标好吧。
NTLM协议是微软用于Windows身份验证的主要协议之一。从早期的SMB到因为安全问题改成的LM再最后变成NTLM协议.NTML即可用于域环境身份验证,还可为SMB、HTTP、LDAP、SMTP等上层微软应用提供身份验证。
SSPI和SSP的概念
SSPI是Windows定义的一套接口,该接口定义了与安全有关的功能函数,包含但不限于,身份验证机制,为其他协议提供的Session Security机制。
但是SSPI只是定义了一套接口函数,并没有实现具体内容。
SSP是SSPI的实现者,微软自己实现了很多SSP,用于提供安全功能,下面介绍几个比较经典的。
1 | NTLP SSP:windows NT 3.51中引入的,为windows2000以前的客户端服务器域和非域身份验证提供NTLM查询\响应身份验证。 |
因为SSPI中定义了域Session security有关的API,所以上层应用题用任何SSP与远程的服务进行身份验证后,此SSP都会为本次连接生成一个随机的key,这个随机key被成为session key.在系统层面,SSP就是一个dll,用来实现身份验证.不同的SSP,实现的身份验证机制是不一样的,比如NTLM SSP,实现的是一种基于质询/响应的身份验证机制,而Kerberos SSP实现的是基于Ticket的身份验证机制。我们可以编写自己的SSP,然后注册到操作系统中,
LM Hash算法
LM是微软退出的一个身份认证协议,使用的加密算法是LM HASH。虽然比较容易被破解,但是为了保证系统的兼容性,windows就知识将LM HASH禁用,(从Windows vista 和windows 2008开始就禁用了),LM HASH的明文密码被限定在14位以内,也就是说,如果要停止使用LM HASH,将用户的密码设置为14位以上就可以了。
1 | LM HASH的加密流程如下 |
NTLM Hash算法
从Windows vista和windows servers 2008开始,默认禁用了LM Hash的支持。也就是说,默认只存储了NTLM Hash的值。(用LM的基本只有三个 2000 XP server2002)
1 | 加密流程如下: |
用户的密码经过NTLM Hash加密后存储在C:\Windows\System32\config\SAM
中
在用户输入密码进行本地认证的过程中,所有操作都是本定进行的,系统将用户输入的密码转换成NTLM Hash在SAM文件中进行比较,如果相同就是密码正确.当用户注销,重启,锁屏后,操作系统会让winlogon.exe显示登录界面,也就是输入框。当winlogn.exe接收输入后,将密码交给lsass.exe进程,开始进行比较。lsass.exe进程中会存一份明文密码,我们使用的mimikatz就是从lsass.exe进程中抓去明文密码或者Hash密码。
NTLM协议认证
NTLM(NT LAN MANAGER)是一种网络认证协议,它是基于质询(Challenge)/响应(Response)认证机制的一种认证模式。
NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。
NTLM协议的认证过程分为三步:
1、协商:主要用于确认双方协议版本(NTLM v1/NTLM v2)
2、质询:就是挑战/响应认证机制起作用的范畴
3、验证:验证主要是在质询完成后,验证结果,是认证的最后一步
质询的完整过程:
1、客户端向服务端发送用户信息(用户名)请求
2、服务器接受到请求,判断本地账户列表是否有用户名,如果有,生成一个16位的随机数,被称之为“Challenge”,使用登陆用户名对应NTLM Hash加密Challenge(16位随机字符),生成Challenge1,生成一个Net-NTLM Hash存在内存中,同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端。
3、客户端接收到Challenge后,使用将要登陆的账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
4、验证,服务器接收到客户端的Response后,对比Challenge1与Response是否相等,若相等,则认证通过。
NTLM是底层的认证协议,必须嵌入上层应用协议中,消息都传输依赖于使用NTLM的上层协议,比如SMB,HTTP等。
这里本来是有一个抓包实验的,但是我这边才装的电脑就不弄了。
1 | 当应用SMB协议传输NTLM协议的时候,NTLM认证的数据包都是放在GSS-API中的。 |
1 | 一些小知识: |
NTML和NTLM v2的区别:
v1和v2是NTLM身份认证协议,但是是不同版本,只是其中的chalenge值与加密算法不同而已。
下面介绍lmcompatibilityLevel
我们可以手动修改本地安全策略进行lmcompatibilityLevel值的修改。在本地安全策略中的安全选项中的网络安全中进行设置。或者也可以通过修改注册表进行修改。
NTLM协议的安全问题
从上面的NTLM认证的流程中可以看到,在type3消息中是使用用户密码Hash进计算的。因此,当没有拿到用户的明文密码而只拿到Hash的情况下,可以进行Pass The Hash(PTH)攻击,也就是常说的哈希传递攻击。同样,还是在type3消息中,存在Net-NTLM hash,当获得了Net-NTLM hash之后,可以进行中年人攻击,重放Net-NTLM hash,这种手法也就是常说的NTLM Relay(NTLM中继)攻击。由于NTLM v1协议加密过程存在天然缺陷,因此可以队Net-NTLM v1 Hash进行破解,得到NTLM Hash之后即可横向移动。下面介绍一下三中基于NTLM的攻击手法
1.Pass The Hash
Pass The Hash攻击是内网横向移动的一种方式。由于NTLM认证过程中使用的是用户密码的NTLM hash来进行加密,因此当或渠道了用户密码的NTLMhash而没有解出明文密码的时候,就可以利用此NTLMhash来进行哈希传递攻击。对内网其他机器进行hash碰撞,碰撞到使用相同密码的机器。然后通过135或者445端口横向移动。这本书后面也会写详细的过程,我们后面再继续进行相关的介绍。
2.NTLM Relay
严格意义上这个名字并不正确,应该叫Net-NTLM Relay。他发生在NTLM认证的第三步,在response消息中存在Net-NTLM hash,或则Net-NTLM hash后,可以进行中间人攻击,重放Net-NTLM,同样,我们后续会进行介绍.
3.Net-NTLM v1 Hash破解
由于NTLM v1存在天然缺陷,只要获取到Net-NTLM v1 hash,就能破解为NTLM Hash,这与密码强度无关。在域环境中,这一点更为明显,因为在域环境中可以直接使用hash连接目标机器。如果域控允许发送NTLM v1响应,我们就可以通过与域控机器进行NTLM认证,然后抓去域控的Net-NTLMv1 hash,然后破解为NTLM hash,使用域控的机器账户和Hash即可到处域内所有用户Hash。
但是有一个缺点,自从windows vista开始,微软就默认使用NTLM v2身份认证,想要降级到v1,需要手动修改,并且需要目标主机的管理员权限。本地安全策略,安全设置,本地策略,安全选项,网络安全:LAN管理器身份验证级别
将其修改成进发送NTLM响应。
或者也可以通过执行命令修改注册表来达到这个效果。
Net-NTLMv1的利用思路
由于Net-NTLMv1的脆弱性,在控制Challenge后可以在短时间内通过彩虹表还原出用户的ntlm hash,所以在利用上首选的是将Win7环境下的默认Net-NTLMv2降级到Net-NTLMv1,获取本机的通信数据,还原出ntlm hash。
实现工具: InternalMonologue
下载地址: https://github.com/eladshamir/Internal-Monologue
注意点:
1、自Windows Vista/Server2008开始起,微软默认使用Net-NTLMv2协议,想要降级到Net-NTLMv1,首先需要获得当前系统的管理员权限。
2、修改注册表需要管理员权限
修改注册表开启Net-NTLMv1:
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 2 /f |
为确保Net-NTLMv1开启成功,还需要修改两处注册表键值:
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f |
Net-NTLMv1的格式为:username::hostname:LM response:NTLM response:challenge
1 | Administrator::adexx-PC:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:1122334455667788 |
使用hashcat进行字典破解,参数如下:
1 | hashcat -m 5500 hash.txt password.txt |
优点:
1、这种方式不会对lsass.exe进程进行操作
2、同本地NTLM SSP进行交互,不会产生流量
3、没有进行NTLM认证,不会产生日志
补充:
Net-NTLMv2的格式username::domain:challenge:HMAC-MD5:blob
如果以普通用户权限执行InternalMonologue,同样能够获得当前用户的Net-NTLMv2数据包(注意是的Net-NTLMv2的数据包,不是Net-NTLMv1,因为没有权限去进行降级到Net-NTLMv1),通过hashcat进行破解,也能获得当前用户的明文口令
如上图,获得Net-NTLMv2的数据包如下:
1 | yuyonghu01::PENTEST:1122334455667788:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad |
使用hashcat进行字典破解,参数如下:
1 | hashcat -m 5600 hash.txt password.txt |
同时找资料的时候也发现了很多优秀的文章,大家复习的时候可以进行相关的借鉴。