内网域信息收集
SPN的发现
前言:
由于每台服务器都需要注册用于Kerberos身份验证服务的SPN,因此这为在不进行大规模端口扫描的情况下收集有关内网域环境的信息提供了一个更加隐蔽的方法。
工具:
SetSPN查询:
windows系统自带的setspn可以查询域内的SPN
#查看当前域内所有的SPN:
setspn -Q */*
#查看指定域xie.com注册的SPN:
setspn -T xie.com -Q */*
setspn -X删除指定SPN
查找指定用户/主机名注册的SPN:setspn -L username/hostname
PowerShell-AD-Recon: 该工具包提供了一些探测指定SPN的脚本,例如Exchange,Microsoft SQLServer,Terminal等
#Discover-PSMSSQLServers.ps1的使用,扫描MSSQL服务
Import-Module .\Discover-PSMSSQLServers.ps1;Discover-PSMSSQLServers
#Discover-PSMSExchangeServers.ps1的使用,扫描Exchange服务
Import-Module .\Discover-PSMSExchangeServers.ps1;Discover-PSMSExchangeServers
#扫描域中所有的SPN信息
Import-Module .\Discover-PSInterestingServices.ps1;Discover-PSInterestingServices
GetUserSPNs.vbs:
GetUserSPNs 是 Kerberoast 工具集中的一个 vbs 脚本,用来查询域内用户注册的 SPN。
cscript .\GetUserSPNs.vbs
PowerView.ps1:
PowerView是 PowerSpolit 中 Recon目录下的一个powershell脚本,PowerView 相对于上面几种是根据不同用户的 objectsid 来返回,返回的信息更加详细。
Import-Module .\PowerView.ps1Get-NetUser -SPN
PowerShellery:
PowerShellery下有各种各样针对服务SPN探测的脚本。其中一些需要PowerShell v2.0的环境,还有一些则需要PowerShell v3.0环境。
#Powershellery/Stable-ish/Get-SPN/ 下Get-SPN.psm1脚本的使用,需要powershell3.0及以上版本才能使用
Import-Module .\Get-SPN.psm1Get-SPN -type service -search "*"Get-SPN -type service -search "*" -List yes | Format-Table
#Powershellery/Stable-ish/ADS/ 下Get-DomainSpn.psm1脚本的使用
Import-Module .\Get-DomainSpn.psm1Get-DomainSpn
RiskySPN中的Find-PotentiallyCrackableAccounts.ps1:
该脚本可以帮助我们自动识别弱服务票据,主要作用是对属于用户的可用服务票据执行审计,并根据用户帐户和密码过期时限来查找最容易包含弱密码的票据。
Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -FullData -Verbose
使用domain参数,将返回所有具有关联服务主体名称的用户帐户,也就是将返回所有SPN注册在域用户下的用户。
Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -Domain "xie.com"
过ids,ips的一些手工语法:
#将枚举Domain Admins组中所有成员
AdFind -b "CN=Domain Admins,CN=Users,DC=contoso,DC=com" member
#枚举adminCount 设置为1的所有帐户,现在,我们将运行LDAP查询,以查找至少属于一个受保护组的帐户。
AdFind.exe -default -f "(&(adminCount=1)(objectClass=user))" -dn
#枚举配置为无约束委派的所有服务器(不包括DC)
AdFind.exe -default -f "(&(objectCategory=computer)(!(primaryGroupID=516)(userAccountControl:1.2.840.113556.1.4.803:=524288)))" dnsHostName OperatingSystem lastlogonTimestamp pwdLastSet
#使用SPN枚举帐户
AdFind.exe -default -f "(&(objectCategory=user)(servicePrincipalName=*))" cn serviceprincipalname pwdlastset lastlogontimestamp
#枚举不受约束委派的帐户
AdFind.exe -default -f "(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=524288))"
#枚举AdminSDHolder容器上的DACL权限
AdFind -b "CN=AdminSDHolder,CN=System,DC=contoso,DC=com" -s base nTSecurityDescriptor -sddl++ -resolvesids
#枚举域根对象上的DACL
AdFind -b "DC=contoso,DC=com" -s base nTSecurityDescriptor -sddl++ -resolvesids
#枚举LAPS密码
AdFind.exe -default -f "(&(objectCategory=computer)(ms-MCS-AdmPwd=*))" dnsHostName ms-Mcs-AdmPwd
#枚举禁用Kerberos预身份验证的帐户
一旦禁用了预身份验证,攻击者就可以为任何用户请求身份验证数据,并且域控制器将返回可以离线暴力破解的加密TGT。此命令将查找禁用了Kerberos预身份验证的帐户。
AdFind.exe -default -f "(&(objectCategory=person)(objectClass=user)(userAccountControl: