当前位置: 首页 > news >正文

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:SAM 文件 & Windows 本地认证流程

0x0101:SAM 文件简介

Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候,系统会将用户输入的密码与 SAM 文件中的密码进行对比,如果相同,则认证成功,你就可以登录了。

SAM 文件存储在系统的 %SystemRoot%\system32\config\ 目录下,该文件用于存储本地所有用户的凭证信息。值得注意的是,哪怕我们能看到该文件,我们也是无法直接查看到文件内容的:

0x0102:Windows 本地认证流程

下图就是 Windows 本地认证的流程,这个流程每当我们进行登录时系统就会自动走一遍:

Windows 本地认证流程如下:

  • 首先,用户注销、重启、锁屏后,操作系统会让 winlogon.exe 显示登录界面,接收用户输入的账号密码。

  • 用户在 winlogon.exe 中输入账号密码后,winlogon.exe 会将明文密码发送到 lsass.exe 进程中。

  • lsass.exe 将收到的明文密码保存到内存中,并将明文密码进行 NTLM Hash 加密。

  • lsass.exe 将加密后的密码与 SAM 文件中的值进行比对,比对成功就允许登录,反之,登录失败。

Winlogon.exe 即 Windows Logon Process,是 Windows NT 用户登录程序,用于管理用户的登录和退出。

Lsass.exe 是微软 Windows 系统的一个安全机制,它用于控制本地安全和登录策略。


在进行本地认证的过程中,用来处理用户输入密码的进程 lsass.exe 会将用户的密码以明文形式存储一份在内存中,以供该进程将密码计算成 NTLM Hash 与 SAM 进行比对。我们后面使用 Mimikatz 来获取的明文密码,便是通过该进程读取到的。

即,若要让 Mimikatz 成功抓取密码,被抓密码的用户必须在该机器中登陆过,且明文密码被保存在了内存中。(关机重启后内存就刷新了,密码就消失了,也就抓不到了)

0x02:NTLM Hash & LM Hash 原理剖析

Windows 操作系统中的密码一般由两部分组成,一部分为 LM Hash,另一部分为 NTLM Hash。在 Windows 操作系统中,Hash 的结构通常如下:

username:RID:LM-HASH:NTLM-HASH

LM Hash 简介 — DES 加密(可逆)

LM Hash 的全名为 “LAN Manager Hash”,是微软为了提高 Windows 操作系统的安全性而采用的散列加密算法,其本质是 DES 加密(DES 加密是可逆的,可被破解的)。

由于 LM Hash 比较容易被破解,微软又为了保证系统的兼容性,所以从 Windows Vista 和 Windows Server 2008 开始,LM Hash 默认是被禁用了(开始使用 NTLM Hash)。

LM Hash 明文密码被限定在 14 位以内,即,如果要停止使用 LM Hash,将用户的密码设置为 14 位以上即可。如果 LM Hash 被禁用了,攻击者通过工具抓取到的 LM Hash 通常为 “ad3b435b51404eead3b435b51404ee” 标示 LM Hash 为空值或者被禁用。

NTLM Hash 简介 — MD4 加密(不可逆)

NTLM Hash 是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash 是基于 MD4 加密算法进行加密的。

个人版从 Windows Vista 以后,服务器版从 Windows Server 2003 以后,Windows 操作系统的认证方式均为 NTLM Hash。

为了解决 LM 加密和身份验证方案中固有的安全弱点,Microsoft 于 1993 年在 Windows NT 3.1 中引入了 NTLM 协议,下面是各个版本对 LM 和 NTLM 的支持:

0x0201:LM Hash 加密原理

这部分我们将以明文口令 Admin@123 为例一步一步的演示 LM Hash 加密的流程,以此加深大家对 LM Hash 加密的理解(下面加密流程中,字节之间是没有空格的,笔者这样写只是方便大家看清而已)。

第一步:将明文口令转换为其大写形式 => ADMIN@123

第二步:将大写的明文口令转换为十六进制字符串 => 41 44 4D 49 4E 40 31 32 33

字符串HEX转换hex转string,string转hex,hex转字符串,字符串转hexhttps://www.lddgo.net/string/hex

第三步:密码不足 14 字节要求用 0 补全,1Byte=8bit,上面十六进制字符串共 9 字节,还差 5 字节,我们需要用 00 补全,最终结果为:

41 44 4D 49 4E 40 31 32 33 00 00 00 00 00

第四步:将上述编码每 7 个字节一组,分成两组:

第一组: 41 44 4D 49 4E 40 31
第二组: 32 33 00 00 00 00 00

第五步:将每一组 7 个字节的十六进制转换为二进制:

第一组: 41 44 4D 49 4E 40 31
转化过程:41 => 4 1 => 0100 000144 => 4 4 => 0100 01004D => 4 D => 0100 110149 => 4 9 => 0100 10014E => 4 E => 0100 111040 => 4 0 => 0100 000031 => 3 1 => 0011 0001
转化后: 0100 0001 0100 0100 0100 1101 0100 1001 0100 1110 0100 0000 0011 0001
第二组: 32 33 00 00 00 00 00
转化过程:32 => 3 2 => 0011 001033 => 3 3 => 0011 001100 => 0 0 => 0000 0000
转化后: 0011 0010 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

第六步:每 7bit 一组末尾加零,再转化成十六进制得到 2 组 8 字节的编码:

第一组: 0100 0001 0100 0100 0100 1101 0100 1001 0100 1110 0100 0000 0011 0001
转换过程: 每 7 bit 一组末尾加零,并转化为十六进制:
0100 0000 => 40
1010 0010 => A2
0001 0010 => 12
1010 1000 => A8
1001 0100 => 94
0111 0010 => 72
0000 0000 => 00
0110 0010 => 62
转换后: 40 A2 12 A8 94 72 00 62
第二组: 0011 0010 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
转换过程: 每 7 bit 一组末尾加零,并转化为十六进制:
0011 0010 => 32 
0001 1000 => 18
1100 0000 => C0
0000 0000 => 00
0000 0000 => 00
0000 0000 => 00
0000 0000 => 00
0000 0000 => 00
转换后: 32 18 C0 00 00 00 00 00

第七步:将前面步骤得到的两组 8 字节编码分别作为密钥,对字符串 KGS!@#$% 的十六进制值(4B47532140232425)进行 DES 加密:

DES 加密工具:DES加密工具.exe

被加密的明文: 4B47532140232425
第一组(密钥): 40A212A894720062
第二组(密钥): 3218C00000000000

第八步:将两次 DES 加密的结果拼接在一起就是最终的 LM Hash值:

6F08D7B306B1DAD4B75E0C8D76954A50

0x0202:NTLM Hash 加密原理

这部分我们将以明文口令 Admin@123 为例一步一步的演示 NTLM Hash 加密的流程,以此加深大家对 NTLM Hash 加密的理解(下面加密流程中,字节之间是没有空格的,笔者这样写只是方便大家看清而已)。

第一步:将明文口令转化为十六进制格式 => 41 64 6D 69 6E 40 31 32 33

第二步:将转化的十六进制再转化为 Unicode 格式(在每个字节后面补两个 0):

原始: 41 64 6D 69 6E 40 31 32 33
转 Unicode 格式: 4100 6400 6D00 6900 6E00 4000 3100 3200 3300
最终值: 410064006D0069006E004000310032003300

第三步:对 Unicode 字符串进行 MD4 加密,生成 32 位的 NTLM Hash 值:

HashCalc 工具获取:HashCalc.exe

570a9a65db8fba761c1008a51d4c95ab


综上所属,如果我们有一个用户账号信息为:admin : Admin@123,那么其在 SAM 文件中的格式就长下面这样:

admin:RID:6F08D7B306B1DAD4B75E0C8D76954A50:570a9a65db8fba761c1008a51d4c95ab

这里笔者简单介绍一下 RID:

在 WIndows 操作系统中,RID(Relative Identifier,相对标识符)是安全标识符(SID)的一部分,用于唯一标识用户账户、组或其他安全主体。

  • SID(Security Identifier,安全标识符): 是一个唯一标识用户、组或计算机账户的数字。它由两部分组成:域 SID 和 RID。

  • RID(Relative Identifier,相对标识符): 是 SID 中的一部分,用于区分同一域内的不同对象。每次创建新账户或组时,RID 会递增。

例如,一个用户账户的 SID 可能是 S-1-5-21-1234567890-1234567890-1234567890-1000,其中 1000 就是 RID。

常见的 RID 值有以下几个:

  • 500 => 本地管理员账户。

  • 501 => 来宾账户。

  • 1000 即以上 => 普通用户账户。

相关文章:

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:SAM 文件 & Windows 本地认证流程 0x0101:SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候&am…...

基于SNR估计的自适应码率LDPC编译码算法matlab性能仿真,对比固定码率LDPC的系统传输性能

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 基于序列的SNR估计 2.2 基于SNR估计值进行码率切换 2.3 根据数据量进行码率切换 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印)&…...

opencv 模板匹配方法汇总

在OpenCV中,模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法,通过cv2.matchTemplate函数实现,该函数支持的匹配方式主要有以下6种,下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...

Embedding技术:DeepWalkNode2vec

引言 在推荐系统中,Graph Embedding技术已经成为一种强大的工具,用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。 什么是Graph Embedding? Graph Embedding是一种将图中的节点映射…...

微信小程序注册组件

在微信小程序中注册组件分为自定义组件的创建和全局/局部注册,下面为你详细介绍具体步骤和示例。 自定义组件的创建 自定义组件由四个文件组成,分别是 .js(脚本文件)、.json(配置文件)、.wxml&#xff08…...

【docker】安装mysql,修改端口号并重启,root改密

我的docker笔记 【centOS】安装docker环境&#xff0c;替换国内镜像 1. 配置镜像源 使用阿里云镜像加速器&#xff0c;编辑/etc/docker/daemon.json sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https:/…...

自定义wordpress三级导航菜单代码

首先&#xff0c;在你的主题functions.php文件中&#xff0c;添加以下代码以注册一个新的菜单位置&#xff1a; function mytheme_register_menus() {register_nav_menus(array(primary-menu > __(Primary Menu, mytheme))); } add_action(init, mytheme_register_menus); …...

洛谷 P1480 A/B Problem(高精度详解)c++

题目链接&#xff1a;P1480 A/B Problem - 洛谷 1.题目分析 1&#xff1a;说明这里是高精度除以低精度的形式&#xff0c;为什么不是高精度除以高精度的形式&#xff0c;是因为它很少见&#xff0c;它的模拟方式是用高精度减法来做的&#xff0c;并不能用小学列竖式的方法模拟…...

JAVA入门——网络编程简介

自己学习时的笔记&#xff0c;可能有点水&#xff08; 以后可能还会补充&#xff08;大概率不会&#xff09; 一、基本概念 网络编程三要素&#xff1a; IP 设备在网络中的唯一标识 端口号 应用软件在设备中的唯一标识两个字节表示的整数&#xff0c;0~1023用于知名的网络…...

Ubuntu 合上屏幕 不待机 设置

有时候需要Ubuntu的机器合上屏幕的时候也能正常工作&#xff0c;而不是处于待机状态。 需要进行配置文件的设置&#xff0c;并重启即可。 1. 修改配置文件 /etc/systemd/logind.conf sudo vi /etc/systemd/logind.conf 然后输入i&#xff0c;进入插入状态&#xff0c;修改如…...

捣鼓180天,我写了一个相册小程序

&#x1f64b;为什么要做土著相册这样一个产品&#xff1f; ➡️在高压工作之余&#xff0c;我喜欢浏览B站上的熊猫幼崽视频来放松心情。有天在家族群里看到了大嫂分享的侄女卖萌照片&#xff0c;同样感到非常解压。于是开始翻阅过去的聊天记录&#xff0c;却发现部分图片和视…...

短分享-Flink图构建

一、背景 通过简单的书写map、union、keyby等代码&#xff0c;Flink便能构建起一个庞大的分布式计算任务&#xff0c;Flink如何实现的这个酷炫功能呢&#xff1f;我们本次分享Flink做的第一步&#xff0c;将代码解析构建成图 源码基于Flink 2.10&#xff0c;书籍参考《Flink核…...

【监督学习】支持向量机步骤及matlab实现

支持向量机 &#xff08;四&#xff09;支持向量机1.算法步骤2. MATLAB 实现参考资料 &#xff08;四&#xff09;支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的…...

机器学习-随机森林解析

目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 ​**(1) 减少过拟合** ​**(2) 高效并行化** ​**(3) 特征重要性评估** ​**(4) 耐抗噪声** 四. 随机森林的优缺点 ​优点 ​缺点 五.…...

Javaweb后端spring事务管理 事务四大特性ACID

2步操作&#xff0c;只能同时成功&#xff0c;同时失败&#xff0c;要放在一个事务中&#xff0c;最后提交事务或者回滚事务 事务控制 事务管理进阶 事务的注解 这是所有异常都会回滚 事务注解 事务的传播行为 四大特性...

在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案

问题背景 在实际业务中&#xff0c;我们常会遇到数据冗余问题。例如&#xff0c;一个公司表&#xff08;sys_company&#xff09;中存在多条相同公司名的记录&#xff0c;但只有一条有效&#xff08;del_flag0&#xff09;&#xff0c;其余需要删除。删除前需将关联表&#xf…...

【无标题】四色拓扑模型与宇宙历史重构的猜想框架

### 四色拓扑模型与宇宙历史重构的猜想框架 --- #### **一、理论基础&#xff1a;四色拓扑与时空全息原理的融合** 1. **宇宙背景信息的拓扑编码** - **大尺度结构网络**&#xff1a;将星系团映射为四色顶点&#xff0c;纤维状暗物质结构作为边&#xff0c;构建宇宙尺度…...

[特殊字符] Django 常用命令

&#x1f680; Django 常用命令大全&#xff1a;从开发到部署 Django 提供了许多实用的命令&#xff0c;可以用于 数据库管理、调试、测试、用户管理、运行服务器、部署 等。 本教程将详细介绍 Django 开发中最常用的命令&#xff0c;并提供 示例&#xff0c;帮助你更高…...

mysql中如何保证没有幻读发生

在 MySQL 中&#xff0c;幻读&#xff08;Phantom Read&#xff09;是指在一个事务中&#xff0c;两次相同的查询返回了不同的结果集&#xff0c;通常是由于其他事务插入或删除了符合查询条件的数据。为了保证没有幻读&#xff0c;MySQL 主要通过 事务隔离级别 和 锁机制 来实现…...

Golang实践录:go发布版本信息收集

go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文&#xff0c;为方便阅读&#xff0c;使用工具翻译成中文&#xff0c;重要特性参考其它资料补充/修改。由于发布版本内容较多&#xf…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...