利用net命令查询用户及组信息
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"------------------------"
}