hacktricks/windows-hardening/active-directory-methodology
2024-01-03 10:48:46 +00:00
..
acl-persistence-abuse Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
ad-certificates Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
abusing-ad-mssql.md Translated to Chinese 2023-08-03 19:12:22 +00:00
ad-certificates.md Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql- 2024-01-02 22:21:01 +00:00
ad-dns-records.md Translated to Chinese 2023-08-03 19:12:22 +00:00
ad-information-in-printers.md Translated to Chinese 2023-08-03 19:12:22 +00:00
asreproast.md Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql- 2024-01-02 22:21:01 +00:00
bloodhound.md Translated ['windows-hardening/active-directory-methodology/bloodhound.m 2024-01-03 10:48:46 +00:00
constrained-delegation.md Translated to Chinese 2023-08-03 19:12:22 +00:00
custom-ssp.md Translated to Chinese 2023-08-03 19:12:22 +00:00
dcshadow.md Translated to Chinese 2023-08-03 19:12:22 +00:00
dcsync.md Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql- 2024-01-02 22:21:01 +00:00
diamond-ticket.md Translated to Chinese 2023-08-03 19:12:22 +00:00
dsrm-credentials.md Translated to Chinese 2023-08-03 19:12:22 +00:00
external-forest-domain-one-way-outbound.md Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql- 2024-01-02 22:21:01 +00:00
external-forest-domain-oneway-inbound.md Translated to Chinese 2023-08-03 19:12:22 +00:00
golden-ticket.md Translated to Chinese 2023-08-03 19:12:22 +00:00
kerberoast.md Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql- 2024-01-02 22:21:01 +00:00
kerberos-authentication.md Translated to Chinese 2023-08-03 19:12:22 +00:00
kerberos-double-hop-problem.md Translated to Chinese 2023-08-03 19:12:22 +00:00
laps.md Translated to Chinese 2023-08-03 19:12:22 +00:00
over-pass-the-hash-pass-the-key.md Translated to Chinese 2023-08-03 19:12:22 +00:00
pass-the-ticket.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
password-spraying.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
printers-spooler-service-abuse.md Translated ['windows-hardening/active-directory-methodology/printers-spo 2023-10-11 22:51:18 +00:00
printnightmare.md Translated to Chinese 2023-08-03 19:12:22 +00:00
privileged-groups-and-token-privileges.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
rdp-sessions-abuse.md Translated to Chinese 2023-08-03 19:12:22 +00:00
README.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
resource-based-constrained-delegation.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
security-descriptors.md Translated to Chinese 2023-08-03 19:12:22 +00:00
sid-history-injection.md Translated to Chinese 2023-08-03 19:12:22 +00:00
silver-ticket.md Translated ['windows-hardening/active-directory-methodology/README.md', 2024-01-02 20:35:58 +00:00
skeleton-key.md Translated to Chinese 2023-08-03 19:12:22 +00:00
unconstrained-delegation.md Translated to Chinese 2023-08-03 19:12:22 +00:00

Active Directory 方法论

从零开始学习 AWS 黑客攻击直至成为专家 htARTE (HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

基本概述

Active Directory 允许网络管理员创建和管理网络内的域、用户和对象。例如管理员可以创建一个用户组并为他们提供对服务器上某些目录的特定访问权限。随着网络的增长Active Directory 提供了一种组织大量用户到逻辑组和子组的方法,同时在每个级别提供访问控制。

Active Directory 结构包括三个主要层次1) 域2) 树,和 3) 森林。几个对象(用户或设备)可能被分组到一个单一的域中,所有这些对象使用相同的数据库。多个域可以组合成一个称为树的单一组。多个树可以组合成一个称为森林的集合。这些级别中的每一个都可以被分配特定的访问权和通信权限。

Active Directory 的主要概念:

  1. 目录 包含 Active Directory 对象的所有信息
  2. 对象 对象几乎引用目录内的任何东西(用户、组、共享文件夹...
  3. 目录的对象包含在域内。在一个“森林”中可以存在多个域,每个域都有自己的对象集合。
  4. 具有相同根的域组。例如:dom.local, email.dom.local, www.dom.local
  5. 森林 森林是组织层次结构的最高级别,由一组树组成。这些树通过信任关系连接。

Active Directory 提供了几种不同的服务这些服务统称为“Active Directory 域服务”或 AD DS。这些服务包括

  1. 域服务 存储集中数据并管理用户和域之间的通信;包括登录认证和搜索功能
  2. 证书服务 创建、分发和管理安全证书
  3. 轻量级目录服务 使用开放的 (LDAP) 协议支持目录启用的应用程序
  4. 目录联合服务 提供单点登录 (SSO),以便在单个会话中对多个网络应用程序中的用户进行认证
  5. 权利管理 通过防止未经授权的使用和分发数字内容来保护版权信息
  6. DNS 服务 用于解析域名。

AD DS 包含在 Windows Server包括 Windows Server 10并旨在管理客户端系统。虽然运行常规版本 Windows 的系统没有 AD DS 的管理功能,但它们确实支持 Active Directory。这意味着任何 Windows 计算机都可以连接到 Windows 工作组,前提是用户具有正确的登录凭据。
来源: https://techterms.com/definition/active_directory

Kerberos 认证

要学习如何攻击 AD,你需要非常好地理解 Kerberos 认证过程
如果你还不知道它是如何工作的,请阅读此页面。

速查表

你可以访问 https://wadcoms.github.io/ 快速查看你可以运行哪些命令来枚举/利用 AD。

Recon Active Directory无凭证/会话)

如果你只是能够访问 AD 环境,但没有任何凭证/会话,你可以:

  • 渗透测试网络:
  • 扫描网络,找到机器和开放端口,并尝试利用漏洞提取凭证(例如,打印机可能是非常有趣的目标
  • 枚举 DNS 可以获得域中关键服务器的信息如网页、打印机、共享、vpn、媒体等。
  • gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt
  • 查看通用渗透测试方法论以获取更多关于如何做到这一点的信息。
  • 检查 smb 服务上的 null 和 Guest 访问(这在现代 Windows 版本上不起作用):
  • enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
  • smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
  • smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
  • 关于如何枚举 SMB 服务器的更详细指南可以在这里找到:

{% content-ref url="../../network-services-pentesting/pentesting-smb.md" %} pentesting-smb.md {% endcontent-ref %}

  • 枚举 Ldap
  • nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
  • 关于如何枚举 LDAP 的更详细指南可以在这里找到(特别注意匿名访问

{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

用户枚举

  • 匿名 SMB/LDAP 枚举: 查看 渗透测试 SMB渗透测试 LDAP 页面。
  • Kerbrute 枚举:当请求无效用户名时,服务器将使用Kerberos 错误代码 KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN 响应,允许我们确定用户名无效。有效的用户名将引发TGT 在 AS-REP响应中或错误 KRB5KDC_ERR_PREAUTH_REQUIRED,表明用户需要执行预认证。
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases

nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='DOMAIN'" <IP>
Nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='<domain>',userdb=/root/Desktop/usernames.txt <IP>

msf> use auxiliary/gather/kerberos_enumusers

crackmapexec smb dominio.es  -u '' -p '' --users | awk '{print $4}' | uniq
  • OWA (Outlook Web Access) 服务器

如果你在网络中发现了这样的服务器,你也可以对其执行用户枚举。例如,你可以使用工具 MailSniper

ipmo C:\Tools\MailSniper\MailSniper.ps1
# Get info about the domain
Invoke-DomainHarvestOWA -ExchHostname [ip]
# Enumerate valid users from a list of potential usernames
Invoke-UsernameHarvestOWA -ExchHostname [ip] -Domain [domain] -UserList .\possible-usernames.txt -OutFile valid.txt
# Password spraying
Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summer2021
# Get addresses list from the compromised mail
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt

{% hint style="warning" %} 您可以在这个github仓库中找到用户名单,还有这个仓库(statistically-likely-usernames)。

不过,您应该已经从之前的侦察步骤中获得了公司员工的姓名。有了名字和姓氏,您可以使用脚本namemash.py来生成潜在的有效用户名。 {% endhint %}

知道一个或多个用户名

好的,所以你现在已经有了一个有效的用户名,但没有密码... 那么尝试:

  • ASREPRoast:如果用户没有属性 DONT_REQ_PREAUTH,您可以请求该用户的AS_REP消息,其中将包含一些由用户密码派生加密的数据。
  • Password Spraying:让我们尝试使用最常见的密码对每个发现的用户进行尝试,也许有些用户使用了弱密码(记住密码策略!)。
  • 注意,您还可以喷涂OWA服务器,尝试获取用户邮件服务器的访问权限。

{% content-ref url="password-spraying.md" %} password-spraying.md {% endcontent-ref %}

LLMNR/NBT-NS投毒

您可能能够通过投毒某些网络协议来获取一些挑战哈希值以供破解:

{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

NTML中继

如果您已经枚举了活动目录,您将拥有更多的电子邮件和对网络更深入的了解。您可能能够强制NTML 中继攻击以获取AD环境的访问权限。

盗取NTLM凭证

如果您可以使用null或guest用户访问其他PC或共享您可以放置文件如SCF文件如果以某种方式访问触发对您的NTML认证,这样您就可以盗取用于破解的NTLM挑战

{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}

使用凭证/会话枚举活动目录

在这个阶段,您需要拥有已泄露的凭证或有效域帐户的会话。如果您拥有一些有效的凭证或作为域用户的shell您应该记住之前给出的选项仍然是危害其他用户的选项

在开始认证枚举之前,您应该了解什么是Kerberos双跳问题

{% content-ref url="kerberos-double-hop-problem.md" %} kerberos-double-hop-problem.md {% endcontent-ref %}

枚举

拥有一个被泄露的帐户是开始危害整个域的大步骤,因为您将能够开始活动目录枚举:

关于ASREPRoast,您现在可以找到每一个可能易受攻击的用户,关于Password Spraying,您可以获取所有用户名的列表,并尝试被泄露帐户的密码、空密码和新的有希望的密码。

从Windows获取所有域用户名非常容易net user /domainGet-DomainUserwmic useraccount get name,sid。在Linux中您可以使用GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/usernameenum4linux -a -u "user" -p "password" <DC IP>

即使这个枚举部分看起来很小这是所有部分中最重要的部分。访问链接主要是cmd、powershell、powerview和BloodHound的链接学习如何枚举域并练习直到您感到舒适。在评估期间这将是找到通往DA的途径或决定无法做任何事情的关键时刻。

Kerberoast

Kerberoasting的目标是收集代表域用户帐户运行的服务的TGS票据。这些TGS票据的一部分是用用户密码派生的密钥加密的。因此,它们的凭证可以离线破解
更多关于这个的信息在:

{% content-ref url="kerberoast.md" %} kerberoast.md {% endcontent-ref %}

远程连接RDP、SSH、FTP、Win-RM等

一旦您获得了一些凭证,您可以检查是否可以访问任何机器。为此,您可以使用CrackMapExec尝试使用不同的协议连接到几个服务器,根据您的端口扫描情况。

本地权限提升

如果您已经泄露了凭证或作为普通域用户的会话,并且您可以使用该用户访问域中的任何机器,您应该尝试找到方法来在本地提升权限并寻找凭证。这是因为只有具有本地管理员权限,您才能够转储内存中的其他用户的哈希值LSASS和本地SAM

本书中有一整页关于Windows本地权限提升和一个检查清单。另外,不要忘记使用WinPEAS

当前会话票据

您很不可能在当前用户中找到授予您访问意外资源的票据,但您可以检查:

## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
## Dump the interesting one by luid
.\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("<BASE64_TICKET>"))

NTML 中继

如果您已经成功枚举了活动目录,您将拥有更多的电子邮件和对网络更好的了解。您可能能够强制执行 NTML 中继攻击

在计算机共享中寻找凭据

现在您已经有了一些基本凭据,您应该检查是否可以在 AD 内部找到任何有趣的共享文件。您可以手动执行此操作,但这是一项非常枯燥重复的任务(如果您发现需要检查的文档有数百个,那就更加枯燥了)。

点击此链接了解您可以使用的工具。

偷取 NTLM 凭据

如果您可以访问其他 PC 或共享,您可以放置文件(如 SCF 文件),如果以某种方式访问,将触发对您的 NTML 身份验证,这样您就可以窃取 NTLM 挑战来破解它:

{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}

CVE-2021-1675/CVE-2021-34527 PrintNightmare

这个漏洞允许任何经过身份验证的用户危害域控制器

{% content-ref url="printnightmare.md" %} printnightmare.md {% endcontent-ref %}

在具有特权凭据/会话的活动目录上的权限提升

对于以下技术,普通域用户是不够的,您需要一些特殊权限/凭据来执行这些攻击。

哈希提取

希望您已经成功危害了一些本地管理员账户,使用 AsRepRoast密码喷洒KerberoastResponder 包括中继、EvilSSDP本地权限提升
然后,是时候转储内存中和本地的所有哈希了。
阅读此页面了解获取哈希的不同方法。

传递哈希

一旦您拥有用户的哈希,您可以使用它来冒充它。
您需要使用一些工具执行使用该哈希NTLM 身份验证或者您可以创建一个新的sessionlogon注入哈希LSASS中,所以当执行任何NTLM 身份验证时,都会使用该哈希。最后一个选项是 mimikatz 所做的。
阅读此页面了解更多信息。

超越传递哈希/传递密钥

这种攻击旨在使用用户 NTLM 哈希请求 Kerberos 票据,作为常见的 NTLM 协议上的传递哈希的替代方法。因此,这在只允许Kerberos 作为身份验证协议并禁用 NTLM 协议的网络中尤其有用

{% content-ref url="over-pass-the-hash-pass-the-key.md" %} over-pass-the-hash-pass-the-key.md {% endcontent-ref %}

传递票据

这种攻击与传递密钥类似,但不是使用哈希请求票据,而是窃取票据本身并使用它作为其所有者进行身份验证。

{% content-ref url="pass-the-ticket.md" %} pass-the-ticket.md {% endcontent-ref %}

凭据重用

如果您拥有本地管理员哈希密码,您应该尝试使用它在其他PC本地登录

# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +

{% hint style="warning" %} 请注意,这可能会产生很多噪音,而LAPS可以减轻这种情况。 {% endhint %}

MSSQL 滥用和可信链接

如果用户有权限访问 MSSQL 实例,他可能能够利用它在 MSSQL 主机上执行命令(如果以 SA 身份运行),窃取 NetNTLM 哈希,甚至进行中继 攻击
此外,如果一个 MSSQL 实例被另一个 MSSQL 实例信任(数据库链接)。如果用户对受信任的数据库有权限,他将能够利用信任关系在另一个实例中执行查询。这些信任可以被串联,用户可能最终能够找到一个配置不当的数据库,在那里他可以执行命令。
数据库之间的链接甚至可以跨越森林信任工作。

{% content-ref url="abusing-ad-mssql.md" %} abusing-ad-mssql.md {% endcontent-ref %}

无限制委派

如果您发现任何具有 ADS_UF_TRUSTED_FOR_DELEGATION 属性的计算机对象,并且您在计算机上拥有域权限,您将能够从登录到计算机的每个用户的内存中转储 TGT。
因此,如果域管理员登录到计算机,您将能够转储他的 TGT 并使用 Pass the Ticket 冒充他。
通过受限委派,您甚至可以自动攻击打印服务器(希望它是一个 DC

{% content-ref url="unconstrained-delegation.md" %} unconstrained-delegation.md {% endcontent-ref %}

受限委派

如果允许用户或计算机进行“受限委派”,它将能够冒充任何用户访问计算机中的某些服务
然后,如果您攻击了此用户/计算机的哈希,您将能够冒充任何用户(甚至是域管理员)来访问某些服务。

{% content-ref url="constrained-delegation.md" %} constrained-delegation.md {% endcontent-ref %}

基于资源的受限委派

如果您对计算机的 AD 对象拥有写权限,您可以在远程计算机上获得具有提升权限的代码执行

{% content-ref url="resource-based-constrained-delegation.md" %} resource-based-constrained-delegation.md {% endcontent-ref %}

ACL 滥用

受损用户可能对某些域对象拥有一些有趣的权限,这些权限可以让您横向移动/提升权限。

{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}

打印机假脱机服务滥用

如果您能在域内找到任何监听的假脱机服务,您可能能够滥用它来获取新的凭据提升权限
关于如何滥用假脱机服务的更多信息在这里。

第三方会话滥用

如果其他用户 访问 受损的机器,可以从内存中收集凭据,甚至在他们的进程中注入信标来冒充他们。
通常用户会通过 RDP 访问系统,所以这里有如何对第三方 RDP 会话执行一对攻击的方法:

{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}

LAPS

LAPS 允许您管理本地管理员密码(这是随机化的,唯一的,并且定期更改)在加入域的计算机上。这些密码在 Active Directory 中集中存储,并使用 ACL 限制授权用户。如果您有足够的权限读取这些密码,您可以移动到其他计算机

{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}

证书盗窃

从受损机器收集证书可能是提升环境内权限的一种方式:

{% content-ref url="ad-certificates/certificate-theft.md" %} certificate-theft.md {% endcontent-ref %}

证书模板滥用

如果配置了易受攻击的模板,可以滥用它们来提升权限:

{% content-ref url="ad-certificates/domain-escalation.md" %} domain-escalation.md {% endcontent-ref %}

拥有高权限账户的后期开发

转储域凭据

一旦您获得域管理员或更好的企业管理员权限,您可以转储 域数据库ntds.dit

关于 DCSync 攻击的更多信息可以在这里找到

关于如何窃取 NTDS.dit 的更多信息可以在这里找到

Privesc 作为持久性

之前讨论的一些技术可以用于持久性。
例如,您可以:

Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync

银票

银票攻击基于制作一个有效的 TGS 为服务一旦拥有服务的 NTLM 哈希(如PC 账户哈希)。因此,通过伪造一个自定义 TGS 作为任何用户(如获得对计算机的特权访问),可以访问该服务

{% content-ref url="silver-ticket.md" %} silver-ticket.md {% endcontent-ref %}

金票

可以使用 krbtgt AD 账户的 NTLM 哈希创建一个有效的 TGT 作为任何用户。伪造 TGT 而不是 TGS 的优势在于能够访问域中的任何服务(或机器)作为冒充的用户。

{% content-ref url="golden-ticket.md" %} golden-ticket.md {% endcontent-ref %}

钻石票

这些像金票一样被伪造,以绕过常见的金票检测机制。

{% content-ref url="diamond-ticket.md" %} diamond-ticket.md {% endcontent-ref %}

证书账户持久性

拥有账户的证书或能够请求它们是能够在用户账户中持久化的非常好的方式(即使他更改了密码):

{% content-ref url="ad-certificates/account-persistence.md" %} account-persistence.md {% endcontent-ref %}

证书域持久性

使用证书也可以在域内持久化高权限:

{% content-ref url="ad-certificates/domain-persistence.md" %} domain-persistence.md {% endcontent-ref %}

AdminSDHolder 组

AdminSDHolder 对象的访问控制列表ACL用作模板复制 权限 到 Active Directory 中的所有“受保护组”及其成员。受保护的组包括 Domain Admins、Administrators、Enterprise Admins 和 Schema Admins、Backup Operators 和 krbtgt 等特权组。
默认情况下,该组的 ACL 被复制到所有“受保护的组”中。这样做是为了避免对这些关键组的故意或意外更改。然而,如果攻击者
修改了
AdminSDHolder 的 ACL例如给予普通用户完全权限这个用户将在所有受保护组内的组中拥有完全权限在一个小时内
如果有人试图从 Domain Admins例如中删除这个用户在一个小时或更短的时间内用户将回到该组。
关于 AdminDSHolder 组的更多信息在这里。

DSRM 凭据

每个DC内部都有一个本地管理员账户。拥有这台机器的管理员权限,您可以使用 mimikatz 转储本地管理员哈希。然后,修改注册表以激活此密码,以便您可以远程访问此本地管理员用户。

{% content-ref url="dsrm-credentials.md" %} dsrm-credentials.md {% endcontent-ref %}

ACL 持久性

您可以给予某个用户对某些特定域对象的特殊权限,这将让用户在未来提升权限

{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}

安全描述符

安全描述符用于存储一个对象另一个对象权限。如果您只是在对象的安全描述符做出一点改变,您可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。

{% content-ref url="security-descriptors.md" %} security-descriptors.md {% endcontent-ref %}

骷髅钥匙

修改内存中的 LSASS 来创建一个主密码,该密码适用于域中的任何账户。

{% content-ref url="skeleton-key.md" %} skeleton-key.md {% endcontent-ref %}

自定义 SSP

了解什么是 SSP安全支持提供者在这里。
您可以创建您自己的 SSP捕获明文形式使用的凭据来访问机器。\

{% content-ref url="custom-ssp.md" %} custom-ssp.md {% endcontent-ref %}

DCShadow

它在 AD 中注册一个新的域控制器,并使用它来推送属性SIDHistory、SPNs...)到指定对象而不留下任何关于修改日志。您需要 DA 权限并位于根域内。
请注意,如果您使用错误的数据,将会出现非常严重的日志。

{% content-ref url="dcshadow.md" %} dcshadow.md {% endcontent-ref %}

LAPS 持久性

之前我们已经讨论了如果您有足够的权限读取 LAPS 密码,如何提升权限。然而,这些密码也可以用来维持持久性
检查:

{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}

森林权限提升 - 域信任

Microsoft 认为域不是安全边界森林是安全边界。这意味着如果您攻破了森林内的一个域,您可能能够攻破整个森林

基本信息

从高层次上看,域信任建立了一个域中的用户认证到资源或作为安全主体 在另一个域中的能力。

本质上,信任所做的就是连接两个域的认证系统,并允许认证流量通过一个引荐系统在它们之间流动。
两个域相互信任时,它们会交换密钥,这些密钥将被保存每个域的 DC 中(每个信任方向 2 个密钥,最新和之前的),并且密钥将是信任的基础。

用户尝试访问 信任域中的服务时,它将向其域的 DC 请求一个跨领域 TGT。DC 将为客户端提供这个TGT,它将用跨领域 密钥(两个域交换的密钥)加密/签名。然后,客户端访问 另一个域的 DC 并将使用跨领域 TGT 请求 服务的TGS。信任域的DC检查使用的密钥,如果没问题,它将信任该票证中的所有内容,并将 TGS 提供给客户端。

不同的信任

重要的是要注意,信任可以是单向的或双向的。在双向选项中,两个域将相互信任,但在单向信任关系中,一个域将是受信任的,另一个将是信任的域。在后一种情况下,您将只能从受信任的域访问信任域内的资源

如果域 A 信任域 BA 是信任域B 是受信任的。此外,在域 A中,这将是一个出站信任;并且在域 B中,这将是一个入站信任

不同的信任关系

  • 父子 - 属于同一个森林 - 子域与其父域保持隐式的双向传递信任。这可能是您最常遇到的信任类型。
  • 交叉链接 - 也称为子域之间的“快捷信任”,以改善引荐时间。通常在复杂的森林中的引荐必须先过滤到森林根,然后再回到目标域,所以对于地理分布广泛的情况,交叉链接可以减少认证时间。
  • 外部 - 在不同域之间创建的隐式非传递信任。
Get-DomainTrust

SourceName      : sub.domain.local    --> current domain
TargetName      : domain.local        --> foreign domain
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST       --> WITHIN_FOREST: Both in the same forest
TrustDirection  : Bidirectional       --> Trust direction (2ways in this case)
WhenCreated     : 2/19/2021 1:28:00 PM
WhenChanged     : 2/19/2021 1:28:00 PM

{% hint style="warning" %} 存在2个受信任的密钥,一个用于 Child --> Parent 另一个用于 Parent --> Child
您可以使用当前域的密钥来查看它们:

Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'

{% endhint %}

SID-History 注入

通过 SID-History 注入滥用信任关系,作为企业管理员升级到子域/父域:

{% content-ref url="sid-history-injection.md" %} sid-history-injection.md {% endcontent-ref %}

利用可写的 Configuration NC

Configuration NC 是存储森林配置信息的主要仓库,并复制到森林中的每个 DC。此外森林中的每个可写 DC非只读 DC都持有 Configuration NC 的可写副本。利用这一点需要在DC 上以 SYSTEM 身份运行。

可以通过下面介绍的各种方式危害根域。

将 GPO 链接到根 DC 站点

Configuration NC 中的 Sites 容器包含 AD 森林中所有加入域的计算机的站点。当在森林中的任何 DC 上以 SYSTEM 身份运行时,可以将 GPO 链接到站点,包括森林根 DC 的站点,从而危害这些站点。

更多细节可以在这里阅读 Bypass SID filtering research

在森林中危害任何 gMSA

攻击依赖于目标域中的具有特权的 gMSA。

用于计算森林中 gMSA 密码的 KDS 根密钥存储在 Configuration NC 中。当在森林中的任何 DC 上以 SYSTEM 身份运行时,可以读取 KDS 根密钥并计算森林中任何 gMSA 的密码。

更多细节可以在这里阅读:Golden gMSA trust attack from child to parent

架构更改攻击

攻击要求攻击者等待新的具有特权的 AD 对象被创建。

当在森林中的任何 DC 上以 SYSTEM 身份运行时,可以授予任何用户对 AD 架构中所有类的完全控制。可以滥用该控制权,在任何 AD 对象的默认安全描述符中创建一个 ACE该 ACE 授予对受损主体的完全控制。修改后的 AD 对象类型的所有新实例都将具有此 ACE。

更多细节可以在这里阅读:Schema change trust attack from child to parent

通过 ADCS ESC5 从 DA 到 EA

ADCS ESC5易受攻击的 PKI 对象访问控制)攻击滥用对 PKI 对象的控制,创建一个易受攻击的证书模板,可以用来作为森林中任何用户进行认证。由于所有 PKI 对象都存储在 Configuration NC 中如果有人危害了森林中的任何可写DC就可以执行 ESC5。

更多细节可以在这里阅读:From DA to EA with ESC5

如果 AD 森林没有 ADCS攻击者可以按照这里描述的创建必要的组件Escalating from child domains admins to enterprise admins in 5 minutes by abusing AD CS, a follow up

外部森林域 - 单向(入站)或双向

Get-DomainTrust
SourceName      : a.domain.local   --> Current domain
TargetName      : domain.external  --> Destination domain
TrustType       : WINDOWS-ACTIVE_DIRECTORY
TrustAttributes :
TrustDirection  : Inbound          --> Inboud trust
WhenCreated     : 2/19/2021 10:50:56 PM
WhenChanged     : 2/19/2021 10:50:56 PM

在这种情况下,你的域被一个外部域信任,给予你对它的不确定的权限。你需要找出你的域中哪些主体对外部域有哪些访问权限,然后尝试利用它:

{% content-ref url="external-forest-domain-oneway-inbound.md" %} external-forest-domain-oneway-inbound.md {% endcontent-ref %}

外部森林域 - 单向(出站)

Get-DomainTrust -Domain current.local

SourceName      : current.local   --> Current domain
TargetName      : external.local  --> Destination domain
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection  : Outbound        --> Outbound trust
WhenCreated     : 2/19/2021 10:15:24 PM
WhenChanged     : 2/19/2021 10:15:24 PM

在这种情况下,你的域正在信任来自不同域的主体的一些权限

然而,当一个域被信任域信任时,被信任的域会创建一个用户,该用户具有可预测的名称,并使用被信任的密码作为密码。这意味着有可能访问信任域的用户以进入被信任的域,对其进行枚举并尝试获得更多权限:

{% content-ref url="external-forest-domain-one-way-outbound.md" %} external-forest-domain-one-way-outbound.md {% endcontent-ref %}

侵害被信任域的另一种方法是找到一个在域信任的相反方向创建的SQL信任链接(这不是很常见)。

侵害被信任域的另一种方法是等待在一个被信任域的用户可以访问的机器上通过RDP登录。然后攻击者可以在RDP会话进程中注入代码从那里访问受害者的原始域
此外,如果受害者挂载了他的硬盘驱动器,从RDP会话进程中,攻击者可以在硬盘启动文件夹中存储后门。这种技术被称为RDPInception

{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}

域信任滥用缓解

SID过滤

  • 避免滥用跨森林信任的SID历史属性的攻击。
  • 默认在所有森林间信任上启用。默认情况下,假定森林内信任是安全的(微软认为森林而不是域是安全边界)。
  • 但是由于SID过滤可能会破坏应用程序和用户访问因此它通常被禁用。
  • 选择性认证
  • 在森林间信任中,如果配置了选择性认证,信任间的用户将不会自动被认证。应该给予信任域/森林中的域和服务器的个别访问权限。
  • 不能防止可写配置NC利用和信任账户攻击。

在ired.team上了解更多关于域信任的信息。

AD -> 云 & 云 -> AD

{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}

一些通用防御措施

在这里了解更多关于如何保护凭证的信息。
请在技术描述中找到针对每种技术的一些缓解措施。

  • 不允许域管理员在域控制器之外的任何其他主机上登录
  • 永远不要以DA权限运行服务
  • 如果你需要域管理员权限,限制时间:Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)

欺骗

  • 密码不过期
  • 受信任的委派
  • 拥有SPN的用户
  • 描述中的密码
  • 属于高权限组的用户
  • 对其他用户、组或容器拥有ACL权限的用户
  • 计算机对象
  • ...
  • https://github.com/samratashok/Deploy-Deception
  • Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose

如何识别欺骗

对于用户对象:

  • ObjectSID与域不同
  • lastLogon, lastlogontimestamp
  • Logoncount非常低的数字是可疑的
  • whenCreated
  • Badpwdcount非常低的数字是可疑的

通用:

  • 一些解决方案会在所有可能的属性中填充信息。例如将计算机对象的属性与DC这样的100%真实计算机对象的属性进行比较。或者将用户与RID 500默认管理员进行比较。
  • 检查是否有些东西好得令人难以置信
  • https://github.com/JavelinNetworks/HoneypotBuster

绕过Microsoft ATA检测

用户枚举

ATA只在你尝试在DC中枚举会话时抱怨所以如果你不在DC中寻找会话而是在其他主机中寻找你可能不会被检测到。

票据冒充创建Over pass the hash, golden ticket...

始终使用aes密钥创建票据因为ATA识别为恶意的是降级到NTLM。

DCSync

如果你不是从域控制器执行此操作ATA会抓到你抱歉。

更多工具

参考

通过 htARTE (HackTricks AWS Red Team Expert)从零到英雄学习AWS黑客攻击

支持HackTricks的其他方式