我醉欲眠卿且去,明朝有意抱琴来。

导航


0、前言

NTLM 中继攻击的流程主要分为三个步骤:触发认证、中继攻击、后利用。其中,

  • 触发认证又分为:主动强制认证、被动诱导认证;
  • 中继攻击又包括:委派、ADCS 证书申请、影子凭证
  • 后利用 则根据 中继攻击 的不同,利用的方式亦有所不同。

主动强制认证常见的几个漏洞是:PeitiPotamPrinterBugDFSCoerceShadowCoercePrivExchangeCoercer。其中 PeitiPotam 漏洞无需提供域账户便可被检测和利用,因此它也是本文主要被使用的一种强制认证方法。

被动诱导认证:UNC 路径、恶意文档(Word、PDF)、图标文件(desktop.ini、scf 文件)、系统命令。

在这篇文章中,我们将 基于被动诱导认证 去探讨有关中继攻击的几种中继类型。例如,

  • SMB 转 SMB:触发认证的是 SMB 协议,中继攻击使用的也是 SMB 协议。
  • SMB 转 LDAP:触发认证的是 SMB 协议,但中继攻击使用的却是 LDAP 协议。
  • SMB 转 HTTP:触发认证的是 SMB 协议,但中继攻击使用的却是 HTTP 协议。
  • HTTP 转 SMB:触发认证的是 HTTP 协议,但中继攻击使用的却是 SMB 协议。
  • HTTP 转 LDAP:触发认证的是 HTTP 协议,但中继攻击使用的却是 LDAP 协议。

以上最常见的中继类型是 SMB 转 SMBSMB 转 LDAP,而有关 HTTP 相关的中继场景似乎都不太常见。

1、实验环境

  • 域名 - skylark.com
  • 主域控 - DC2012 - Windows 2012 R2 Standard - 192.168.56.50
  • 备域控 - DC2013 - Windows 2012 R2 Standard - 192.168.56.51
  • 域主机 - Win10 - Windows 10 专业版(22H2) - 192.168.56.14
  • 域主机 - Win7 - Windows 7 旗舰版(SPK1) - 192.168.56.13
  • Kali - 192.168.56.20
  • 普通域用户 - user
  • 域管理员用户 - admin

可以看到,在这个域环境中,主备域控均已开启 SMB 签名,而域主机均已关闭 SMB 签名。

注意:本实验中的所有 Windows 机器均未安装 CVE-2019-1040 漏洞的补丁,因此后文中 SMB 转 LDAP/HTTP 时 impacket-ntlmrelayx 工具的 --remove-mic 功能可被正常使用。

为了便于后文的说明,特需对各角色的称呼进行规范说明。例如:从 A 触发的认证凭证,经由 kali 转发被中继到了 B,那么 A 被称为触发者,B 被称为受害者,kali 则被称为攻击者。

2、SMB 转 SMB

在 NTLM 中继攻击的流程中,认证协议由 SMB 转 SMB 的成功,需要受害者机器的 SMB 签名处于关闭状态才行,而触发者机器的 SMB 签名状态开关与否都无所谓。

示例一:域主机触发去攻击域控

结果:失败!由于被攻击的域控主机(DC2012)的 SMB 签名处于开启状态,因此必定会失败。

示例二:域控触发去攻击域主机

结果:成功!由于被攻击的域主机(Win10)的 SMB 签名处于关闭状态,因此会成功。

注:如果对域控使用强制认证去攻击域主机,那么是否会成功呢?

测试实验未能成功,但认证提示的消息显示是成功的,只是会报 DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 错误。该错误应该是权限不足的错误,而非服务不提供的错误。毕竟在上面示例二中使用诱导认证的时候是成功的,那说明 Win10 机器所提供的功能是有的,只是这个强制认证的账户(机器账户)权限太小。

个人猜测:在域环境下,只有机器自身的机器账户才拥有对自己机器的最高权限(SYSTEM),而其他机器账户哪怕是域控的机器账户,在非本机的机器看来,那就是一个普通的机器账户,不具备什么权限。【但主备域控之间好像比较特殊,互相的机器账户拥有对对方机器的最高权限。

示例三:域控之间的触发和攻击

结果:失败!由于被攻击的域控主机(DC2012)的 SMB 签名处于开启状态,因此必定会失败。

示例四:域主机之间的触发和攻击

结果:成功!由于被攻击的域主机(Win10)的 SMB 签名处于关闭状态,因此必定会成功。

3、SMB 转 LDAP

在 NTLM 中继攻击的流程中,认证协议由 SMB 转 LDAP 的成功,与触发者和受害者机器上的 SMB 签名状态无关,但和目标机器是否安装了 CVE-2019-1040 漏洞的补丁息息相关,若未打补丁则此时只需在攻击者 kali 的 impacket-ntlmrelayx 命令中添加 --remove-mic 选项即可顺利进行中继。【出厂默认未安装此补丁的系统:Server 2016 及更早、部分 Win10 及更早】

示例一:域主机触发去攻击域控

可以看到,当在域主机(Win10)上分别以域管理员 admin 和普通域用户 user 的身份去触发中继认证时,admin 触发的攻击在域控上新建了一个特权账户,而 user 触发的攻击却只是在当前工作目录下转储了一些域中的信息。

结果:成功!

示例二:域控之间的触发和攻击

结果:成功!

4、SMB 转 HTTP

在 NTLM 中继攻击的流程中,认证协议由 SMB 转 HTTP 的成功,与触发者和受害者机器上的 SMB 签名状态无关,但和目标机器是否安装了 CVE-2019-1040 漏洞的补丁息息相关,若未打补丁则此时只需在攻击者 kali 的 impacket-ntlmrelayx 命令中添加 --remove-mic 选项即可顺利进行中继。【出厂默认未安装此补丁的系统:Server 2016 及更早、部分 Win10 及更早】

关于 SMB 转 HTTP 的示例,可参考《AD 提权-NTLM 中继攻击(强制认证)》这篇文章中有关“ADCS 证书申请”部分的利用。

5、HTTP 转 SMB

在 NTLM 中继攻击的流程中,认证协议由 HTTP 转 SMB 的成功,要求受害者机器上的 SMB 签名处于关闭状态才行,而触发者机器的 SMB 签名状态开关与否都无所谓。

示例一:域主机触发去攻击域控

浏览器访问网址所弹出的登录窗口,填写的是域用户的账户,也是被中继的凭证,该中继凭证和当前登录环境的用户无关。

结果:失败!由于被攻击的域控主机(DC2012)的 SMB 签名处于开启状态,因此必定会失败。

示例二:域控触发去攻击域主机

结果:成功!由于被攻击的域主机(Win10)的 SMB 签名处于关闭状态,因此会成功。

示例三:域控之间的触发和攻击

结果:失败!由于被攻击的域控主机(DC2012)的 SMB 签名处于开启状态,因此必定会失败。

示例四:域主机之间的触发和攻击

结果:成功!由于被攻击的域主机(Win10)的 SMB 签名处于关闭状态,因此会成功。

6、HTTP 转 LDAP

在 NTLM 中继攻击的流程中,认证协议由 HTTP 转 LDAP 可顺利进行,和 SMB 签名和 CVE-2019-1040 漏洞的补丁无关。

示例一:域主机触发去攻击域控

结果:成功!

示例二:域控之间的触发和攻击

结果:成功!

7、杂项

  1. 被中继凭证的权限,决定了它是否可以在受害者机器上进行一些高权限的操作。例如,如果被中继的凭证只是个普通域用户,那么就自然不能够在域控上创建委派账户、转储用户哈希这些需要高权限才能做的事情。
  2. 在 HTTP 转 SMB/LDAP 的中继过程中,浏览器中访问 kali 时,弹出的登录框中需要填写域用户的账户密码才行。
  3. impacket-ntlmrelayx 的 --remove-mic 选项似乎只有在 SMB 转 LDAP/HTTP 时才会被用到,其它时候并不需要。
  4. 通过 SMB/HTTP 转 LDAP 成功执行时会创建一个拥有 Replication-Get-Changes-All 特权的用户,利用该用户配合 impacket-secretsdump 可成功转储域中所有用户的哈希。

  5. 机器账户只能新建机器账户,而域用户不仅可以创建机器账户也可以新建机器账户。这也就是为什么在 NTLM 中继攻击时,主动强制认证新建的特权账户都是机器账户而不是域用户的原因。因为主动强制认证所中继的凭证基本都是目标系统的系统机器账户,即带$的主机名同时也是 SYSTEM 账户。
  6. 强制认证,所中继的账户都是机器账户,因此只能够利用其对一些机器账户进行委派或证书请求的功能;触发认证,所中继的账户一般都是域用户,所以其支持的攻击手法很多,基本上强制认证支持的它都支持。【当然所触发的域账户的权限也决定着此种中继方式可使用的攻击功能,如果触发的凭证是域管理员,那么此时可使用的功能也肯定很多。】

AD 提权-NTLM 中继攻击(诱导认证)的更多相关文章

  1. Potato(邪恶土豆)–windows全版本猥琐提权

    工作原理: Potato利用已知的Windows中的问题,以获得本地权限提升,即NTLM中继(特别是基于HTTP > SMB中继)和NBNS欺骗.使用下面介绍的技术,它有可能为一个非特权用户获得 ...

  2. 内网渗透 day5-msf本地提权(windows)

    msf本地提权 目录 1. 利用uac提权 1 2. 绕过uac认证 2 3. 利用windows本地提权漏洞进行提权 4 1. 利用uac提权 前提与目标机建立会话连接 seach local/as ...

  3. 结合NTLM中继和Kerberos委派攻击AD

    0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...

  4. 20165230田坤烨网络对抗免考报告_Windows系统提权

    目录 KERNEL EXPLOITATION 服务攻击: DLL劫持 攻击 不安全的服务权限 探测 unquoted path未被引号标记的路径 探测 攻击 服务注册表键 探测 攻击 Named Pi ...

  5. Meterpreter提权详解

      0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpr ...

  6. 滥用DNSAdmins权限进行Active Directory提权

      0x00 前言 除了在实现自己的DNS服务器功能之外,Microsoft还为该服务器实现自己的管理协议以便于管理与Active Directory域集成.默认情况下,域控制器也是DNS服务器; 大 ...

  7. Windows提权总结

    当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息.知己知彼,才百战不殆. 常规信息搜集 systeminfo 查询系统信息 hostname 主机 ...

  8. windwos提权漏洞CVE-2023-21746复现(LocalPotato)

    0x01 漏洞原理 LocalPotato攻击是一种针对本地认证的NTLM反射攻击. Windows NTLM 在进行身份验证时存在漏洞,允许拥有低权限的本地攻 击者通过运行特制程序将权限提升至 SY ...

  9. 内网安全之:MS14-068 Kerberos 域用户提权漏洞

    内网安全之:MS14-068 Kerberos 域用户提权漏洞 目录 内网安全之:MS14-068 Kerberos 域用户提权漏洞 0 漏洞说明 (MS14-068:CVE-2014-6324) 1 ...

  10. 小白日记23:kali渗透测试之提权(三)--WCE、fgdump、mimikatz

    WCE windows身份认证过程 http://wenku.baidu.com/view/cf2ee127a5e9856a56126017.html #特例在登陆的目标服务器/系统,有一个w摘要安全 ...

随机推荐

  1. 为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)?

    为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)? 在 Java 8 中,JVM 移除了 永久代(PermGen)并引入了 元空间(Metaspace),这一改 ...

  2. 一、Java语言介绍

    1.硬件知识介绍 2.常用dos命令以及快捷键 1 /** 2 *@desc: 复习 3 *@Description: 4 * dir:列出当前文件目录下的所有文件; 5 * md:创建一个新目录; ...

  3. PHP实现文件上传下载实例详细讲解

    一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添 ...

  4. C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  5. LR_GD_MSE (公式补充)

    上篇是先撸了一把梯度下降的代码, 用来优先 LR 中的 MSE. 核心代码是在求解梯度这一步. # y = wx + b def step_gradient(b_current, w_current, ...

  6. C++ 迭代器(STL迭代器)iterator详解

    要访问顺序容器和关联容器中的元素,需要通过"迭代器(iterator)"进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可 ...

  7. 解锁FastAPI与MongoDB聚合管道的性能奥秘

    title: 解锁FastAPI与MongoDB聚合管道的性能奥秘 date: 2025/05/20 20:24:47 updated: 2025/05/20 20:24:47 author: cmd ...

  8. Qt图像处理技术五:图像的翻转(横向,竖向)

    Qt图像处理技术五:图像的翻转(横向,竖向) 效果图 竖直翻转(两种方法): QImage Vertical(const QImage &origin) { QImage newImage(Q ...

  9. python里的简洁操作

    1.lambda匿名函数好处 精简代码,lambda省去了定义函数,map省去了写for循环过程:res=list(map(lambda x:'test' if x=='' else x,a))  

  10. Java 自定义线程池的线程工厂

      本文分享创建线程工厂 ThreadFactory 的三种方式,以方便大家快速创建线程池,并通过线程工厂给每个创建出来的线程设置极富业务含义的名字. 线程池大小考虑因素   由于需要自定义线程池,故 ...