net user #查询本地用户
net user /domian #查询域用户
net user USERNAME /domain #指定查询某域用户
net group /domain #查询域用户组
利用powershell查询用户及组信息利用powershell脚本,查询域控信息。
LDAP路径格式:LDAP://HostName[:PortNumber][/DistinguishedName]
第一部分:先获取LDAP路径信息。利用System.DirectoryServices.ActiveDirectory.Domain类中的GetCurrentDomain()方法,获取域名信息,即HostName。
$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
取PdcRoleOwner属性中的内容。
$PDC = ($domainObj.PdcRoleOwner).Name
拼接LDAP路径。
$SearchString = "LDAP://"
$SearchString += $PDC + "/"
将域名格式替换为DN格式。例:b10d9.com 变成 DC=b10d9,DC=com
$DistinguishedName = "DC=$($domainObj.Name.Replace('.', ',DC='))"
拼接完成LDAP路径。例:LDAP://DC.b10d9.com/DC=b10d9,DC=com
$SearchString += $DistinguishedName
第二部分:设置搜索的根路劲利用DirectorySearcher类,搜索对象为前面脚本获取的LDAP路径。
$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)
利用DirectoryEntry,确定域控根路劲。
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
设置Searcher类的SearchRoot参数为当前域控根路劲。
$Searcher.SearchRoot = $objDomain
第三部分:创建过滤器根据不同查询需求,设置不同的过滤条件。
$Searcher.filter="samAccountType=805306368"
$Result = $Searcher.FindAll()
以下加入循环,将结果以容易阅读的方式输出所有用户每个属性的 。
Foreach($obj in $Result)
{
Foreach($prop in $obj.Properties)
{
$prop
}
Write-Host "------------------------------------------------"
}
枚举已登录用户信息和会话用到的API接口:NetWkstaUserEnum和NetSessionEnum
用到的脚本:PowerView.ps1
github:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
命令说明:https://book.hacktricks.xyz/windows/basic-powershell-for-pentesters/powerview
枚举服务账户SPN:即Service Principal Name。AD账户除了用户账户外,还有服务账户。应用程序也会有与之关联的服务账户,便于应用程序访问服务器资源,如exchange、SQL、IIS等。SPN则用于将应用程序启用的服务与AD中服务账户关联起来的一项服务。
通过枚举所有SPN,进一步获取服务器运行的所有服务的IP及端口。
备注:微软并未公开SPN,息但网上可以找到一些SPN清单。
修改脚本中过滤条件:
$Searcher.filter="serviceprincipalname=*http*"
完整脚本$domainObj=[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()$PDC= ($domainObj.PdcRoleOwner).Name$SearchString="LDAP://"$SearchString+=$PDC+"/"$DistinguishedName="DC=$($domainObj.Name.Replace('.', ',DC='))"$SearchString+=$DistinguishedName$Searcher=New-ObjectSystem.DirectoryServices.DirectorySearcher([ADSI]$SearchString)$objDomain=New-ObjectSystem.DirectoryServices.DirectoryEntry$Searcher.SearchRoot =$objDomain# 根据需要设置不同的过滤条件$Searcher.filter="samAccountType=805306368"# 查询所有用户$Searcher.filter="serviceprincipalname=*http*"# 查询SPN$Searcher.filter="(name=Nested_Group)"# 查询用户组$Result=$Searcher.FindAll()# 循环条件,输出查询内容Foreach($objin$Result){ Foreach($propin$obj.Properties) { $prop } Write-Host"------------------------"}