首页 > 其他分享 >枚举活动目录的常见技术

枚举活动目录的常见技术

时间:2023-06-24 17:01:41浏览次数:40  
标签:Bloodhound AD Sharphound 常见 目录 枚举 我们 帐户

凭证注入

在进入AD对象和枚举之前,让我们先了解凭据注入方法。从 活动目录的渗透中,会看到通常可以在不损害加入域的计算机的情况下找到凭据。特定的枚举技术可能需要特定的设置才能工作。

runas

如果有AD凭据无处可登录,那么Windows自带的 runas 命令将会很有用,我们可以使用合法的 Windows 二进制文件 Runas 将凭据注入内存。通常的 Runas 命令看起来像这样:

runas /netonly /user:<domain>\<username> cmd.exe

我们看一下参数:

  • /netonly - 因为我们没有加入域,所以我们想要加载用于网络身份验证的凭据,而不是针对域控制器进行身份验证。它可以确保注入的凭据用于所有网络连接。
  • /user - 在这里,选择登录的用户
  • cmd.exe - 这是我们在注入凭据后要执行的程序。也可以改为可执行的命令,如whoami

image.png

DNS利用

提供密码后,将打开一个新的命令提示符窗口。现在我们仍然需要验证我们的凭据是否有效。最可靠的方法是列出 SYSVOL。任何AD帐户,无论权限有多低,都可以读取 SYSVOL 目录的内容。

SYSVOL

SYSVOL 是所有域控制器上都存在的文件夹。它是一个共享文件夹,存储组策略对象 (GPO) 和信息以及任何其他域相关的脚本。它是 Active Directory 的重要组件,因为它将这些 GPO 传递到域中的所有计算机。然后,加入域的计算机可以读取这些 GPO 并应用适用的 GPO,从而从中央位置进行域范围的配置更改。<br />在列出 SYSVOL 之前,我们需要配置DNS,对于 DNS 服务器来说,最安全的选择通常是域控制器。使用域控制器的IP,我们可以在PowerShell窗口中执行以下命令:

$dnsip = "<DC IP>"
$index = Get-NetAdapter -Name 'Ethernet' | Select-Object -ExpandProperty 'ifIndex'
Set-DnsClientServerAddress -InterfaceIndex $index -ServerAddresses $dnsip

凭据测试

列出DC域控的共享文件

dir \\za.tryhackme.com\SYSVOL\

image.png

IP和主机名的区别

问题: dir \za.tryhackme.com\SYSVOL和dir \<DC IP>\SYSVOL之间有区别吗?<br />image.png<br />差别在于所使用的身份验证方法。当我们使用主机名时,网络身份验证将首先尝试执行 Kerberos 身份验证。由于 Kerberos 身份验证使用嵌入在票证中的主机名,如果我们使用 IP,则强制身份验证类型为 NTLM。强制 NTLM 身份验证是一个好技巧,强制使用NTLM身份验证可以在某些情况下帮助避免被检测到:如安全监控等

使用 MMC 枚举

优点

  • GUI 提供了一种获得AD环境整体视图的绝佳方法。
  • 可以对不同的AD对象进行快速搜索。
  • 它提供了一种直接的方法来查看AD对象的具体更新。
  • 如果我们有足够的权限,我们可以直接更新现有的AD对象或添加新的AD对象。

缺点

  • GUI 需要RDP访问执行它的计算机。
  • 尽管搜索对象速度很快,但无法执行收集AD范围内的特性或属性。

微软管理控制台

这是唯一使用GUI界面的方法。使用 Win + R 快捷键输入 "MMC" <br />image.png

枚举AD结构

如同进行选择<br />image.png<br />image.png<br />image.png

用户和计算机

我们主要关注AD用户和计算机,展开该管理单元并展开 za 域以查看初始组织单位 (OU) 结构:<br />image.png

该组织的管理级别

可以看见一共有三个<br />image.png<br />继续点击,可以查看该级别下的用户,可以看见该用户的详细描述等其他信息<br />image.png

组织的部门划分

让我们看一下 People 目录。这里我们看到用户是按照部门OU来划分的。单击每个 OU 将显示属于该部门的用户。这里一共有7个部门<br />image.png<br />单击这些用户中的任何一个都将允许我们查看他们的所有属性和属性。我们还可以查看他们属于哪些组:<br />image.png

其他组织单位(OU)

还可以使用 MMC 来查找环境中的主机。如果我们单击“服务器”或“工作站”,将显示加入域的计算机的列表。<br />image.png

使用 CMD 枚举

优点

  • 不需要额外或外部工具,并且蓝队通常不会监控这些简单的命令。
  • 我们不需要 GUI 来执行此枚举。
  • VBScript 和其他常用于网络钓鱼有效负载的宏语言本身支持这些命令,因此它们可用于在制作更具体的有效负载之前枚举有关AD域的初始信息。

缺点

  • 这些net命令必须从加入域的计算机执行。如果计算机未加入域,则它将默认为 WORKGROUP 域。
  • 命令net可能不会显示所有信息。例如,如果用户是十多个组的成员,则并非所有这些组都会显示在输出中。

用户

列出当前域中的所有用户账户

net user /domain

image.png

查看域用户账户的详细信息

net user "Username" /domain

image.png

枚举当前域的组

net group /domain

image.png

查看域组的组名的详细信息

net group "Group name" /domain

image.png

枚举密码政策

net accounts /domain

image.png<br />这将为我们提供有用的信息,例如:

  • 保留的密码历史记录长度。这意味着用户必须提供多少个唯一密码才能重新使用旧密码。
  • 错误密码尝试的锁定阈值以及帐户将被锁定的时间。
  • 密码的最小长度。
  • 允许密码达到的最长期限,指示密码是否必须定期轮换。

如果我们想对我们现在列举的其他用户帐户进行额外的密码喷射攻击,那么这些信息可以使我们受益。它可以帮助我们更好地猜测在攻击中应该使用哪些单一密码,以及在锁定帐户的风险之前可以运行多少次攻击。<br />如果我们执行盲目密码喷射攻击,我们可能会锁定帐户,因为我们没有检查以确定特定帐户在被锁定之前还剩多少次尝试。

使用 PowerShell 枚举

优势

  • PowerShell cmdlet 可以枚举比命令提示符中的 net 命令更多的信息。

  • 我们可以指定服务器和域来使用未加入域的计算机上的 runas 执行这些命令。

  • 我们可以创建自己的 cmdlet 来枚举特定信息。

  • 我们可以使用 AD-RSAT cmdlet 直接更改 AD 对象,例如重置密码或将用户添加到特定组。

缺点

  • 与命令提示符相比,蓝队通常更多地监控 PowerShell。
  • 我们必须安装 AD-RSAT 工具或使用其他可能可检测的脚本进行 PowerShell 枚举。

用户

枚举域用户

 Get-ADUser -Identity gordon.stevens -Server za.tryhackme.com -Properties *

这些参数用于以下用途:

  • -Identity - 我们正在枚举的帐户名
  • -Properties - 将显示与帐户关联的哪些属性,* 将显示所有属性
  • -Server - 由于我们没有加入域,因此我们必须使用此参数将其指向我们的域控制器

image.png

查找名称以结尾的任何用户

Get-ADUser -Filter 'Name -like "*stevens"'

枚举域组详细信息

Get-ADGroup -Identity Administrators -Server za.tryhackme.com -Properties *

image.png

枚举组成员身份

Get-ADGroupMember 检索组的成员

Get-ADGroupMember -Identity Administrators -Server za.tryhackme.com 

image.png

域对象

查找特定日期

$ChangeDate = New-Object DateTime(2022, 02, 28, 12, 00, 00) # 变量指定的日期和时间(2022年2月28日下午12点)
Get-ADObject -Filter 'whenChanged -gt $ChangeDate' -includeDeletedObjects -Server za.tryhackme.com

image.png

枚举 错误计数 大于 0 的帐户

避免这些帐户参与密码枚举

Get-ADObject -Filter 'badPwdCount -gt 0' -Server za.tryhackme.com

image.png

域名

检索有关特定域的附加信息

Get-ADDomain -Server 域名

image.png

更改域用户密码

$oldPass = Read-Host -AsSecureString -Prompt 'Enter the old password'
$newPass = Read-Host -AsSecureString -Prompt 'Enter the new password'
Set-ADAccountPassword -Identity user.name -OldPassword $oldpPass -NewPassword $newPass

使用 Bloodhound 枚举

Bloodhound 是迄今为止最强大的AD枚举工具,当它于 2016 年发布时,它永远改变了 AD 枚举格局。<br />如果问为什么要学会用,过多历史就不叙述了,可以看下面这一句:

防御者用列表思考,攻击者用图表思考。

工具下载:

https://github.com/BloodHoundAD/BloodHound

Sharphound

可能经常会听到用户将 Sharphound 和 Bloodhound 互换使用。然而它们并不相同。Sharphound是Bloodhound的枚举工具。它用于枚举AD信息,然后可以在 Bloodhound 中直观地显示这些信息。Bloodhound 是用于显示 AD 攻击图的实际 GUI。因此我们首先需要使用Sharphound来枚举AD,然后才能使用Bloodhound直观地看到结果。<br />共有三种不同的 Sharphound 执行方式:

  • Sharphound.ps1 -用于运行 Sharphound 的PowerShell脚本。不过,最新版本的 Sharphound 已经停止发布 Powershell 脚本版本。该版本非常适合与 RAT 一起使用,因为脚本可以直接加载到内存中,从而逃避磁盘上的 AV 扫描。
  • Sharphound.exe - 用于运行 Sharphound 的 Windows 可执行版本。
  • AzureHound.ps1 -用于运行 Sharphound for Azure(Microsoft 云计算服务)实例的PowerShell脚本。Bloodhound 可以提取从 Azure 枚举的数据,以查找与 Azure 身份和访问管理配置相关的攻击路径。

注意:

Bloodhound 和 Sharphound 版本必须匹配才能获得最佳结果。
通常会对 Bloodhound 进行更新,这意味着旧的 Sharphound 结果无法被摄取。

关于参数以及使用方法,可以参考这个:

https://bloodhound.readthedocs.io/en/latest/data-collection/sharphound-all-flags.html

在评估中使用这些收集器脚本时,这些文件很可能被检测为恶意软件并向蓝队发出警报。这又是我们未加入域的 Windows 计算机可以提供帮助的地方。我们可以使用该runas命令注入AD凭据并将 Sharphound 指向域控制器。由于我们控制这台 Windows 计算机,因此我们可以禁用 防护软件或为特定文件

枚举

这里使用 SharpHound.exe 版本进行枚举进行演示

Sharphound.exe --CollectionMethods <Methods> --Domain za.tryhackme.com --ExcludeDCs

参数解释:

  • --CollectionMethods - 确定 Sharphound 将收集哪种数据。最常见的选项是“Default”或“ALL”。另外,由于 Sharphound 会缓存信息,因此一旦第一次运行完成,只能使用 Session 收集方法来检索新的用户会话以加快该过程。
  • --Domain - 在这里,我们指定要枚举的域。在某些情况下,你可能想要枚举与你的现有域信任的父域或其他域。我们可以通过更改此参数来告诉 Sharphound 应枚举哪个域。
  • --ExcludeDCs - 这将指示 Sharphound 不要接触域控制器,从而降低 Sharphound 运行引发警报的可能性。

我们将使用 All 方法运行 Sharphound:<br />image.png<br />Sharphound 执行枚举大约需要 1 分钟。在较大的组织中,第一次执行可能需要更长的时间,甚至几个小时。完成后,将在执行 Sharphound 的同一文件夹中获得一个带时间戳的 ZIP 文件<br />image.png<br />我们现在可以使用 Bloodhound 提取此 ZIP,以直观地向我们展示攻击路径。

Bloodhound

Boodhound 是一个 GUI,允许我们导入 Sharphound 捕获的数据并将其可视化到攻击路径中。Bloodhound 使用 Neo4j 作为其后端数据库和图形系统。Neo4j 是一个图形数据库管理系统。<br />在启动 Bloodhound 之前,我们需要加载 Neo4j:

neo4j console start

image.png<br />在另一个终端选项卡中,运行以下命令, 这将显示身份验证 GUI:

bloodhound --no-sandbox

image.png

上传枚举的信息

首先我们需要上传 Sharphound 刚刚生成的zip压缩包<br />image.png<br />导入所有 JSON 文件后,我们可以开始使用 Bloodhound 枚举该特定域的攻击路径。<br />点击这个选项<br />image.png<br />可以看见里面有许多枚举的信息<br />image.png

Node Info

例如想枚举 域中的AD用户,要先在输入框输入,相关的名称<br />image.png<br />最后要单击以下这个用户图标,结构信息才会改变<br />image.png<br />在 Node Info (节点信息)可以看见大量有关我们使用的情况。<br />image.png<br />每个类别都提供以下信息:

  • 概述- 提供摘要信息,例如帐户拥有的活动会话数以及是否可以达到高价值目标。
  • 节点属性- 显示有关 AD 帐户的信息,例如显示名称和标题。
  • 额外属性- 提供更详细的 AD 信息,例如可分辨名称和创建帐户的时间。
  • 组成员资格- 显示有关帐户所属组的信息。
  • 本地管理员权限- 提供有关帐户具有管理权限的已加入域的主机的信息。
  • 执行权限- 提供有关特殊权限的信息,例如通过 RDP 访问计算机的能力。
  • 出站控制权限- 显示有关此帐户有权修改其属性的 AD 对象的信息。
  • 入站控制权限- 提供有关可修改此帐户属性的 AD 对象的信息。

如果想了解每个类别的更多信息,可以按信息查询旁边的数字<br />image.png

Analysis

这些是 Bloodhound 的创建者自己编写的查询,用于列举有用的信息。<br />image.png<br />在 “Domain Information”下,我们可以单击运行选项,就会出现相关的图<br />image.png<br />图标称为节点,线称为边。这个图的意思是:<br />有一个用户名为T0_TINUS.GREEN的 AD 用户帐户,它是Tier 0 ADMINS组的成员。但是,该组是DOMAIN ADMINS组中的嵌套组,这意味着属于第 0 层 ADMINS组的所有用户实际上都是 DA。<br />此外,还有一个用户名为ADMINISTRATOR的附加 AD 帐户,该帐户是DOMAIN ADMINS组的一部分。因此,如果我们想获得 DA 权限,我们的攻击面中可能会尝试破坏两个帐户。由于管理员帐户是内置帐户,因此我们可能会关注用户帐户。

图标

过滤图标

如果我们想制定攻击路径,我们需要查看当前位置和我们拥有的特权与我们想要去的地方之间的可用边缘。Bloodhound 有各种可用的边缘,可以通过过滤器图标访问:<br />image.png

制定枚举攻击路径

我们的起始节点将是我们的 AD 用户名,我们的结束节点将是第1 层 ADMINS组,因为该组对服务器具有管理权限。<br /><br />如果使用所选边缘过滤器没有可用的攻击路径,Bloodhound 将显示“NO DATA RETURNED FROM QUERY”。请注意,这也可能是由于 Bloodhound/Sharphound 不匹配造成的。

它显示T1 管理员 ACCOUNT之一通过使用其凭据对THMJMP1(工作站) 进行身份验证,破坏了分层模型。它还表明属于DOMAIN USERS组的任何用户(包括我们的 AD 帐户)都能够通过 RDP 连接到该主机。<br />我们可以执行如下操作来利用这条路径:

  1. 使用我们的 AD 凭据通过 RDP 进入THMJMP1。
  2. 在主机上寻找可为我们提供管理访问权限的权限升级向量。
  3. 通过管理访问,我们可以使用凭据收集技术和工具,例如 Mimikatz。
  4. 由于 T1 管理员在THMJMP1上有一个活动会话,因此我们的凭据收集将为我们提供关联帐户的 NTLM 哈希值。

一般情况下,攻击路径可能比较复杂,需要采取多次行动才能达到最终目标。如果要了解每个边缘相关的漏洞,可以参考这个:

https://bloodhound.readthedocs.io/en/latest/data-analysis/edges.html

更新会话数据

在大型组织中,AD 的结构不会经常改变。可能会有一些新员工,但 OU、组、用户和权限的整体结构将保持不变。<br />然而不断变化的一件事是活动会话和登录事件。由于 Sharphound 创建 AD 结构的时间点快照,因此活动会话数据并不总是准确的,因为某些用户可能已经注销了其会话,或者新用户可能已经建立了新会话。这是需要注意的重要事项,也是我们希望定期执行 Sharphound 的原因。

一个好的方法是在评估开始时使用“ALL”收集方法执行 Sharphound,然后使用“Session”收集方法每天至少执行两次 Sharphound。

Sharphound.exe --CollectionMethods All --Domain za.tryhackme.com --ExcludeDCs

Sharphound.exe --CollectionMethods session --Domain za.tryhackme.com --ExcludeDCs
# 每天两次

这将更新新的会话数据并确保这些运行速度更快,因为它们不会再次枚举整个 AD 结构。我们可以在用户上班之前,收集一次,比如喝咖啡的时候。然后再用户快下班的时候,再收集一次。

在从这些新的 Sharphound 运行中导入数据之前,可以通过单击“Clear Sessions”在“Database Info”选项卡上清除 Bloodhound 中的停滞会话数据。<br />image.png<br />优点

  • 提供用于 AD 枚举的 GUI。
  • 能够显示枚举的AD信息的攻击路径。
  • 提供对通常需要多次手动查询才能恢复的 AD 对象的更深刻见解。

缺点

  • 需要执行 Sharphound,该程序噪音较大,通常可以被 AV(安全防护软件 )或 EDR (终端检测和响应)解决方案检测到。

其他的枚举技术

ldap枚举

https://book.hacktricks.xyz/pentesting/pentesting-ldap

PowerSploit项目

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

WMI

WMI 可用于枚举来自 Windows 主机的信息。它有一个名为“root\directory\ldap”的提供程序,可用于与 AD 交互。我们可以使用此提供程序和 PowerShell 中的 WMI 来执行 AD 枚举。

https://0xinfection.github.io/posts/wmi-ad-enum/

枚举防御

AD 枚举非常难以防御。其中许多技术模仿常规网络流量和行为,使得很难区分恶意流量和正常流量。但是,我们可以采取一些措施来检测潜在的恶意行为:

  • 强大的 AD 枚举技术(例如 Sharphound)在枚举会话信息时会生成大量登录事件。由于它从单个 AD 帐户执行,因此这些登录事件将与该单个帐户关联。我们可以编写检测规则来检测用户帐户中发生的此类行为。
  • 我们可以为特定 AD 枚举技术必须安装的工具编写签名检测规则,例如 SharpHound 二进制文件和 AD-RSAT 工具。
  • 除非我们组织的员工使用,否则我们可以监控组织中命令提示符和 Powershell 的使用情况,以检测来自未经授权来源的潜在枚举尝试。

蓝队本身也可以定期使用这些枚举技术来识别 AD 域结构中的差距和错误配置。如果我们能够解决这些错误配置,即使攻击者枚举了我们的 AD,他们也无法找到可用于权限提升或横向移动的错误配置。

参考:

https://tryhackme.com/room/adenumeration

标签:Bloodhound,AD,Sharphound,常见,目录,枚举,我们,帐户
From: https://blog.51cto.com/u_16150072/6541251

相关文章

  • Kubernetes CNI 网络模型及常见开源组件
    随着容器技术在企业生产系统中的逐步落地,用户对容器云的网络特性要求也越来越高。跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址、一个容器多个IP地址、多个子网隔离、ACL控制策略、与SDN集成等。目前主流的容器网络模型是CoreOS公司推出的Contai......
  • 05-枚举和共用体
    目录一.枚举1.1枚举的定义和优点二.联合体(共用体)2.1联合体定义2.2共用体内存大小计算一.枚举1.1枚举的定义和优点枚举定义的值是常量,可以被初始化一次,如果没有手动初始化,系统会将第一个常量自动初始化为0,往后每个常量在前一个基础上+1枚举对比宏定义更加......
  • HTML------常见的几种图片格式(GIF、PNG、JPG)讲解
    (1)GIF格式GIF格式最突出的特点是支持动画同时GIF是一种无损的图像格式,即修改图片之后,图片质量没有损失。GIF支持透明效果但只能处理256中颜色。因此在网页制作中,GIF格式常用于Logo、小图标和其他色彩相对单一的图像。(2)PNG格式 PNG包括PNG-8和真色彩(PNG-24和PNG-32)。相......
  • 常见的UNIX分支
    UNIX(Unix-likeoperatingsystems)是一种操作系统家族,它起源于AT&T贝尔实验室的Unix操作系统。随着时间的推移,UNIX演化为多个分支和变种,以满足不同用户和环境的需求。以下是一些常见的UNIX分支:BSD(BerkeleySoftwareDistribution):BSD是最早的UNIX分支之一,由加州大学伯克利分校开......
  • 最近项(Recent Items)功能在不同版本的 Windows 操作系统中可能会有一些差异和功能更新
    最近项(RecentItems)功能在不同版本的Windows操作系统中可能会有一些差异和功能更新。以下是几个常见的Windows版本的最近项功能的更新情况:WindowsXP:在WindowsXP中,最近项功能也被称为"最近文档"(MyRecentDocuments)。你可以从开始菜单中直接访问最近文档列表,它位于"文......
  • MySQL 中常见的高可用架构部署方案
    MySQL中常见的高可用架构部署方案IT奋斗的青年 2023-06-0608:36 发表于山东收录于合集#mysql17个MySQL中的集群部署方案前言这里来聊聊,MySQL中常用的部署方案。MySQLReplicationMySQLReplication 是官方提供的主从同步方案,用于将一个MySQL的实例同步到另......
  • c++面试常见问题总结
    近来在面试的过程,发现面试官在c++方面总是喜欢问及的一些相关问题总结,当时没怎么答出来,或者是答的不怎么全面,故而查询相关资料总结下。(后面实际工作会进行实时更新信息)<一>c++虚函数方面虚函数(VirtualFunction)是通过一张虚函数表(VirtualTable)来实现的。简称为V-Table。在......
  • Web常见安全问题
    1.SQL注入SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL......
  • 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛
    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战1.核心词汇概率函数和奖励函数:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励......
  • 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛
    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战1.核心词汇概率函数和奖励函数:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励......