PowerView 域内信息收集

PowerView 是基于 PowerShell 的域渗透信息收集脚本, 该脚本完全通过 PowerShell, WMI 和 Win32 API 的方式实现诸如 net 等一系列命令以达到躲避检测的效果.

PowerView 脚本大体可分为 Misc Domain GPO Enum Meta Trust 六类.

限于篇幅原因, 仅对常用脚本进行说明.

Export-PowerViewCSV

将 PowerView 输出导出为 CSV 格式.

1
Get-DomainUser | Export-PowerViewCSV -Path C:\Windows\Temp\out.csv

Resolve-IPAddress

将主机名解析为 IP.

1
Resolve-IPAddress -ComputerName DC

ConvertTo-SID

将用户名/组名转换为 SID.

1
ConvertTo-SID TEST\Administrator

Get-DomainSPNTicket

请求指定 SPN 的 Kerberos 票据.

1
Get-DomainSPNTicket -SPN MSSQLSvc/DC.test.com

Invoke-Kerberoast

提取请求的 Kerberos 票据中的 Hash.

1
Invoke-Kerberoast | fl

Get-PathACL

返回指定文件路径的 ACL.

1
Get-PathACL .\Documents

Get-DomainDNSZone

返回指定域的 DNS 区域.

1
Get-DomainDNSZone

Get-DomainDNSRecord

返回指定域的 DNS 记录.

1
Get-DomainDNSRecord -ZoneName test.com | Select Name

Get-Domain

返回当前域的信息.

1
Get-Domain

Get-DomainController

返回当前域的域控制器.

1
Get-DomainController

Get-Forest

返回当前域林的信息.

1
Get-Forest

Get-ForestDomain

返回域林中的所有域.

1
Get-ForestDomain

Get-DomainUser

返回当前域的所有用户.

1
Get-DomainUser | Select SAMAccountName

New-DomainUser

在当前域中新建用户.

1
2
$Password = ConvertTo-SecureString '123456' -AsPlainText -Force
New-DomainUser -SamAccountName test -AccountPassword $Password

Set-DomainUserPassword

更改域中用户的密码.

1
2
$Password = ConvertTo-SecureString '123456' -AsPlainText -Force
Set-DomainUserPassword -Identity test -AccountPassword $Password

Get-DomainUserEvent

枚举用户登录事件.

1
Get-DomainUserEvent

Get-DomainComputer

返回当前域中的所有计算机.

1
Get-DomainComputer | Select name

Get-DomainSID

返回当前域的 SID.

1
Get-DomainSID

Get-DomainGroup

返回当前域的所有组. 实际测试中只能查看域内管理员组, 本地无法查看, 以下同.

1
Get-DomainGroup | Select SAMAccountName

New-DomainGroup

在当前域中新建组.

1
New-DomainGroup -SamAccountName TestGroup

Get-DomainGroupMember

返回指定域组的成员.

1
Get-DomainGroupMember "Domain Admins"

Add-DomainGroupMember

将域用户添加到指定域组.

1
Add-DomainGroupMember -Identity "Domain Admins" -Members "Administrator"

Get-DomainGPO

返回域内所有组策略.

1
Get-DomainGPO | Select DisplayName

Get-DomainPolicy

返回当前域使用的组策略.

1
Get-DomainPolicy

Get-NetLocalGroup

返回计算机上的所有本地组.

1
Get-NetLocalGroup

Get-NetLocalGroupMember

返回计算机上指定本地组的所有成员.

1
Get-NetLocalGroupMember -GroupName Administrators

Get-NetShare

返回计算机上的开放共享.

1
Get-NetShare

Get-NetLoggedOn

返回计算机上已登录的用户.

1
Get-NetLoggedOn

Get-NetSession

返回计算机上的会话信息.

1
Get-NetSession

Get-WMIRegProxy

返回当前用户的代理信息.

1
Get-WMIRegProxy

Get-WMIRegLastLoggedOn

返回登录计算机的最后一个用户.

1
Get-WMIRegLastLoggedOn

Get-WMIRegCachedRDPConnection

返回计算机上缓存的 RDP 连接信息.

1
Get-WMIRegCachedRDPConnection

Get-WMIRegMountedDrive

返回计算机上映射的网络驱动器.

1
Get-WMIRegMountedDrive

Get-WMIProcess

返回计算机上正在运行的进程.

1
Get-WMIProcess

Find-InterestingFile

搜索计算机上的敏感文件.

1
Find-InterestingFile

Meta 个人感觉翻译为 “对全体域内计算机进行操作的脚本” 更为合适, 当然, 需要域管权限.

Find-DomainUserLocation

查找特定用户登录的计算机.

1
Find-DomainUserLocation -UserIdentity test

Find-DomainProcess

查找运行特定进程的计算机.

1
Find-DomainProcess -ProcessName powershell.exe

Find-DomainUserEvent

查找特定用户的登录事件.

1
Find-DomainUserEvent -UserIdentity test

Find-DomainShare

查找域内开放的共享.

1
Find-DomainShare

Find-DomainLocalGroupMember

枚举域内计算机上指定本地组的成员.

1
Find-DomainLocalGroupMember -ComputerName TEST -GroupName Administrators

Get-DomainTrust

返回当前域的所有域信任.

1
Get-DomainTrust

Get-ForestTrust

返回当前林的所有林信任

1
Get-ForestTrust

Get-DomainTrustMapping

枚举当前域的所有域信任, 然后枚举它找到的每个域的所有信任.

1
Get-DomainTrustMapping

格式不止以上几种, 凭借其强大的管道, 可任意组合命令.