概念
Hash
windows 内部只保存密码的 hash,并不保存明文密码,本机用户的hash保存在本地的 SAM 文件中,域内用户的 hash 保存在域控的 NTDS.dit 文件中。
windows导出密码时,密码格式通常为:
1 |
|
LM Hash 是 windows 早期用的加密算法,为了解决 LM 加密和身份验证中固有的安全弱点,1993年微软引进了 NTLM 协议。从 Windows7 和 Windows Server 2008 开始,默认情况下系统只会存储 NTLM Hash。
计算
- 密码转十六进制格式
- Unicode 编码
- MD4
身份验证
NTLM 验证是一种 Challenge/Response 验证机制,由三种消息组成:协商、质询、验证
- 客户端向服务端发送协商信息,主要包含客户端支持和服务器请求的功能列表
- 服务器响应质询消息,包含服务器支持和同意的功能列表,以及服务器产生的 Challenge
- 客户端接收到 Challenge 后,用用户 Hash 与 Challenge 进行加密运算得到 Response,将 Response、username、Challenge 作为验证信息发给服务器
- 服务器拿到验证信息后,用 Challenge 和用户 Hash 进行加密得到 Response2,与验证信息中的 Response 进行比较
- 如果用户 Hash 存储在域控中,用户服务器就会通过 NetLogon 协议联系域控,建立一个安全通道,将 协商、质询和验证消息都发给域控,这个过程也被称为 Pass Through Authenication 认证流程。域控使用 Challenge 和用户 Hash 进行加密得到 Response2, 与验证消息中的 Response 比较
NTLM v1/v2
验证中的响应有六种,其中的 NTLM v1 是基于 NT 客户端发送的,包括 Windows 2000 和 XP, NTLM v2 是在 Windows NT Service Pack4 中引入的响应类型。
Challenge/Response验证机制里面type3 response里面包含Net-ntlm hash,NTLM v1响应和NTLMv2响应对应的就是Net-ntlm hash分为Net-ntlm hash v1和Net-ntlm hash v2。
NTLM v1
v1 是8位的 Challenge,它的加密算法是将16字节的 NTLM Hash 填充为21个字节,然后分成3组,作为3DES加密算法的3组密钥,加密 Server 发送来的 Challenge,三个密文值连接起来得到 Response。
Net-ntlm hash v1
1 |
|
NTLM v2
v2是16位的 Challenge,加密算法:
- 将 Unicode 后的大写用户名与 Unicode 后的身份验证目标(指定的域或服务器名称)拼在一起,使用 16字节 NTLM Hash 作为密钥,得到一个值
- 构建 blob 信息
- 用 NTLM v2 Hash 作为密钥,将 HMAC-MD5 消息认证代码算法加密来自质询的 Challenge 与 Blob 拼接在一起,得到一个16字节的 NTProofStr
- 将 NTProofStr 与 Blob 拼接起来得到 Response
Net-ntlm hash v2
1 |
|
NTLM 请求
LLMNR 和 NBNS
windows 解析域名顺序:
- hosts
- DNS
- LLMNR
- NBNS
LLNMR
LLMNR 是一种基于 DNS 数据包的格式,监听端口为 UDP:5535,IPv4 的广播地址为 224.0.0.252,IPv6 的广播地址为 FF02:0:0:0:0:0:1:3 或 FF02::1:3。LLNMR 采取的是广播的形式,当主机访问一个不存在的域名时,在本机 hosts 中没找到,DNS也无法解析,就会通过 LLMNR 协议进行广播,通过 Responder 进行响应,告知域名解析IP就可以进行类似 ARP 投毒的 LLMNR 投毒,进而获取主机的 NTLM v2 Hash。
NBNS
NBNS 全称为 NetBIOS Name Service。NetBIOS 解析过程为:
- 检查本地 NetBIOS 缓存
- 如果缓存中没有且配置了 WINS 服务器,就会向 WINS 服务器发出请求
- 如果没有配置 WINS 服务器或 WINS 服务器无响应就会向当前子网域发送广播
- 广播无回应就会读取本地的 lmhosts 文件(C:\Windows\System32\drivers\etc\)
在没有配置 WINS 服务器的情况下,NBNS 也会进行广播,所以也存在 NBNS 投毒。
使用 Responder 抓取NTLM v2 Hash
在kali下执行
1 |
|
目标机器执行
1 |
|
网络上的用户需要访问没有 IP 或用户类型分析名的 share,就会触发到网络的 LLMNR 请求,responder 就会伪装成该访问的机器,从而获得 NTLM v2 Hash
发起 NTLM 请求
执行命令
1 |
|
outlook
邮件支持 html 格式,同时图片路径支持 UNC,所以可以构造 payload:
1 |
|
Mysql
Mysql注入可以进行带外通信将数据带出来,前提是具备load_file权限,且没有secure_file_priv的限制,LOAD_FILE 也支持 UNC 路径
1 |
|
打印机
Windows 默认启用 MS-RPRN 协议,勇于打印机客户端和服务端的通信,任何经过身份验证的域成员都可以连接到远程服务器的打印服务(spoolsv.exe),并请求对一个新的打印作业进行更新,令其将该通知发送给指定目标。之后它会将立即测试该连接,即向指定目标进行身份验证(攻击者可以选择通过Kerberos或NTLM进行验证)。
1 |
|