WINDOWS认证(1)-------NTLM协议

这篇具有很好参考价值的文章主要介绍了WINDOWS认证(1)-------NTLM协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1:Windows本地认证

思考1:从图1到图2是如何完成的,即:输入用户名+密码后,Windows系统如何完成认证并登陆的?

WINDOWS认证(1)-------NTLM协议,3.0 红队特训营,python,网络安全,web安全

简述本地认证过程:

1:输入用户信息登陆系统时,系统会自动的读取数据库的“密码”与用户输入的“密码”进行比对,若相同,则认证成功。

2:登陆验证时,数据库通常并不存储明文对,一般是通过哈希值来对登陆信息进行校验,即:Windows并不存储明文信息。

思考2:我们的用户名-密码信息保存在哪儿?文件中是什么形式(数据格式)进行存储?

回答1:SAM文件  存储位置:C:/WINDOWS/SYSTEM32/CONFIG/SAM

回答2:NTLM Hash 即:NT LAN Manager Hash

思考3:什么是NTLM Hash?如何产生NTLM Hash?

1.1 -NTLM简述:

  • 长度32位,数字+字母组合

  • Windows本身并不存储用户明文密码,反而是将用户的明文密码通过加密算法后存储在SAM数据库中。

  • 用户登录时,将用户输入的明文密码加密成NTLM Hash,与SAM数据库中的NTLM Hash进行比较。NTLM Hash的前身是LM Hash(现已被淘汰,但是存在,例如XP 2003server等)

示例:基于python生成NTLM Hash

代码示例:

import hashlib,binascii
NTLM_hash = hashlib.new('md4', "root".encode('utf-16le')).digest()
print (binascii.hexlify(hash))

输出结果:b'329153f560eb329c0e1deea55e88a1e9'

root---->329153f560eb329c0e1deea55e88a1e9NTLM Hash

1.2-NTLM产生过程(“三步走”)

1:转成16进制:root--->hex(16进制)

2:Unicode编码:----->Unicode

3:MD4算法------->MD4

329153f560eb329c0e1deea55e88a1e9   NTLM Hash

1.3 本地认证具体流程:

  1. Windows Logon Process(Winlogon.exe)是Windows NT用户登录程序,主要用于管理用户登录和退出.

  2. LSASS,即lsass.exe(拉起此进程)属于微软Windows系统的安全机制,其主要功能是在于本地安全和登录策略。

WINDOWS认证(1)-------NTLM协议,3.0 红队特训营,python,网络安全,web安全

2  Windows网络认证(NTLM协议)

2.1背景:

  • 在内网渗透过程中,通常会遇到工作组的环境,而工作组环境事实上是一个逻辑上的网络环境(工作区),隶属于此工作组的机器之间是无法互相建立一个完美的信任机制的,只能点对点(认证方式较为落后)的方式,没有第三方可信机构。

  • 假设A主机和B主机属于同一个工作组环境,A想访问B主机上的资源,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证之后,才能够访问B主机上的相关资源

  • 常见服务:SMB服务  端口:445

NTLM协议(NT LAN Manager)

  • 早期SMB协议在网络上传输明文口令,后来出现LAN Manager Challenge/Response验证机制,简称LM,但是由于很容易就会被破解,不安全。因此微软之后又提出了WindowsNT挑战/应答验证机制,即:NTLM。如今:NTLM v2以及Kerberos验证体系较为流行

基于Challenge/Response机制的NTLM协议

“三步走”:协商----->质询------->验证

2.2认证简述:

1:第一步:协商

客户端向服务器确认协议的版本,是V1版本还是 V2版本?,其主要是版本确认,其具体过程类似于SSH认证第一步,例如确定SSH版本,用何种加密算法等。

2:第二步:质询 (实际上TCP三次握手等,以及密码学认证协议都用到了此机制 挑战/应答-Challenge/Response

  • 客户端向服务器端发送**用户信息(用户名)**等请求消息

  • 服务器接收到请求后,生成一个16位的随机数,即:“Challenge”

  • 使用登录用户名对应的NTLM Hash对Challenge(16位随机数)进行加密,生成所谓的Challenge1,并将challenge发送至客户端。(注意:发送给客户端的随机数Challenge)

Net NTLM Hash = NTLM Hash(Challenge)

  • 客户端接收到Challenge后,将要登录到账户对应的NTLM Hash再次加密Challenge生成Response,然后再将Response发送至服务器端。

3:第三步验证(注实际上在这里,Net NTLM Hash就是Challenge1)

  • 服务器端收到客户端的Response后,对比Challenge1与Response是否相等,若相等,则认证通过。

2.3认证过程(详细)

1:Server接收到Client发送的请求消息(包含用户名等),首先判断本地账户列表是否有用户名(例子:share_user)

如果没有,则返回本次认证失败

如果有

服务器生成一个16位的随机数:Challenge,并且从本地SAM文件中查找此用户名,即share_user所对应的NTLM Hash,然后使用NTLM Hash加密随机数Challenge,生成一个Net-NTLM Hash存在内存中,并将Challenge发送给Client。

2:Client接收到Challenge后,将用户名share_user所对应的passwd转成为NTLM Hash,使用NTLM Hash加密随机数Challenge,得到Response,其表现形式是Net-NTLM Hash,最后将Response发送给Server.

3:Server接收到Client发送的Response,将Response与先前生成的Net-NTLM Hash,即Challenge1进行比较,如果两者相等,则认证通过。

WINDOWS认证(1)-------NTLM协议,3.0 红队特训营,python,网络安全,web安全

注意:

1:Challenge是由认证Server产生的一个16位的随机数,每次认证都不同。

2:Response的表现形式是Net-NTLM Hash,它是由客户端提供的密码Hash生成NTLMhash 加密Server返回的Challenge产生的结果。

2.4 NTLM V2协议

  • NTLM v1与NTLM v2最显著的区别:Challenge与加密算法不同,共同点就是加密的原料都是 NTLM Hash。

  • Challenge:NTLM v1的Challenge有长度为8位,NTLM v2的Challenge长度为16位,所以v2版本更加安全。

  • Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

  • 工具:Responder,smbexec
    工具使用案例

  • Responder工具可以毒化LLMNR和NBT-NS请求,所谓度化本质上为中间人攻击
    假设我们已连接到Windows Active Directory环境,当网络上的设备尝试用LLMNR和NBT-NS请求来解析目标机器时,Responder就会伪装成目标机器。当受害者机器尝试登陆攻击者机器,responder就可以获取受害者机器用户的NTLMv2哈希值。

    • 获取NTLM V2哈希值后如何进行攻击利用(参考博客https://www.freebuf.com/articles/system/194549.html)

    1.获取NTLMv2哈希值,并使用Hashcat密码破解工具破解。

    2.使用Responder和Multirelay.py脚本,脚本负责执行NTMLMv2哈希值中继到“已禁用SMB签名”的机器上。如果中继成功,就可以访问目标机器。

2.5 哈希传递 Pass The Hash (解决了我们渗透中获取不到明文密码,破解不了NTLM Hash而又想扩大战果的问题。)

背景 :

在内网渗透过程中,通常会需要抓取管理员的密码,即NTLM Hash,通过收集此类信息有助于我们进一步扩大战果,进行横向渗透,尤其是在域环境下。

问题1:什么是哈希传递?

哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术。其实本质上是利用了NTLM Hash认证协议特点。试想,我们在内网渗透中暂时未能获取明文密码,也就意味着无法通过暴力破解的手段爆破NTLM hash,是不是意味着我们就无法进行横向渗透,或者进一步扩大战果?

其实仔细查看NTLM协议,其整个过程只是用到了NTLMhash加密随机数,因此只需要有NTLM哈希值即可,无需要对其进行爆破就能达到认证的目的,那么问题来了?如何获取到这个NTLM hash?

仔细观察NTLM认证协议的过程。发现利用NTLMhash值的关键步骤在于此

WINDOWS认证(1)-------NTLM协议,3.0 红队特训营,python,网络安全,web安全

因此能够推出哈希传递的必要条件,也就是使用哈希传递的前提。

Pass The Hash --必要条件

  1. 哈希传递需要被认证的主机能够访问到服务器,你首先的在用户名白名单列表,不然直接认证失败

  2. 哈希传递需要被传递认证的用户名,没有用户名哪儿来的NTLM值

  3. 哈希传递需要被传递认证用户的NTLM Hash

Pass The Hash --原理分析

要完成一个NTLM认证,第一步需要客户端将自己要参与认证的用户名发送至服务器,等待服务器端给出的Challenge----

其实哈希传递本质上就是利用用户名对应的NTLM Hash将服务器给出的Challenge加密,生成一个Response,来完成认证,(没有用户名,就不会有Challenge,那么NTLM hash就无用武之地)

WINDOWS认证(1)-------NTLM协议,3.0 红队特训营,python,网络安全,web安全

如何进行哈希传递?即:Pass The Hash工具

Smbmap

Crack MapExec

Smbexec

Metasploit

哈希传递利用案例:

哈希传递攻击的前提:有管理员的 NTLM Hash ,并且目标机器开放445端口。(利用案例参照博客https://cloud.tencent.com/developer/article/1752176)文章来源地址https://www.toymoban.com/news/detail-826621.html

到了这里,关于WINDOWS认证(1)-------NTLM协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新员工特训营-MAG网络安全(关联转正考试:网络安全考试)

    国内某知名外包公司在给荣耀终端公司代招的新员工入职考试之一:MAG网络安全 1.在对称密钥密码体制中,加、解密双方的密钥( ): 双方拥有相同的密钥 2. 以下哪个是端口扫描工具( ): Nmap 3.[单选题] 0/2 以下关于有加密算法及密钥描述,正确的是( ): 在敏感数据的安全传

    2024年02月05日
    浏览(67)
  • 腾讯重磅技术创作特训营:创作避坑与AI提效指南 | 分享抽键盘长鹅

    技术创作的道路总是伴随着无数的问题,为何而作?写在哪里?写什么?这些问题构成了各式各样的「坑」,令技术创作者避之不及。而随着今年 AIGC 能力的爆发,借助 AI 来辅助创作,似乎提供了解答这些问题的新方案。但新的问题也接踵而至,AI+技术创作应该如何使用才能

    2024年02月08日
    浏览(34)
  • Above:一款专为红队设计的隐蔽型网络协议嗅探工具

    Above是一款专为红队研究人员设计的网络协议嗅探工具,该工具隐蔽型极强,可以帮助广大研究人员搜索目标网络中的相关安全漏洞。 Above可以帮助渗透测试人员和安全专家搜索目标网络设备中的安全漏洞,该工具完全基于网络流量来执行安全分析,因此不会在网络系统中产

    2024年01月23日
    浏览(29)
  • ElasticSearch7.3.0 集群搭建及配置安全认证

    注: 由于是测试,搭建的环境就在一台机器上(操作系统是 CentOS 7) 配置 Elasticsearch Elasticsearch 的配置文件是 elasticsearch/elasticsearch.yml 集群的名称 配置集群的名称,所有的node节点集群名称要一致 节点的名称 配置每个节点的名称,节点的名称要在集群中唯一 索引文件的存储位置 默认

    2023年04月13日
    浏览(54)
  • 让您的Nginx支持Http 3.0 协议

    Http 3.0 其实从最开设到正式的使用,已经过去了不少时间了,这块也是关系到我们现在数据安全一块很重要的发展,后续我们应该不在会有明文加密的协议的存在了吧,只是在加密的基础上,不断的升级现在的加密方法与技术升级,从而更高的保障我们的数据传输的高效与安

    2024年02月10日
    浏览(33)
  • 华为荣耀鸿蒙3.0,2.0解决此设备未获得play保护机制认证框架,安装谷歌Play商店服务框架

    通过各种途径教程,我们可以做到给这个华为的鸿蒙2.0,鸿蒙3.0,emui,magicUI可以安装上服务框架谷歌,安装上谷歌play商店Google,这给我们安装框架成功的带来了希望,但是我们还是使用的过程当中遇到了一些问题,这个问题就是此设备未获得play保护机制认证。弹这个通知会在通知栏

    2024年02月12日
    浏览(38)
  • Dolphinscheduler 3.0 windows 部署手册

    Dolphinscheduler作为国人开源的一款分布式ETL调度工具在2022年4月发布了最新的3.0版本,在健壮性和功能的丰富度上相较之前的版本都有了较大的提高。工作和实际生产中从稳定性的角度我们一般采用基于centOS或者其他版本Linux的集群部署或者K8S部署。因为工作中缺少合适的Linu

    2024年02月06日
    浏览(39)
  • 详解HTTP协议版本(HTTP/1.0、1.1、2.0、3.0区别)

    HTTP/1.0是无状态、无连接的应用层协议。 无连接   无连接:每次请求都要建立连接,需要使用 keep-alive 参数建立长连接、HTTP1.1默认长连接keep-alive   无法复用连接,每次发送请求都要进行TCP连接,TCP的连接释放都比较费事,会导致网络利用率低 队头阻塞   队头阻塞(head

    2024年02月02日
    浏览(36)
  • windows、linux部署seata1.3.0

    前提:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud Alibaba Spring Cloud Spring Boot Nacos Seata 2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE 2.0.3 1.3.0 背景:seata配合nacos使用,并开启nacos,nacos使用默认的namespace,mysql5.7   seata1.3.0下载地址: https://github.com/seata/seata/releases/

    2024年02月12日
    浏览(30)
  • ntlm hash加密方式学习

    什么是ntlm hash,当windows进行本地用户密码认证时不是以用户输入的明文密码与系统密码直接比较,而是经过某种方式加密之后进行比较。所以windows中的用户密码凭证不是以明文的方式存储在系统中的SAM数据库,而是经过加密之后再存储到SAM数据库,这个明文加密的结果我们

    2023年04月21日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包