Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[ffffffff0x] 浅谈windows认证原理

[ffffffff0x] 浅谈windows认证原理

原创
作者头像
r0fus0d
修改于 2020-12-28 03:55:05
修改于 2020-12-28 03:55:05
1.9K0
举报
文章被收录于专栏:ffffffff0xffffffff0x

前言

在实战渗透中,常常存在把windows主机作为跳板以此进行横向移动的情况,其实际原理并不难。本篇来谈windows系统的认证原理,并演示抓取密码相关场景。


本地认证

在 Windows 系统中本机用户的密码 Hash 是放在本地的 SAM 文件里面,域内用户的密码 Hash 是存在于域控的 NTDS.DIT 文件里。

sam 的简称是Security Account Manager,安全账户管理器。

Windows XP、Windows Vista、Windows 7、Win 8.1 Win 10 的用户密码以 hash 形式存储在 %SystemRoot%\system32\config\sam 数据库文件中。被保存的 hash 分为 LM HashNTLM hash;微软在 Windows NT 4.0 中引入 SYSKEY 对 SAM 文件加密。

所谓哈希(hash),就是使用一种加密函数进行计算后的结果。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,再返回一个固定长度的字符串。现在已经有了更新的 NTLMv2 以及 Kerberos 验证体系。Windows 加密过的密码口令,我们称之为 hash. Windows 的系统密码 hash 默认情况下一般由两部分组成:LM-hash和 NTLM-hash。

登录系统的时候,系统会自动对比 SAM 文件中的密码与键入的密码。若相同,则认证成功。

操作系统启动之后,SAM 文件将被锁定。这意味着操作系统运行之时,用户无法打开或复制 SAM 文件。除了锁定,整个 SAM 文件加密,且不可见。

LM Hash

LAN Manager(LM)哈希是 Windows 系统所用的第一种密码哈希算法,是一种较古老的 Hash。在 LAN Manager 协议中使用,非常容易通过暴力破解获取明文凭据。它只有唯一一个版本且一直用到了 NT LAN Manager(NTLM)哈希的出现,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系统中,LM 哈希算法是默认关闭的,LM 算法是在 DES 基础上实现的,不区分字母大小写。

  • 生成原理
    1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
    2. 密码的16进制字符串被分成两个 7byte 部分。每部分转换成比特流,并且长度位 56bit,长度不足用0在左边补齐长度
    3. 再分 7bit 为一组,每组末尾加 0,再组成一组
    4. 上步骤得到的二组,分别作为 key 为 KGS!@#$% 进行 DES 加密。
    5. 将加密后的两组拼接在一起,得到最终 LM HASH 值。

NTLM Hash

NT LAN Manager(NTLM)哈希是 Windows 系统认可的另一种算法,用于替代古老的 LM-Hash,一般指 Windows 系统下 Security Account Manager(SAM)中保存的用户密码 hash,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系统中,NTLM 哈希算法是默认启用的。

当用户登录时,将用户输入的明文密码加密成 NTLM Hash,与 SAM 数据库文件中的 NTLM Hash 进行比较。

渗透测试中,通常可从 Windows 系统中的 SAM 文件和域控的 NTDS.dit 文件中获得所有用户的 hash,通过 Mimikatz 读取 lsass.exe 进程能获得已登录用户的 NTLM hash

  • 生成原理
    1. 先将用户密码转换为十六进制格式。
    2. 将十六进制格式的密码进行 Unicode 编码。
    3. 使用 MD4 摘要算法对 Unicode 编码数据进行 Hash 计算

下面是使用python快速生成ntlm hash的代码

代码语言:txt
AI代码解释
复制
python2 -c 'import hashlib,binascii; print binascii.hexlify(hashlib.new("md4", "P@ssw0rd".encode("utf-16le")).digest())'

本地认证流程

winlogon.exe -> 接收用户输入 -> lsass.exe -> 认证

  1. 当刚开机、注销等操作后,winlogon.exe 进程会显示一个登录界面要求输入用户名和密码。
  2. 输入用户名和密码后,会被 winlogon.exe 获取,然后将其发送给 lsass.exe 进程。
  3. lsass.exe 将明文密码计算得到 NT Hash(不考虑LM)。
  4. 之后会将用户名和计算得到的 NT Hash 拿到 SAM 数据库去查找比对。
  • Windows Logon Process(即 winlogon.exe),是Windows NT 用户登陆程序,用于管理用户登录和退出。
  • LSASS 用于微软 Windows 系统的安全机制。用于本地安全和登陆策略。

网络认证

在内网渗透中,经常遇到工作组环境。工作组环境是一种逻辑上的网络环境(工作区),隶属于工作组的机器之间,无法互相建立完美的信任机制且只能点对点,没有信托机构,是比较落后的认证方式。

假设 A 主机与 B 主机属于同一个工作组环境,A 若想访问 B 的资料,需要将存在于 B 主机上的账户凭证发送至 B 主机,经过认证后方能访问 B 主机上的相关资料。

这是我们接触比较多的 SMB 共享文件的案例,SMB 的默认端口是 445。

早期 SMB 协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称 LM,它很容易被破解,就又有了 NTLM 以及 Kerberos。

Net-NTLM hash

NTLM 是一种网络认证协议,以 NTLM Hash 作为凭证进行认证。NTLM Hash 长度为32位,由数字和字母组成,采用挑战/响应(Challenge/Response)的消息交换模式,流程如下:

  1. 客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码 hash
  2. 服务器接收到请求后,生成一个16位的随机数(这个随机数被称为 Challenge),明文发送回客户端。使用存储登录用户密码 hash 加密 Challenge,获得 Challenge1
  3. 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,获得 Challenge2(这个结果被称 response),将 response 发送给服务器
  4. 服务器接收客户端加密后的 response,比较 Challenge1 和 response,如果相同,验证成功

在以上流程中,登录用户的密码 hash 即 NTLM hash,response 中包含 Net-NTLM hash

在 NTLM 认证中,NTLM 响应分为 NTLM v1,NTLMv2,NTLM session v2 三种协议,不同协议使用不同格式的 Challenge 和加密算法

所以也就存在不同协议的 Net-NTLM hash,即 Net-NTLM v1 hash,Net-NTLM v2 hash

NTLMv2 协议

NTLMv1 和 NTLMv2 的加密因素都是 NTLM Hash,而最显著的区别就是 Challenge 和加密算法不同:

  • Challage: NTLMv1 的 Challenge 有8位,NTLMv2 的 Challenge 为16位。
  • Net-NTLM Hash:NTLMv1 的主要加密算法是 DES,NTLMv2 的主要加密算法是 HMAC-MD5。

抓取密码

下面使用mimikatz进行抓取密码的测试,目标机器为win2008

先提权

代码语言:txt
AI代码解释
复制
privilege::debug

抓取密码

代码语言:txt
AI代码解释
复制
sekurlsa::logonpasswords

可以看到直接抓取出了明文密码,但是,同意存在无法抓取明文密码的情况

下面使用mimikatz进行win7抓取密码的测试,如图

可以看到,并没有抓取到明文的密码,这是因为在 KB2871997 之前, Mimikatz 可以直接抓取明文密码。但微软在 win7 之后就打了补丁 kb2871997,当服务器安装 KB2871997 补丁后,系统默认禁用 Wdigest Auth ,内存(lsass 进程)不再保存明文口令。Mimikatz 将读不到密码明文。

但由于一些系统服务需要用到 Wdigest Auth,所以该选项是可以手动开启的。(开启后,需要用户重新登录才能生效)

代码语言:txt
AI代码解释
复制
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

由于mimikatz被使用的过于频繁,所以免杀是必须要做的。这里就不再多谈。


总结

本文解释了windows的认证机制,包括本地认证和网络认证,并且演示了使用mimikatz抓取系统认证的场景。受篇幅限制,Kerberos,pth、ptt、ptk这些内容需下次介绍。


本文作者 r0fus0d

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Windows认证原理解析基础入门
本文借鉴安全界各位大佬所写的Windows认证入门科普(它们的站点我附在来源)对其中的知识点做了一个整理总结,同时复现里面的算法方便以后自己理解以及在其他域渗透/内网渗透方式中提供基础知识,这篇文章很适合小白入门Windows认证协议简单明了;
全栈工程师修炼指南
2022/09/29
1.3K0
Windows认证原理解析基础入门
内网协议NTLM之NTLM基础
我们知道windows系统自身是不会保存明文密码的,也就是说SAM中保存的不是明文而是Hash。在本地登陆的情况下,操作系统会使用用户输入的密码作为凭据去与系统中的密码进行校验,如果成功的话表明验证通过。操作系统的密码存储在C盘的目录下:
黑白天安全
2021/04/07
1.6K0
内网协议NTLM之NTLM基础
Windows系统安全|Windows中获取用户密码
Windows系统使用两种方法对用户的密码进行哈希处理,它们分别是 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。所谓哈希(hash),就是使用一种加密函数对其进行加密。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
谢公子
2022/01/19
3K0
Windows系统安全|Windows中获取用户密码
Windows认证--NTLM
Windows 身份验证机制主要有NTLM和Kerberos两种,前者主要用于本地以及工作组环境,而后者主要用于域环境.还有一种LM认证,但现在基本淘汰了,在这就不再做过多的解释.
鸿鹄实验室
2022/11/02
1.3K0
Windows认证--NTLM
[ffffffff0x] Windows认证原理 网络认证(进阶篇)
在上一篇浅谈windows认证原理中,我们介绍了windows认证的基本流程和加密的hash原理。本文我们将通过抓包分析,进一步了解windows网络认证相关的知识。
r0fus0d
2021/01/09
1.3K0
[ffffffff0x] Windows认证原理 网络认证(进阶篇)
NTLM协议详解
NTLM(New Technology LAN Manager)身份验证协议是微软用于Windows身份验证的主要协议之一。早期SMB协议以明文口令的形式在网络上传输,因此产生了安全性问题。后来出现了LM(LAN Manager)身份验证协议,它是如此的简单以至于很容易被破解。后来微软提出了NTLM身份验证协议,以及更新的NTLM V2版本。NTLM协议既可以为工作组中的机器提供身份验证,也可以用于域环境身份验证。NTLM协议可以为SMB、HTTP、LDAP、SMTP等上层微软应用提供身份认证。
谢公子
2023/02/27
6.3K0
NTLM协议详解
windows之NTLM认证
比如当用户输入密码admin的时候,操作系统会将admin转换为16进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash
黑白天安全
2020/08/18
2.9K0
windows之NTLM认证
域渗透之NTML-Hash
早期SMB协议在网络上传输明文口令。后来出现"LAN Manager Challenge/Response"验证机制,简称LM,它是如此简单以至很容易被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。Windows加密过的密码口令,我们称之为hash(中文:哈希),Windows的系统密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash。
陈殷
2020/03/06
4.7K0
内网渗透|HASH与横向移动
在内网渗透的过程中,最重要的就是信息搜集,但是在极端情况下我们找不到能够横或者跨域的机器,那么这时候我们就可以尝试做一个水坑,来尝试获取hash。当然这只是理想情况,在愈发强调对抗的当下,利用水坑钓鱼也变得不是那么简单。
HACK学习
2021/08/13
1.2K0
windows 认证机制
NTLM主要应用于用于Windows NT 和 Windows 2000 Server(或更高版本) 工作组环境
宸寰客
2020/10/10
1K0
windows 认证机制
内网渗透—获取Windows内Hash密码方法总结 | 美创安全实验室
在内网渗透中,当攻击者获取到内网某台机器的控制权后,会议被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制欲环境下的全部机器。
数据安全
2020/08/21
2.9K0
内网渗透—获取Windows内Hash密码方法总结 | 美创安全实验室
windows的认证方式
在本地登陆的情况下,操作系统会使用用户输入的密码作为凭据去与系统中的密码进行校验,如果成功的话表明验证通过。操作系统的密码存储在C盘的目录下:
黑白天安全
2020/04/28
2.7K0
windows的认证方式
Windows认证 | Windows本地认证
Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功。
信安本原
2020/03/10
2.5K0
Windows认证 | Windows本地认证
Windows认证及抓密码总结
windows的认证方式主要有NTLM认证、Kerberos认证两种。同时,Windows Access Token记录着某用户的SID、组ID、Session、及权限等信息,也起到了权限认证的作用。
HACK学习
2019/08/06
1.8K0
Windows认证及抓密码总结
第四期学习活动—第二天优秀作业
NTLM是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是指 telnet 的一种验证身份方式,即质询/应答身份验证协议
Timeline Sec
2021/12/02
4790
Windows - Hash散列值抓取方法
LM Hash(LAN Manager Hash)其本质是 DES 加密。在 Windows 2008 及开始之后默认禁用的是 LM Hash。
渗透攻击红队
2020/11/25
2K0
Windows - Hash散列值抓取方法
NTLM及Kerberos认证流程
NTLM是NT LAN Manager的缩写,NTLM 是指 telnet 的一种验证身份方式,即问询/应答身份验证协议,是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。
Y5neKO
2022/01/13
1.9K0
NTLM及Kerberos认证流程
获取Windows系统密码凭证总结
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
网络安全自修室
2024/03/06
1.3K0
获取Windows系统密码凭证总结
内网渗透基础(一)
在一个大型单位中,可能有成百上千台计算机,他们相互连接组成局域网,如果不进行分组,那么网络关系就会杂乱不堪,此时工作组的出现,成功解决了这个问题。它将局域网中不同的计算机按功能分别列入不同的工作组,使得网络更有序。
用户9691112
2023/05/18
5670
内网渗透基础(一)
什么是渗透_mitotracker deep red
Mimikatz 是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点就是他可以直接从 lsass.exe 进程中获取当前登录系统用户名的密码, lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而 mimikatz 正是通过对lsass逆算获取到明文密码!也就是说只要你不重启电脑,就可以通过他获取到登陆密码,只限当前登陆系统!
全栈程序员站长
2022/09/20
6950
什么是渗透_mitotracker deep red
相关推荐
Windows认证原理解析基础入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档