Windows协议 NTLM篇
NTLM 基础 介绍
LM Hash & NTLM Hash
Windows本身是不会存储明文密码的,只保存密码的hash
其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码hash是存在域控的NTDS.DIT文件里面的
Administrator:500:aad3b435b51404eeaad3b435b51404ee:520126a03f5d5a8d836f1c4f34ede7ce:::
其中aad3b435b51404eeaad3b435b51404ee
是LM Hash;520126a03f5d5a8d836f1c4f34ede7ce
是NTLM Hash
LM Hash
全称为LAN Manager Hash
讲下LM Hash的加密过程
- 先将用户的密码全部转换为大写,然后再转换为16进制的字符串,要是不足14字节就用0来补全
- 密码的16进制字符串,拆分为两个7byte的部分;每部分转为比特流,也就是长度位为56bit。长度不足用0补齐
- 再分7bit为一组,每组末尾加0,再组成一组,也就是组成了两大组(一大组里有8小组)
- 两大组分别作为key为"
KGS!@#$%
"进行DES加密 - 将加密后的两组值拼接在一起,得到最终的LM Hash
LM加密算法的固有漏洞
- 密码长度最大只能为14个字符
- Des的密码强度不高(
KGS!@#$%
) - 密码不区分大小写(加密过程中最终都会转换成大写)
- 如果密码强度小于7位,第二个分组加密后的结果肯定为
aad3b435b51404ee
NTLM Hash
为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议。
以下是各个版本对LM和NTLM的支持。
所以从Windows Vista和Windows Server 2008以后,不再存储LM Hash,只存储NTLM Hash
所以高版本我们抓到的LM Hash都是AAD3B435B51404EEAAD3B435B51404EE
,没用的
但是有些工具的参数需要填写固定格式LM hash:NT hash
,比如wmiexec
的-hashes
,我上篇也用到了
我们就可以用00000000000000000000000000000000
来填写LM Hash
讲下NTLM Hash的加密过程
就比较简便了
- 先将用户密码转换为十六进制格式
- 上面转换过来的然后进行Unicode编码
- 再进行MD4加密
NTLM身份验证
NTLM验证是一种Challenge/Response 验证机制
由三种消息组成:通常称为
- 协商:client协商server使用NTLM的版本是多少
- 质询:
- client向server发送用户信息请求
- server接收到Client发送的用户名后,判断本地账户列表是否有这个用户(没有就认证失败,有就执行后面的);然后server会去自己的SAM文件中找到client 用户名对应的NTLM Hash,生成一个16的随机数(Challenge),然后 用NTLM Hash加密Challenge,生成Challenge1。同时将Challenge发送给客户端。// Net NTLM Hash = NTLM Hash(Challenge)
- client收到Challenge后,用对应的NTLM Hash加密Challenge生成Response,然后发送Response给server
- 验证:server在收到client发来的Response与内存中的Challenge1进行比较,如果相等则认证通过、
Net-NTLM Hash
在type3验证中的相应 一共有六种
- LM(LAN Manager)响应 - 由大多数较早的客户端发送,这是“原始”响应类型。
- NTLM v1响应 - 这是由基于NT的客户端发送的,包括Windows 2000和XP。
- NTLM v2响应 - 在Windows NT Service Pack 4中引入的一种较新的响应类型。它替换启用了 NTLM版本2的系统上的NTLM响应。
- LM v2响应 - 替代NTLM版本2系统上的LM响应。
- NTLM2会话响应 - 用于在没有NTLMv2身份验证的情况下协商NTLM2会话安全性时,此方案会更改LM NTLM响应的语义。
- 匿名响应 - 当匿名上下文正在建立时使用; 没有提供实际的证书,也没有真正的身份验证。“存 根”字段显示在类型3消息中。
这六种使用的加密流程一样,都是前面我们说的Challenge/Response 验证机制,区别在Challenge和加密算法不同。
这里 我主要重点记录下NTLM v1和 NTLM v2响应
v2是16位的Challenge,而v1是8位的Challenge(但是我测试的都是16位的challenge)
加密算法也不同
v1: 将16字节的NTLM hash空填充为21个字节,然后分成三组,每组7比特,作为3DES加密算法的三组密钥,加密Server发来的Challenge。 将这三个密文值连接起来得到response。(DES加密算法)
v2:
- 将Unicode后的大写用户名与Unicode后的身份验证目标(在Type 3消息的"TargetName"字段中指定的域或服务器名称)拼在一起。请注意,用户名将转换为大写,而身份验证目标区分大小写,并且必须与“TargetName”字段中显示的大小写匹配。使用16字节NTLM哈希作为密钥,得到一个值
- 构建一个blob信息
- 使用16字节NTLMv2哈希作为密钥,将HMAC-MD5消息认证代码算法加密一个值(来自type 2的Challenge与Blob拼接在一起)。得到一个16字节的NTProofStr。(HMAC-MD5加密算法)
- 将NTProofStr与Blob拼接起来形成得到response
至于选择哪个版本的响应由LmCompatibilityLevel
决定。
Challenge/Response验证机制里面type3 response里面包含Net-ntlm hash,NTLM v1响应和NTLMv2响应对应的就是Net-ntlm hash分为Net-ntlm hash v1和Net-ntlm hash v2
Net-ntlm hash v1的格式为:
username::hostname:LM response:NTLM response:challenge
Net-ntlm hash v2的格式为:
username::domain:challenge:HMAC-MD5:blob
响应大部分是抄的360文章的,因为响应我就觉得他们写的比较清楚
发起NTLM请求
这玩意方法有很多,详情看下面文章吧..
https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/
Net-NTLM 利用
Net-NTLM Hash的破解
Net—NTLM v1破解
只要获取到Net-NTLM v1,都能破解为NTLM hash。与密码强度无;但是大部分都是v2,v2就relay
使用Responder
https://github.com/lgandx/Responder/
具体操作要修改Responder.conf
,所以我先备份出来一份
Challenge
改为1122334455667788
; (默认为random)
获取到Net—NTLM v1
sudo -E python3 Responder.py -wrfv -I eth0 -i 192.168.0.109 --lm
然后使用下面这个工具转换出来 然后解密就可以了
https://github.com/evilmog/ntlmv1-multi
然后去https://crack.sh/解密
然后对key解密
Net—NTLM v2破解
一般就是利用hashcat 离线爆破明文密码
Relay
在Net-NTLM Hash的破解里面,如果是v1的话,拿到Net-NTLM就相当于拿NTLM HASH.这个时候就没有Relay的必要性了;
但是在实际中遇到的例子往往不会是v1,而是v2。
这个时候密码强度高一点,基本就跑不出来了,这种情况下 就relay。
RelaySMB
对域环境好一点,因为workgroup里的机器没有信任关系,自己机子的hash都存在sam里
impacket
下的smbrelayx.py
impacket
下的ntlmrelayx.py
Responder
底下的`MultiRelay.pyv
Windows协议 NTLM篇的更多相关文章
- Windows协议 LDAP篇 - Actite Directory
LDAP简介 先说下ldap,轻量目录访问协议.LDAP就是设计用来访问目录数据库的一个协议.也就是为了能访问目录数据库,ldap是其中一种协议 LDAP的基本模型 目录树:在一个目录服务系统中,整个 ...
- Windows协议 LDAP篇 - 域权限
windows 访问控制模型 也就是大名鼎鼎的ACM,access control mode 由两部分组成的. 访问令牌(access tokens) 其中包含有关登录用户的信息(User SID,G ...
- Windows协议 LDAP篇 - 域用户和计算机用户
域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...
- Windows协议 LDAP篇 - 组&OU
LDAP搜索 LDAP查找 位操作 以userAccountControl为例,CN=User-Account-Control,CN=Schema,CN=Configuration,DC=muxue, ...
- Windows协议 Kerberos篇
认证流程 角色 功能 Domain Controller 也就是域控 Key Distribution Center 秘钥分发中心,简称KDC,默认安装在域控里,包括AS.AD和TGS. Accoun ...
- Windows安全认证是如何进行的?[NTLM篇]
<上篇>中我们介绍Kerberos认证的整个流程.在允许的环境下,Kerberos是首选的认证方式.在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager ...
- Windows NT/NTLM 加密
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是散 ...
- Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘
Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
随机推荐
- Redis之阻塞分析
Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成的.当Redis用于高并发场景时,这条线程就变成了它的生命线.如果出现阻塞,哪怕是很短时间,对于我们的应用来说都是噩梦.导致阻塞问题的 ...
- 关于Word转Markdown的工具Writage安装及使用
简介 Writage是为希望开始编写结构良好的文档,没有时间或不想深入了解 Markdown 语法的详细信息,或者更愿意使用 Word 作为文本编辑器的每个人设计的 下载并安装 安装包地址:https ...
- 12-1 MySQL数据库备份(分库)
#!/bin/bash source /etc/profile DATE="$(date +%F_%H-%M-%S)" DB_IP="172.16.1.122" ...
- 41、shell编程基础
bash的变量默认都是全局变量,脚本内都可以调用,无论在什么位置(函数体中也一样),即函数体外可以调用函数体内的变量: local一般用于局部变量声明,多在函数体内使用: 如果要变为局部变量,则要使用 ...
- 9、SpringBoot整合之SpringBoot整合SpringSecurity
SpringBoot整合SpringSecurity 一.创建项目,选择依赖 选择Spring Web.Thymeleaf即可 二.在pom文件中导入相关依赖 <!-- 导入SpringSecu ...
- Jmeter之代理元件&代理配置
一 jmeter代理服务器添加及网页代理配置 1.1 打开jmeter,添加代理HTTP代理服务器,再添加一个线程组,放在代理服务器的下面. 1.2 代理服务器设置 端口默认8888,目标控制器选择t ...
- ROS2学习之旅(12)——创建工作空间
workspace(工作空间)是包含ROS2 packages(包)的文件夹.在使用ROS 2之前,有必要在终端中source一下ROS 2的安装工作区,这样就可以在该终端中使用ROS 2的软件包. ...
- VMware中的虚机如何挂载U盘
1.将U盘插入到宿主机上. 2.在VM Client上,点击宿主机,右键,扫描存储设备(目的是为了发现新USB存储) 3.在需要的虚拟机上编辑配置,添加硬件,添加USB设备(如果不进行以上2个步骤,此 ...
- 配置Mac 终端高亮
mac下所有vim的配色方案的样式. 下面讲解如何设置这些好看的配色 首先:在终端输入 vim ~/.bash_profile 查看是否有上面提到的某些配色,所有配色均是以.vim结束的,果有的话,再 ...
- 「AGC021E」Ball Eat Chameleons
「AGC021E」Ball Eat Chameleons 考虑如何判定一个合法的颜色序列. 不妨设颜色序列中有 \(R\) 个红球,\(B\) 个蓝球,所以有 \(R+B=k\). 考虑分情况讨论: ...