
默认的 Active Directory ms-DS-MachineAccountQuota 属性设置允许所有域用户向域中添加最多10个计算机账户。Powermad 包含一组函数,用于在不将实际系统附加到 AD 的情况下利用 ms-DS-MachineAccountQuota。
该函数可以返回计算机账户属性中填充的值。
Get-MachineAccountAttribute -MachineAccount test -Attribute discription该函数利用计算机账户上的 ms-DS-CreatorSID 属性返回用户名或 SID 列表及其关联的计算机账户。仅当计算机账户由非特权用户创建时,该属性才会被填充。
Get-MachineAccountCreator该函数可以禁用通过 New-MachineAccount 添加的计算机账户。使用此函数时应与创建该计算机账户的用户相同。
Disable-MachineAccount -MachineAccount test该函数可以启用通过 Disable-MachineAccount 禁用的计算机账户。使用此函数时应与创建该计算机账户的用户相同。
Enable-MachineAccount -MachineAccount test该函数可以直接通过 LDAP 添加请求向域控制器添加新的计算机账户,而不会影响主机系统与 Active Directory 的附加状态。
LDAP 添加请求模拟了将系统加入域时使用的添加请求。设置了以下属性(大部分由 DC 验证):
新的计算机账户可用于诸如利用分配给“Domain Computers”组的权限,或作为域枚举、DNS 利用等的附加账户。默认情况下,计算机账户没有本地登录权限。您可以直接使用接受网络凭据的工具/客户端,或者通过 'runas /netonly' 或 @harmj0y 的 Invoke-UserImpersonation/Invoke-RevertToSelf(包含在 PowerView 中)来使用。
使用标准用户创建的计算机账户会将 mS-DS-CreatorSID 填充为标准用户的 SID。
请注意,ms-DS-MachineAccountQuota 并不允许经过身份验证的用户从 AD 中删除已添加的计算机账户。如果您希望避免将此任务转交给客户端,则需要获取提升的权限来删除该账户。
添加一个新的计算机账户
New-MachineAccount -MachineAccount test
使用 runas /netonly 使用添加的账户
runas /netonly /user:domain\test$ powershell
该函数使用特权账户删除计算机账户。
Remove-MachineAccount -MachineAccount test -Credential $domainadmin如果用户具有写权限,该函数可以填充通过 New-MachineAccount 添加的账户的部分属性。使用此函数时应与创建该计算机账户的用户相同。
以下是一些常见的具有写权限的属性列表:
从 SamAccountName 属性中移除尾随的 '$'
Set-MachineAccountAttribute -MachineName test -Attribute SamAccountName -Value test
使用 runas /netonly 使用修改后的账户
runas /netonly /user:domain\test powershell
该函数利用 New-MachineAccount 通过 MachineAccountQuota 从单个非特权账户递归创建尽可能多的计算机账户。详情请参见以下博客文章:
默认情况下,经过身份验证的用户在 Active Directory 集成 DNS (ADIDNS) 区域上具有“创建所有子对象”权限。AD 区域中当前不存在的绝大多数记录都可以添加/删除。
该函数可用于在域控制器上配置了启用安全动态更新的默认设置时,添加/删除动态 DNS 记录。当前支持 A、AAAA、CNAME、MX、PTR、SRV 和 TXT 记录。Invoke-DNSUpdate 的建模基于 BIND 的 nsupdate 工具(当使用 '-g' 或 'gsstsig' 选项时)。
添加 A 记录
Invoke-DNSUpdate -DNSType A -DNSName www -DNSData 192.168.100.125
删除 A 记录
Invoke-DNSUpdate -DNSType A -DNSName www.test.local
添加 SRV 记录
Invoke-DNSUpdate -DNSType SRV -DNSName _autodiscover._tcp.test.local -DNSData system.test.local -DNSPriority 100 -DNSWeight 80 -DNSPort 443
该函数可以墓碑化一个 ADIDNS 节点。
Disable-ADIDNSNode -Node *该函数可以将墓碑化的节点转回有效记录。
Enable-ADIDNSNode -Node *该函数可以返回 DNS 节点属性中填充的值。
Get-ADIDNSNodeAttribute -Node test -Attribute dnsRecord该函数可以返回 ADIDNS 节点的所有者。
Get-ADIDNSNodeOwner -Node test该函数获取 ADIDNS 节点或区域的 DACL。
从域附加系统获取默认 Active Directory 集成区域的 DACL。
Get-ADIDNSPermission
从域附加系统获取名为 test 的 DNS 节点的 DACL。
Get-ADIDNSPermission -Node test
该函数可以返回 ADIDNS 区域。
Get-ADIDNSZone该函数向 DNS 节点或区域 DACL 添加 ACE。
Grant-ADIDNSPermission -Node * -Principal "authenticated users"该函数通过加密的 LDAP 添加请求向 Active Directory 集成 DNS (ADIDNS) 区域添加 DNS 节点。
New-ADIDNSNode -Node * -Tombstone该函数为 dnsRecord 属性创建有效的字节数组。
New-DNSRecordArray -Data 192.168.0.1该函数获取 DNS 区域的当前 SOA 序列号并将其增加设定的数量。
New-SOASerialNumberArray该函数可以重命名 DNS 节点。
Rename-ADIDNSNode -Node test -NodeNew test2该函数可以删除 DNS 节点。
Remove-ADIDNSNode -Node *该函数移除 DNS 节点或区域 DACL 中的 ACE。
Revoke-ADIDNSPermission -Node * -Principal user1 -Access GenericAll该函数可以追加、填充或覆盖 DNS 节点属性中的值。
Set-ADIDNSNodeAttribute -Node test -Attribute description -Value "do not delete"该函数可以设置 DNS 节点的所有者。注意,需要具有 SeRestorePrivilege 的令牌。
Set-ADIDNSNodeOwner -Node test -Principal user1该函数可以从已知的用户名和密码生成 Kerberos AES 256 和 128 密钥。可用于测试 Invoke-DNSUpdate 中的传递哈希。
Get-KerberosAESKey -Salt TEST.LOCALuser