域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos
0x01 NTLM简介
NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
NTLM协议的认证, 包括 NTLMv1 和 NTLMv2 两个版本。 涉及到NTLM的认证全过程,以及NTLM 的 EPA(Extended Protection for Authentication)实现。
在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,操作系统中的密码存储在
%SystemRoot%\system32\config\sam
当我们登录系统的时候,系统会自动地读取SAM文件中的“密码”与我们输入的“密码”进行比对,如果相同,证明认证成功。
这个SAM文件中保留了计算机本地所有用户的凭证信息,可以理解为是一个数据库。
Windows本身不保存明文密码,只保留密码的Hash。
ntlm认证大致流程:
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
关于NTLM Hash与NTLM
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。
这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。
在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较。
NTLM Hash的产生
假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash
admin -> hex(16进制编码) = 61646d696e 61646d696e -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
首先,用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出。
LSASS用于微软Windows系统的安全机 制。它用于本地安全和登陆策略。
NTLM(V1/V2)的hash是存放在安全账户管理(SAM)数据库以及域控的NTDS.dit数据库中,获取该Hash值可以直接进行PtH攻击。
Net-NTLM(V1/V2)的hash值是基于用户的NT的hash值经过一定的算法产生的。
#NTLM-Hash aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42 前面是LMhash后面是NT的Hash #Net-NTLM-Hash admin::N46iSNekpT:08ca45b7d7ea58ee:88dcbe4446168966a153a0064958dac6:5c7830315c7830310000000000000b45c67103d07d7b95acd12ffa11230e0000000052920b85f78d013c31cdb3b92f5d765c783030
0x02 LM Hash && NTLM Hash加密算法
常见Hash算法:
(1)MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD是 Message Digest的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。
(2) MD5
MD5(RFC 1321)是 Rivest于1991年对MD4的改进版本。它仍以512位分组来输入,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好
(3)SHA1 及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
Windows系统下的hash密码格式
Windows系统下的hash密码格式为:用户名称:SID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::
表示
用户名称为:Administrator
SID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
(1)Windows下LM Hash值生成原理
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。
说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A 00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
如果不足7位
由于我们的密码不超过7字节,所以后面的一半是固定的:
AA-D3-B4-35-B5-14-04-EE
并且根据LM Hash特征,也能够判断用户的密码是否是大于等于7位。
PS:可以看到LM Hash加密是对固定字符串“KGS!@#$%”进行DES加密(对称加密),这也是可以破解的本质原因。
(2) Windows下NTLM Hash生成原理
假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节
"123456" -> 310032003300340035003600
从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
NTLM V2协议
NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。
下面细说一下有什么不同:
Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
0x03 NTLM详细流程
NTLM 协议
NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式。
这个协议只支持Windows
Chalenge/Response
NTLM协议的认证过程分为三步:
协商
质询
验证
协商:主要用于确认双方协议版本
质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的范畴。
验证:验证主要是在质询完成后,验证结果,是认证的最后一步。
质询的完整过程:
1.客户端向服务器端发送用户信息(用户名)请求
2.服务器接受到请求,判断本地账户列 表是否有用户名,如果有,生成一个16位的随机数,被称之为“Challenge”, 使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1。生成一 个Net-NTLM Hash存在内存中,同时,生成Challenge1后,将Challenge(16位随机 字符)发送给客户端。
3.客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。
验证: 服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。
注意:
1.Chanllenge是Server产生的一个16字节的随机数,每次认证都不同
2.Response的表现形式是Net-NTLM Hash,它是由客户端 提供的密码Hash加密Server返回的Chanllenge产生的结果。
NTLM 认证消息的结构.
NTLM的消息很简单, 只有三种,协商、质询、验证。 它们都有相似的结构。 认证消息都是二进制的,但是通常我们见到的都是它们的Base64的编码格式。 类似这样:
TlRMTVNTUAADAAAAGAAYAHAAAACSAJIAiAAAAAAAAAAAAAAAGgAaAEgAAAAOAA4AYgAAAAAAAAAAAAAABYKIogAAAAAAAAAPYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBOAEUASQBMAC0AUABDALZLpLeO2n6Sx1s9JjrAfQOqf2QsmfTeP9cjC86k7BsjZEsKzjOoYBcBAQAAAAAAAEDGE3IuR88Bqn9kLJn03j8AAAAAAgAEAEsAQQABAAoARgBTAFcARQBCAAQADABrAGEALgBjAG8AbQADABgAZgBzAHcAZQBiAC4AawBhAC4AYwBvAG0ABQAMAGsAYQAuAGMAbwBtAAcACAC0gtdyLkfPAQAAAAAAAAAA
消息头
4字节的int值, 作为消息的Flags
前面首先是 8个字节+4个字节的 协议头。
然后是四个字节的Flags。 这个Flags中表达了客户端想要使用的NTLM的认证服务, 以及客户端自己所支持的服务。
然后,是若干个可选的security buffer。
security buffer:
参考文档:
http://blog.byneil.com/wp-content/uploads/2014/03/MS-NLMP-NT-LAN-Manager-NTLM-Authentication-Protocol-Specification-v20110610-2.pdf
MS-NLMP-NT-LAN-Manager-NTLM-Authentication-Protocol-Specification
The NTLM Authentication Protocol and Security Support Provider
freebsd-freebsd 源码实现
Mozilla Firefox source code Developer Guide – MDN-firefox 源码
Heimdal NTLM 开源工程
samba.org-pub-unpacked-samba_3_current-librpc-idl-ntlmssp.idl
转载于:https://www.cnblogs.com/-qing-/p/11343859.html
域渗透基础之NTLM认证协议相关推荐
- 域渗透基础_域渗透实战下gpo策略利用
计划任务 每次需要删除计划的配置文件 ,更改任务名 重新下发文件,计划任务的文件路径放在sysvol目录下,域渗透实战下gpo策略利用. startup 重启登录 文件必须放在 gpo配置的指定目录下 ...
- 域渗透基础知识(二)之活动目录 Active Directory 的查询
目录 Active Directory Active Directory 的查询基础语法 什么是BaseDN 什么是Naming Context 什么是LDAP(轻量级目录访问协议) 过滤规则 LDA ...
- 1、域渗透基础简单信息收集
之前写过一篇内网当中域渗透的简单文章.好久没遇到忘得差不多了.前几天做项目,正好碰到了域环境,正好有时间,再回顾一下原来的知识,另外把新补充的知识再记录一下. 域相关知识 什么是域 域英文叫DOMAI ...
- 域渗透基础之环境搭建(单域到组件域林)
转发:https://www.e-learn.cn/content/qita/2484245 之前练习域渗透的环境被我弄丢了 重新搭建一个完整的域环境吧. 域渗透的基础还是环境的搭建,单域到域树再到域 ...
- 域渗透基础知识(五)之OU组织单位、ACL、SeEnableDelegationPrivilege特权
目录 OU组织单位 OU 与容器的区别 OU跟组的区别 组织单位的创建 OU委派 OU查询 ACL(Access Control List)访问控制列表 Windows访问控制模型 ACE ACL的判 ...
- 内网渗透测试:NTLM Relay攻击分析
目录 基础知识 NTLM认证过程 NTLM中继攻击原理 获得Net-NTLM Relay的思路 利用LLMNR和NetBIOS欺骗获得Net-NTLMHash 利用WPAD劫持获得Net-NTLMHa ...
- 《域渗透攻防指南》签名版预售来啦
千呼万唤始出来!终于,在广大粉丝翘首期盼下,国内首本专门讲述域内攻防的书籍<域渗透攻防指南>在2022年最后一个月和大家见面了.为了回馈粉丝的等待,让粉丝早日拿到心仪的书,特此联合机械工业 ...
- 基于NTLM认证的中间人攻击(含实战)
文章目录 中间人攻击 0x01 域和工作组 0x02 NTLM认证(Windows) 本地认证 NTLM Hash的生成 网络认证 工作组环境NTLM认证流程 域环境NTLM认证 0x03 域名解析协 ...
- 从Github一开源项目ADSEC【学习域渗透攻防基础】
学习的开源项目是: https://github.com/cfalta/adsec 有些地方是直接Google 翻译过来的. 注意:本人域渗透新手,很多问题都不懂,有问题欢迎大哥后台留言啊!!! La ...
最新文章
- Eclipse配置注释模板
- 局域网与网络工程课堂笔记(1)(2)
- ajax在项目中怎么使用,我如何添加项目在sql中使用jQuery(ajax)通过web服务
- Android Tcp操作
- 面试必会系列 - 1.5 Java 锁机制
- java provider_Java SPI(Service Provider Interface)
- simulink仿真及代码生成技术入门到精通_Simulink仿真零基础入门到精通实用教学教程 自学全套...
- hp服务器修改bios设置,HP服务器BIOS详解.pdf
- 鼠标点击层以外的地方层隐藏
- 别人的1024程序员节VS你的1024程序员节
- spark集群搭建整理之解决亿级人群标签问题
- HDU1555 How many days?【水题+模拟】
- pycharm 安装gdal问题
- 深入理解JVM--JVM结构
- js实现下载excel
- 深入理解Java虚拟机——Parallel Scavenge收集器
- 刘强东怼天猫,是在陈述事实还是另有深意?
- sdnu oj 1319 Russian Roulette
- 使用Thunderbird管理多个邮件账号
- Multi-Scale Context Aggregation by Dilated Convolution 对空洞卷积(扩张卷积)、感受野的理解
热门文章
- 新零售潮退后,其连锁管理观念依然坚挺
- vue-cli树形结构/组织结构
- 瑞星微 AI情况简介
- 【HCIA-cloud】【4】服务器虚拟化之存储资源管理:存储资源类型说明、存储配置模式说明【普通、精简、延迟置零】、虚拟机磁盘类型说明、FusionCompute中操作添加存储
- 63名研究生的微信群被解散,导师发声:和你们没感情,江湖不见
- [蓝桥杯python] 无聊的逗:逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中。不过他想到了一个游戏来使他更无聊。他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长
- 2021年4款好用的音乐编曲软件推荐
- oracle费用类物料采购,ebs费用化物料设置
- python cv2读取图片/图片转码/切图/图片格式转换/替换图片内容
- SomeProbles:关于Mac不能格式化新的wd硬盘问题