Java教程

【Windows身份认证】NTLM

本文主要是介绍【Windows身份认证】NTLM,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

前几天自己在学习域渗透时突然对Windows的身份认证机制产生了兴趣,但看了好几天自己还是懵懵懂懂,期间自己看了许多师傅的优质文章,也做了一些例子的复现,于是有了这篇文章,可以说是自己的笔记或总结吧。

由于自己了解的也不是很深入,这篇文章写的技术可能比较浅,像NTLM和Kerberos的中间过程并没有写的很详细。自己还画了简单的过程图来加深理解和记忆,图画的不好,这些还请各位师傅见谅。

如果本文的内容有错误,还请各位师傅指正。

Windows身份认证机制

Windows身份认证机制主要有NTLMKerberos两种,其中NTLM主要被用在本地以及工作组环境,而在域环境中优先使用的是Kerberos。

在早期的windows系统(win2000以前)还有一种认证方式叫LM,但该方式的加密算法较脆弱,基本已经被淘汰掉了。

NTLM

NTLM(NT LAN Manager)是Windows中最常见的身份认证方式,主要有本地认证和网络认证两种情况。

NTLM Hash

在介绍NTLM之前,需要介绍NTLM中最关键的凭证:NTLM Hash。正常的明文密码加密为NTLM Hash的方法如下:

password ----> 十六进制编码 ----> Unicode转换 ----> MD4加密 ----> 得到NTLM Hash

例如:

admin -> hex(16进制编码) = 61646d696e

61646d696e -> Unicode = 610064006d0069006e00

610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

本地认证

在本地认证过程中,当用户进行注销、重启、开机等需要认证的操作时,首先Windows会调用winlogon.exe进程(也就是我们平常见到的登录框)接收用户的密码。

之后密码会被传送给进程lsass.exe,该进程会先在内存中存储一份明文密码,然后将明文密码加密为NTLM Hash后,与Windows本地的SAM数据库(%SystemRoot%\system32\config\SAM)中该用户的NTLM Hash对比,如果一致则通过认证

 

 

网络认证

工作组环境

网络认证需要使用NTLM协议,该协议基于挑战(Challenge)/响应(Response)机制。

  1. 首先客户端向服务端发送用户名以及本机的一些信息(此处更正)
  2. 服务端接收到客户端的用户名后,先生成一个随机的16位的Challenge(挑战随机数),本地储存后将Challenge返回给客户端
  3. 客户端接收到服务端发来的Challenge后,使用用户输入密码的NTLM Hash对Challenge进行加密生成Response(也叫Net NTLM Hash),将Response发送给服务端
  4. 服务端接收到客户端发来的Response,使用数据库中对应用户的NTLM Hash对之前存储的Challenge进行加密,得到的结果与接收的Response进行对比,如果一致则通过认证

 

 

引用地址:https://xz.aliyun.com/t/6600

这篇关于【Windows身份认证】NTLM的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!