关于认证协议
本地用户认证
本地认证的意思就是,我们的电脑上存储着自己的账号密码,无论电脑是否联网,只要能开机,就可以输入账号密码登录到电脑中,工作组就是采用本地认证
本地认证流程
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
WindowsLogonProcess(即winlogon.exe):是WindowsNT用户登陆程序,用于管理用户登陆和退出.用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登陆界面
LSASS:用于微软Windows系统的安全机制。它用于本地安全和登陆策略
SAM文件是位于C\windows\system32\config\目录下的,用于储存本地所有用户的凭证信息,但是这并不代表着你可以随意去查看系统密码
SAM文件是Windows的用户账户数据库,所有用户的登录名及口令等相关信息都会保存在这个文件中,简单如下:
用户名称:LM-HASH值:NTLM-HASH值
Lsass.exe进程的作用非常重要,它主要负责管理本地安全策略和认证机制。这些策略包括密码策略、账户策略、用户权限、域策略等等。同时,它还负责对用户进行身份验证,以确保只有授权的用户才能访问系统资源。
1、将winlogon传过来的明文账号密码进行加密,然后和SAM文件中的密文账号密码作对比。如果对比成功就登陆成功
2、将收到的明文账号密码在本地内存中保留一份用作备用
LM Hash/NTLM Hash
系统支持:
Windows XP、Windows 2000、Windows 2003 系统默认使用 LM HASH 加密。
之后的 Windows 2008、Windows 7、Windows Vista、Windows 8、Windows 10 、Windows 2016 禁用了 LM,默认使用 NTLM HASH。
LM Hash的全名为"LAN Manager Hash",是微软为了提高 Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。尽管 LM Hash较容易被破解,但为了保证系统的兼容性, Windows只是将LM Hash禁用了(从 Windows vista和 Windows Server2008版本开始, Windows操作系统默认禁用 LM Hash)。
LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用 LM Hash,将用户的密码设置为14位以上即可。如果 LM Hash被禁用了,攻击者通过工具抓取的 LM Hash通常为“aad3b435b51404eead3b435b51404ee”(表示 LM Hash为空值或被禁用)
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash 是基于MD4加密算法进行加密的。个人版从 Windows vista以后,服务器版从 Windows Server2003以后, Windows操作系统的认证方式均为 NTLM Hash
- LM Hash
LM Hash生成流程
1、将明文口令转换为其大写形式 假设这里以明文Admin@123为例,转换为大写格式为:Admin@123----> ADMIN@123
2、将字符串大写后转换为16进制字符串
ADMIN@123---> 41 44 4D 49 4E 40 31 32 33
3、密码不足14字节要求用0补全
41 44 4D 49 4E 40 31 32 33---> 41 44 4D 49 4E 40 31 32 33 00 00 00 00 00
4、将上述编码分成2组7字节
第一组:41 44 4D 49 4E 40 31
第二组:32 33 00 00 00 00 00
- 将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码
- 将以上步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串KGS!@#$% 进行加密 KGS!@#$%的16进制为 4B47532140232425
最终结果拼接即可6F08D7B306B1DAD4B75E0C8D76954A50
LM Hash生成规则:
1.用户的密码被限制为最多14个字符。
2.用户的密码转换为大写。
3.系统中用户的密码编码使用了OEM内码页
4.密码不足14字节将会用0来补全。
5.固定长度的密码被分成两个7byte部分。每部分转换成比特流,在分7bit为一组末尾加0,然后再次进行16进制编码
6.上步骤得到的8byte二组,分别作为DES key为“KGS!@#$%”进行加密,KGS!@#$%的16进制为 4B47532140232425。
7.将二组DES加密后的编码拼接,得到最终LM HASH值。
LM HASH的特点和问题:
1、口令不区分大小写
2、口令长度最大为14字节,另外如果口令长度不超过7字节,则LM Hash的后8字节是固定值
3、DES算法强度不够
技巧:根据LM Hash特征,也能够判断用户的密码是否是大于等于7位。
- NTLM Hash
NTLM Hash生成过程:
1.转换为十六进制,比如Admin@123转换为16进制:41646d696e40313233
2.Unicode转换后:410064006d0069006e004000310032003300
3.再调用MD4加密算法加密:570a9a65db8fba761c1008a51d4c95ab
手动计算密码后,可以使用密码抓取工具进行验证
mimikatz.exe:
Privilege::debug
Sekurlsa::logonpasswords
- Hash存储
在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,操作系统中的密码存储在:%SystemRoot%\system32\config\sam
当我们登录系统的时候,系统会自动地读取SAM文件中的“密码”与我们输入的“密码”进行比对,如果相同,证明认证成功。
这个SAM文件中保留了计算机本地所有用户的凭证信息,可以理解为是一个数据库。
Windows本身不保存明文密码,只保留密码的Hash。
在域环境中,域用户的密码hash全部保存在C:\Windows\NTD\的ntds.dit中。
- 总结
当密码超过14位时候会采用NTLM加密
test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::
前一部分是LM Hash,后一部分是NTLM Hash 当LM Hash是 AAD3B435B51404EEAAD3B435B51404EE 这表示空密码或者是未使用LM_HASH
Hash一般存储在两个地方: 1、SAM文件,存储在本机 对应本地用户 2、NTDS.DIT文件,存储在域控上对应域用户
根据LM Hash特征,LM Hash的后8字节是固定值,也能够判断用户的密码是否是大于等于7位,是的话则小于,不是的话则大于
网络身份认证协议
本地认证的方式满足不了日常所需
网络认证:Windows网络认证是指在Windows操作系统中进行网络通信和资源访问时,验证用户身份和授权权限的过程。它确保只有经过身份验证的用户能够访问网络资源,并根据其权限级别进行授权操作。
网络认证有哪些?
1.用户名和密码认证:这是最常见的认证方式,用户需要提供有效的用户名和密码,以验证其身份。这种认证方式适用于本地计算机账户或域账户。
2.Kerberos认证:Kerberos是一种网络身份验证协议,在Windows域环境中广泛使用。它通过使用票据和票据授予票据(TGT)来验证用户身份,并生成会话密钥用于加密通信。
3.NTLM认证:NTLM(NT LAN Manager)是一种早期的Windows网络认证协议,它使用基于挑战-响应的方式进行身份验证。尽管Kerberos已成为首选的认证协议,但NTLM仍然在某些情况下使用,特别是在与旧版Windows系统或非Windows系统进行交互操作时。
4.密钥身份认证:Windows还支持使用密钥来进行身份验证。这种方式涉及使用预先共享的密钥对用户进行身份验证,通常用于特定的场景和应用。
5.远程桌面认证(Remote Desktop Authentication):远程桌面是一种远程访问Windows计算机的功能。在远程桌面连接时,用户需要提供目标计算机的凭据进行认证,以验证身份并获得远程访问权限。
NTLM认证协议
- NTLM Hash与NTLM协议的关系
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:"NT LAN Manager"。
这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。
也就是说,NTLM与NTLM Hash相互对应。
早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,它是如此简单以至很容易就被破解,后来微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。
发展历程
SMB -> LM -> NTLM -> NTLM v2
- NTLM认证协议被使用
在平时的测试中,经常会碰到处于工作组的计算机,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。
NTLM(NT LAN Manager)认证是一种早期的Windows网络身份验证协议。它在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制
NTLM认证协议使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。NTLM适用范围非常广,既可用于域内的认证服务,也可用于没有AD的环境,让两台独立电脑相互认证。
NTLM是一种网络认证协议,它是基于挑战(challenge)/响应(Response)认证机制的一种认证模式。
- NTLM协议在Workgroup环境下的认证过程
应用场景:
NTLM协议的认证过程分为三步:
- 协商:主要用于确认双方协议版本(NTLM v1/NTLM V2)。
2、质询:这一步便是Challenge/Response认证机制的关键之处。
3、验证:对质询的最后结果进行一个验证,验证通过后,即允许访问资源
认证肯定分为认证失败和认证成功两种
认证成功 :
1、首先,client会向server发起请求连接协商一些相关东西,比如客户端向服务器端发送用户信息(用户名)请求
- Server将会本地生成一个(16位或8位)随机字符,即Challenge,并保存在本地中,同时将Challenge发送给客户端
3、当client接收到Challenge时,将使用用户的LM Hash或NTLM-hash对Challenge进行加密、和用户名、域名、机器名等相关信息,生成Response,并Response发送给server。
4、Server在收到Response后,将其和相同的方式进行加密生成另一个Response,如果相同,则验证成功,如果不同就失败
其中,经过NTLM Hash加密Challenge的结果Response,在网络协议中称为Net NTLM Hash。
如果上述数据包被恶意第三方截获得到Challenge和加密后的Hash值,那么LM_Hash和NT_Hash也容易泄露,所以微软改进后加入了TimeStamp时间戳来防止这种攻击,也就是NTLM v2
自Windows Vista/Server2008开始,系统默认禁用Net-NTLMv1,使用Net-NTLMv2
Kerberos认证协议
存在的最大问题是什么呢??
最大的问题:双方不能证明自己是自己,就好比对暗号,其实是不安全的
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
Kerberos的三大要素
在古希腊神话故事中,kerberos是一只具有三颗头颅的地狱恶犬,他守护在地狱之外,能够识别所有经此路过的亡灵,防止活着的入侵者闯入地狱
kerberos协议中也存在三个角色,分别是
1、客户端(client):发送请求的一方
2、服务端(Server):接收请求的一方
3、密钥分发中心(Key Distribution Center,KDC),而密钥分发中心一般又分为两部分,分别是:
AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问
TGS的TGT(票据授予票据)
TGS(Ticket Granting Service):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
Kerberos认证协议的基础概念
1、票据(Ticket):是网络对象互相访问的凭证。
2、TGT(Ticket Granting Ticket):入场券,通过入场券能够获得票据,是一种临时凭证的存在。
3、KDC(Key Distribution Center)负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:
①Authentication Service(简称AS): 为client生成TGT的服务
②Ticket Granting Service(简称TGS): 为client生成某个服务的ticket(ST ServiceTicket)
Kerberos认证流程
如何去解决这个问题呢?
此时还存在什么问题吗?
最大问题:卖票窗口凭什么给你卖票(你是合法的公民吗?)
那到底是如何认证呢?
计算机是如何认证呢?
客户端和AS通信原理
第一步:客户端拿着身份证去AS认证,认证通过后返回一张去卖票窗口买票的票(TGT)
a
身份信息:
TGT:
提供身份信息的数据包是AS-REQ(AS-requests)。发送TGT的数据包是AS-REP(AS-response)
当用户收到TGT时候对TGT进行解密
客户端和TGS通信原理
第二步:客户端拿着TGT去卖票窗口(TGS)买一张去动物园的票
TGT: ST:
TGS接收到TGT后,对其进行解密,然后再将TGS封装成ST发送给客户端
客户端和服务端通信原理
第三步:客户端拿着ST去动物园
服务端收到客户端发送的ST之后,对其进行解密
1、使用本机的机器用户HASH值解密ST得到 CS_SK
2、拿着CS_SK解密第一部分得到相关信息
3、进行对比后成功访问建立信任
TGT和ST是Kerberos认证的两个重要票据,如果TGT和ST被伪造了那么将会造成安全问题
伪造的TGT被称作黄金票据,伪造的ST被称为白银票据
kerberos协议安全问题
横向移动AS-REQ:PTH(Pass The Hash)、域内用户枚举,密码喷洒
域内用户枚举,密码喷洒
即域内用于枚举可以在无域内有效凭据的情况下,枚举出域内存在的用户名,
并对其进行密码喷洒以此获得域内有效凭据。
面试小帮手:
什么是黄金票据与白银票据?
黄金票据就是伪造了Kerberos协议中的身份票据(TGT)
黄金票据可以访问该用户身份的所有服务
白银票据就是伪造了Kerberos协议通信流程中服务票据(SGT)
白银票据只能访问某一个服务
使用域管理员身份创建的票据就是黄金票据,可以访问域内的所有服务
kerberos认证流程?
客户端先去找AS服务进行认证,获取身份票据TGT。
然后拿着TGT票据寻找TGS服务,获取服务票据。
拿着服务票据访问具体的服务
相关文章:

关于认证协议
本地用户认证 本地认证的意思就是,我们的电脑上存储着自己的账号密码,无论电脑是否联网,只要能开机,就可以输入账号密码登录到电脑中,工作组就是采用本地认证 本地认证流程 winlogon.exe -> 接收用户输入 -> …...

C#操作MySQL从入门到精通(20)——更新数据
前言: 谈到数据库,大家最容易脱口而出的就是增删改查,本文所说的更新数据就是增删改查的改,改变数据的意思。 本文测试使用的数据库如下: 1、更新一列 所谓更新一列的意思就是只更改一列数据,并且通常要使用where条件,因为不加这个条件的话会导致将所有行的数据进行…...

NVMe全闪存储系统性能测试及产品功能与应用场景
今天我们继续对全闪存储系统GS 5024UE的评测,重点关注GS 5024UE的性能测试数据,以及产品所具备的功能、应用场景。通过Windows IOmeter测试软件,来测试GS 5024UE设备的性能,在机器上配上24颗 NVMe 3.84TB硬盘, 16条32Gb FC数据&am…...

C#面:C#面向对象的思想主要包括什么?
C#面向对象的思想主要包括以下几个方面: 封装(Encapsulation):封装是将数据和操作数据的方法封装在一起,形成一个类。通过封装,可以隐藏类的内部实现细节,只暴露必要的接口给外部使用。这样可以…...

海南云亿商务咨询有限公司正规吗?怎么样?
在当下数字化浪潮汹涌的时代,抖音电商作为新兴的营销渠道,正以其独特的魅力和巨大的市场潜力,吸引着越来越多的企业和品牌投身其中。作为专注抖音电商服务的佼佼者,海南云亿商务咨询有限公司凭借专业的团队、丰富的经验和前瞻的战…...

【数据结构】排序(上)
个人主页~ 堆排序看这篇~ 还有这篇~ 排序 一、排序的概念及应用1、概念2、常见的排序算法 二、常见排序的实现1、直接插入排序(1)基本思想(2)代码实现(3)时间复杂度(4)空间复杂度 2…...

vue3+el-plus对eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):
如有对表格拖拽进行限制某列或某行不进行拖拽的需求,请点击: vue3ele-plussortableJs对el-table使用sortableJs插件对表格拖拽时限定某列或某行不允许拖拽-CSDN博客 如果你已实现拖拽需求,但拖拽后发现表头并未改变的话,请点击&…...

Nginx如何隐藏版本号
1 找到nginx.conf配置文件进行修改 http{...server{listen 80 default_server;listen [::]:80 default_server;server_name _;root /usr/share/nginx/html;server_tokens off; #添加这一项就可以了location / {}error_page 404 /404.html;location /40…...

用C#(WinForm)开发触摸屏,体验感满满
用C#(WinForm)开发触摸屏,体验感满满...

LaneKeepingEnv(自动驾驶仿真)
LaneKeepingEnv环境的工作原理可以归纳如下: 初始化阶段: 环境在创建时,会调用__init__方法进行初始化。初始化过程中,会设置一些关键的属性,如lane(当前车道)、lanes(所有车道的列…...

C++类与对象(拷贝与类的内存管理)
感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.对象的动态建立和释放二.多个对象的构造和析构三.深拷贝与浅拷贝四.C类的内存管理总结 前言 …...

C语言----字符函数和字符串函数
在编程的过程中,我们要经常处理字符和字符串,为了方便操作字符和字符串,c语言标准库中提供的一系列库函数,接下来我们就开始学习与认识他们 1.字符分类函数 c语言中有一系列的函数是专门做字符分类的,也就是一个字符…...

神经网络 torch.nn---Convolution Layers
torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn和torch.nn.functional的区别 torch.nn是对torch.nn.functional的一个封装,让使用torch.nn.functional里面的包的时候更加方便 torch.nn包含了torch.nn.…...

Linux常用基本命令-操作
目录 一、shell 1、什么是shell 二、Linux基本的命令分类 1、内部命令和外部命令 2、查看内部命令 2.1、help命令 2.2、enable 命令 2.3、type命令 2.4、whereis命令 2.5、which 命令 2.6、hash缓存 编辑 三、Linux常用命令 1、Linux命令格式 2、编辑Linux命…...

从零开始使用 Elasticsearch(8.14.0)搭建全文搜索引擎
Elasticsearch 是目前最常用的全文搜索引擎。它可以快速地存储、搜索和分析海量数据,广泛应用于维基百科、Stack Overflow、Github 等网站。 Elasticsearch 的底层是开源库 Lucene。直接使用 Lucene 需要写大量代码,而 Elasticsearch 对其进行了封装&am…...

流程与IT双驱动:锐捷网络如何构建持续领先的服务竞争力?
AI大模型及相关应用进入“竞赛时代”,算力作为关键要素备受关注,由于算力行业对网络设备和性能有较大需求,其发展也在推动ICT解决方案提供商加速升级,提升服务响应速度和服务质量。 锐捷网络是行业领先的ICT基础设施及行业解决方…...

CopyOnWriteArrayList 详细讲解以及示范
CopyOnWriteArrayList是Java集合框架中的一种线程安全的列表实现,特别适用于读多写少的并发场景。 它是通过“写时复制”(Copy-On-Write)策略来保证线程安全的,这意味着当有线程尝试修改列表时,它会先复制原列表到一个…...

01-Java和Android环境配置
appium是做app自动化测试最火的一个框架,它的主要优势是支持android和ios,同时也支持Java和Python脚本语言。而学习appium最大的难处在于环境的安装配置,本文主要介绍Java和Android环境配置,在后续文章中将会介绍appium的安装和具…...

【qt】视口和窗口坐标
视口和窗口坐标 一.视口和窗口坐标的原理二.视口和窗口坐标的好处三.演示好处四.总结 一.视口和窗口坐标的原理 在绘图事件中进行绘图 void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);QRect rect(200,0,200,200);painter.drawRect(rect);//设置视口的…...

优化SQL查询的策略和技巧 - AI提供
优化SQL查询以提高处理大型数据集的数据库性能是一个重要课题。 以下是一些关键策略和技巧,可以帮助您提升查询效率: 1、创建合适索引: 针对频繁出现在WHERE、JOIN、ORDER BY和GROUP BY子句中的列创建索引。索引能够显著加速数据检索过程。…...

平安科技智能运维案例
平安科技智能运维案例 在信息技术迅速发展的背景下,平安科技面临着运维规模庞大、内容复杂和交付要求高等挑战。通过探索智能运维,平安科技建立了集中配置管理、完善的运营管理体系和全生命周期运维平台,实施了全链路监控,显著提…...

基于深度学习的向量图预测
基于深度学习的向量图预测 向量图预测(Vector Graphics Prediction)是计算机视觉和图形学中的一个新兴任务,旨在从像素图像(栅格图像)生成相应的向量图像。向量图像由几何图形(如线条、曲线、多边形等&…...

鸿蒙HarmonyOS $r(““)与$rawfile(““)的区别
在鸿蒙(HarmonyOS)开发中,$r(“”) 和 $rawfile(“”) 是两种不同的资源引用方式,它们分别用于引用不同的资源类型。 1、$r(“”) $r 函数通常用于引用字符串、颜色、尺寸、样式等定义在资源文件(如 strings.json, c…...

简单了解java中的Collection集合
集合 1、Collection-了解 1.1、集合概述 集合就是一种能够存储多个数据的容器,常见的容器有集合和数组 那么集合和数组有什么区别嘞? 1、集合长度可变,数组的长度不可变 2、集合只能存储引用数据类型(如果要存储基本数据类型…...

java 实现导出word 自定义word 使用aspose教程包含图片 for 循环 自定义参数等功能
java 实现导出word 主要有一下几个知识点 1,aspose导入 jar包 和 java编写基础代码下载使用 aspose-words jar包导入 aspose jar 包 使用 maven导入java代码编写 2,if判断 是否显示2,显示指定值3,循环显示List 集合列表 使用 fore…...

CSS动画(炫酷表单)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6yORMSqiaEKgpwibBgfcTQZNV0pI3M8t8HQm5XliaicSO42eBiboEUC3jxQOL1bRe0xlsd8bv04xXoKwg/640?wx_fmtgif&fromappmsg&wxfrom13 表单,也需要具有吸引力和实用性。HTML源码酷炫表单不仅能够提供给用户…...

Stream
Stream 也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的…...

鸿蒙轻内核A核源码分析系列五 虚实映射(5)虚实映射解除
虚实映射解除函数LOS_ArchMmuUnmap解除进程空间虚拟地址区间与物理地址区间的映射关系,其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count,数量的单位是内存页数。 ⑴处函数OsGetPte1用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效…...

编程初学者用什么软件电脑:全方位指南及深度解析
编程初学者用什么软件电脑:全方位指南及深度解析 在数字化浪潮席卷而来的今天,编程技能逐渐成为了一项必备的基本素养。对于初学者来说,选择一款合适的编程软件电脑至关重要。本文将从四个方面、五个方面、六个方面和七个方面,深…...

代理IP池功能组件
1.IP池管理器:用于管理IP池,包括IP地址的添加、删除、查询和更新等操作。 2.代理IP获取器:用于从外部资源中获取代理IP,例如从公开代理IP网站上爬取代理IP、从代理服务商订购代理IP等。 3.IP质量检测器:用于检测代理…...