NTLM协议与Pass the Hash的爱情
0x01、前言
NTLM使用在Windows NT和Windows 2000 Server或者之后的工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式
0x02、LM hash & NTLM hash
假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
LM HASH加密:
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
如果明文口令经过大写变换后的二进制字符串不足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
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: 32ED87BDB5FDC5E9CBA88547376818D4
0x03、本地认证
本地登录windows的情况下操作系统会使用用户输入的密码作为凭据,去跟系统中的sam文件中的密码去做比较;就类似web网站登录一样原理。
当用户选择登录时,会弹出winlogon.exe接收输入的密码,这时候会将密码交给lsass.exe,这个进程重会存储一份明文密码;将明文密码加密成NTLM HASH,对SAM数据库再进行认证比较

0x04、网络认证
网络认证是什么呢?其实就是NTLM 协议。那NTLM和NTLM hash有什么关系?
NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式
关于NTLM Hash与NTLM
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。
这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。
1、NTLM v2协议认证过程
NTLM协议的认证过程分为三步:
- 协商
- 质询
- 验证
协商:主要用于确认双方协议版本
质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的范畴,本小节主要讨论这个机制的运作流程。
验证:验证主要是在质询完成后,验证结果,是认证的最后一步。
服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。
2、质询的完整过程
- 1、客户端向服务器端发送用户信息(用户名)请求
- 2、 服务器接受到请求,生成一个16位的随机数,被称之为“Challenge”, 使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1。同时,生成Challenge1后,将Challenge(16位随机 字符)发送给客户端。
- 3、客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。

更为细节的流程图如下

流程大致这样,那response是怎么回事呢?其实就是net-ntlm hash。总的来说,就是response的内容,就是net-ntlm hash

3、NET-NTLM hash格式
认证成功:

认证失败:

查看第二个数据包,获得Challenge,为:77effc5381037df8

Net-NTLM Hash格式为:username::domain:challenge:HMAC-MD5:blob
username(要访问服务器的用户名):xie
domain(访问者主机名或者ip):WIN7
challenge(数据包2中服务器返回的challenge值):77effc5381037df8
HMAC-MD5(数据包3中的NTProofStr): b6b777ced0128e3f587fe08b98853e13
blob(blob对应数据为NTLMv2 Response去掉NTProofStr的后半部分):0101000000000000f27fa3a7aa61d501ba3237c701d9f3970000000002000e00570049004e00320030003000380001000e00570049004e00320030003000380004000e00570049004e00320030003000380003000e00570049004e00320030003000380007000800f27fa3a7aa61d50106000400020000000800300030000000000000000100000000200000ca0ee75c65eaa5367775b826f949798912fa871a19e5d17f9b49587485a8e6620a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e00310030002e0031003500000000000000000000000000
4、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。
现在应该能够理解什么是NTLM、NTLM Hash、LM、LM Hash、Net NTLM Hash了吧?
0x05、Pass The Hash
要完成一个NTLM认证,第一步需要客户端将自己要认证的 用户名发送至服务器端,等待服务器端给出的Challenge
其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。
windows 常见SID
administrator - 500
Guest - 501
kbrtgt - 502
doamin admins - 512
Domain users - 513
Domain Controllers - 515
Domain Controllers - 516
Enterprise Admins - 519
1、工作组 - Pass the Hash
- Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
- Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。(主要以为SID不为500原因)
privilege::debug #先提权
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:用户名 /domain:目标机器IP /ntlm:密码哈希
执行完mimikatz即可弹出该机器cmd
2、域环境 - Pass the Hash
在域环境中,当我们获得了域管理员组内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz对域内任何一台机器(包括域控)进行哈希传递攻击。执行完命令后,会弹出CMD窗口,在弹出的CMD窗口我们可以访问域内任何一台机器。前提是我们必须拥有域内任意一台主机的本地管理员权限和域管理员的密码NTLM哈希值。
- 域:hack.com
- 服务器地址:WIN2008.hack.com
- 域管理员: test
privilege::debug #先提权
#使用域管理员test的NTLM哈希值对域控进行哈希传递攻击,域用户test在域管理员组中
sekurlsa::pth /user:test /domain:hack.com /ntlm:6542d35ed5ff6ae5e75b875068c5d3bc
执行完mimikatz即可弹出该机器cmd
NTLM协议与Pass the Hash的爱情的更多相关文章
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- 域渗透:pth(pass the hash)
pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUse ...
- 哈希传递攻击利用(Pass The Hash)
最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录. 0x01 哈希传递攻击概念 有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM ...
- PtH(hash传递攻击)原理探秘
背景知识 Windows 横向渗透的两种方式 1.hash传递攻击,通过传递NTLM-Hash,登录机器,简称PtH: 2.ticket传递攻击,通过传递kerberos的ticket,登录机器,简称 ...
- Windows NTLM Hash和Hash传递、Key传递攻击
Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash ...
- 域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...
- 浅谈NTLM Hash
认识Windows Hash 早期SMB协议在网络上传输明文口令.后来出现LAN Manager 挑战/响应验证机制(LM),其很容易破解,因此微软提出了WindowsNT挑战/响应验证机制(NTLM ...
- Windows协议 NTLM篇
NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...
- NTLM认证协议及SSPI的NTLM实现
没错,NTLM就是你听说过的那个NTLM.是微软应用最广泛的认证协议之一. NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协 ...
随机推荐
- istio流量管理:非侵入式流量治理
在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持: 同一个服务有多版本管理,将一部分流量切到某个版本上: 对服务进行保护 ...
- gpcj-07.为什么是连锁零售类公司
1.量化分析的真面目 本课的目的: ·理解零售类公司价值分析的逻辑·学会量化分析公司的思路和原理前言的前沿 和大部分投资者不同,我们的投资核心之一,就是从下而上的分析.宏观经济对我们公司分析影响极少. ...
- Python函数装饰器高级用法
在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...
- githubssh配置
- Step By Step(Lua元表与元方法)
Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...
- Python+Selenium学习笔记12 - 窗口大小和滚动条
涉及到的三个方法 set_window_size() 用于设置浏览器窗口的大小 e.gset_window_size(600,600) window.scrollTo() 用于设置浏览器窗口滚动条的 ...
- Tengine MLOps概述
Tengine MLOps概述 大幅提高产业应用从云向边缘迁移的效率 MLOps Cloud Native 聚焦于提升云端的运营过程效率 MLOps Edge Native 聚焦于解决边缘应用开发及异 ...
- RGB-D相机视觉SLAM
RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址: vision.in.tum.de/data/software/dvo 摘要 本文提 ...
- 英伟达TRTTorch
英伟达TRTTorch PyTorch JIT的提前(AOT)编译Ahead of Time (AOT) compiling for PyTorch JIT TRTorch是PyTorch / Tor ...
- 如何在CPU上优化GEMM(上)
如何在CPU上优化GEMM(上) (TL:DR)TVM提供了抽象接口,用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度中编写算法会破坏算法的可读性和模块性.尝试各种看似有希望的时间表 ...