前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >红队笔记 - PowerView进行AD列举

红队笔记 - PowerView进行AD列举

作者头像
Khan安全团队
发布2021-10-12 11:38:42
1.1K0
发布2021-10-12 11:38:42
举报
文章被收录于专栏:Khan安全团队Khan安全团队

虽然下面给出了对我来说最有用的命令,但这仅仅是PowerView能做的事情的一个表面。

PowerView可以在这里使用

代码语言:javascript
复制
https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
代码语言:javascript
复制
# Get all users in the current domain
Get-DomainUser | select -ExpandProperty cn

# Get all computers in the current domain
Get-DomainComputer

# Get all domains in current forest
Get-ForestDomain

# Get domain/forest trusts
Get-DomainTrust
Get-ForestTrust

# Get information for the DA group
Get-DomainGroup "Domain Admins"

# Find members of the DA group
Get-DomainGroupMember "Domain Admins" | select -ExpandProperty membername

# Find interesting shares in the domain, ignore default shares
Find-DomainShare -ExcludeStandard -ExcludePrint -ExcludeIPC

# Get OUs for current domain
Get-DomainOU -FullData

# Get computers in an OU
# %{} is a looping statement
Get-DomainOU -name Servers | %{ Get-DomainComputer -SearchBase $_.distinguishedname } | select dnshostname

# Get GPOs applied to a specific OU
Get-DomainOU *WS* | select gplink
Get-DomainGPO -Name "{3E04167E-C2B6-4A9A-8FB7-C811158DC97C}"

# Get Restricted Groups set via GPOs, look for interesting group memberships forced via domain
Get-DomainGPOLocalGroup -ResolveMembersToSIDs | select GPODisplayName, GroupName, GroupMemberOf, GroupMembers

# Find principals that can create new GPOs in the domain
Get-DomainObjectAcl -SearchBase "CN=Policies,CN=System,DC=targetdomain,DC=com" -ResolveGUIDs | ?{ $_.ObjectAceType -eq "Group-Policy-Container" } | select ObjectDN, ActiveDirectoryRights, SecurityIdentifier

# Find principals that can link GPOs to OUs
Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ObjectAceType -eq "GP-Link" -and $_.ActiveDirectoryRights -match "WriteProperty" } | select ObjectDN, SecurityIdentifier

# Get incoming ACL for a specific object
Get-DomainObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | Select IdentityReference,ActiveDirectoryRights

# Find interesting ACLs for the entire domain, show in a readable (left-to-right) format
Find-InterestingDomainAcl | select identityreferencename,activedirectoryrights,acetype,objectdn | ?{$_.IdentityReferenceName -NotContains "DnsAdmins"} | ft

# Get interesting outgoing ACLs for a specific user or group
# ?{} is a filter statement
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "Domain Admins"} | select ObjectDN,ActiveDirectoryRights

应用锁定器

识别本地AppLocker策略。寻找豁免的二进制文件或绕过的路径。

代码语言:javascript
复制
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

根据相应组策略的区分名称,获取远程AppLocker策略(例如,你可以在BloodHound中识别这一点)

代码语言:javascript
复制
Get-AppLockerPolicy -Domain -LDAP "LDAP://targetdomain.com/CN={16641EA1-8DD3-4B33-A17F-9F259805B8FF},CN=Policies,CN=System,DC=targetdomain,DC=com"  | select -expandproperty RuleCollections

其他绕过技术:

  • 如果只允许 (Microsoft-) 签名的二进制文件,请使用LOLBAS。
  • 如果C:\Windows允许二进制文件(默认行为),请尝试将二进制文件放到C:\Windows\Temp或C:\Windows\Tasks。如果此目录树中没有可写的子目录但存在可写的文件,请将文件写入备用数据流(例如 JScript 脚本)并从那里执行。
  • 将您的二进制文件包装在一个 DLL 文件中,并在rundll32未强制执行 DLL 时执行它们以绕过可执行规则(默认行为)。
  • 如果允许像 Python 这样的二进制文件,请使用它们。如果这不起作用,请尝试其他技术,例如将 JScript 包装在 HTA 文件中或运行带有wmic.
  • 否则提升你的特权。AppLocker 规则通常不会对(本地)管理用户强制执行。

PowerShell受限语言模式

有时你可能会发现自己处于一个强制执行受限语言模式(CLM)的PowerShell会话中。当你在一个执行AppLocker的环境中操作时,通常会出现这种情况(见上文)。

你可以通过轮询以下变量来确定你处于受限语言模式,以获得当前的语言模式。对于不受限制的会话,它将显示FullLanguage,而对于CLM,则显示ConstrainedLanguage。

代码语言:javascript
复制
$ExecutionContext.SessionState.LanguageMode

由于PowerShell的关键功能被封锁,CLM的限制将阻止你的许多利用尝试。绕过CLM与绕过上面讨论的AppLocker基本相同。另一种绕过CLM的方法是绕过AppLocker来执行执行自定义PowerShell运行空间的二进制文件(例如Stracciatella),这将是不受约束的。

另一个快速和肮脏的绕过方法是使用内联函数,这有时是有效的。例如,如果whoami被封锁了,可以尝试以下方法。

代码语言:javascript
复制
&{whoami}

LAPS

本地管理密码解决方案(LAPS)是微软在活动目录域范围内管理本地管理密码的产品。它经常为注册的机器的本地管理用户生成强大而独特的密码。这个密码属性和它的过期时间然后被写入活动目录中的计算机对象。默认情况下,对LAPS密码的读取权限只授予域管理员,但经常被委托给特殊组。

读取LAPSPassword的权限授予用户或组读取ms-Mcs-AdmPwd属性的能力,从而获得本地管理员密码。你可以使用例如BloodHound或PowerView来寻找这个属性。如果我们知道我们对一台机器有正确的ReadLAPSPassword权限,我们也可以使用PowerView来读取密码。

代码语言:javascript
复制
Get-DomainComputer -identity LAPS-COMPUTER -properties ms-Mcs-AdmPwd

我们还可以使用LAPSToolkit.ps1来识别域中哪些机器使用LAPS,以及哪些负责人被允许读取LAPS密码。如果我们在这个组中,我们也可以用这个工具获得当前的LAPS密码。

代码语言:javascript
复制
# Get computers running LAPS, along with their passwords if we're allowed to read those
Get-LAPSComputers

# Get groups allowed to read LAPS passwords
Find-LAPSDelegatedGroups

续集

红队笔记 - PowerShell AMSI Bypass

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档