现在只完成了其中一部分内容,每周更新,感兴趣的可以持续关注一下~
域枚举
AD 中存储的数据非常丰富,如果只是在没有计划的情况下进行,枚举 AD 环境可能会漏掉一些东西。我们需要为自己制定一个游戏计划并逐个解决它。每个人的工作方式都略有不同,因此随着我们获得更多经验,我们将开发最适合我们自己的方法。不管我们如何进行,我们通常从同一个地方开始并寻找相同的数据点。我们将在本节和后续部分中试验许多工具。重要的是尝试使用不同的工具创建示例,以了解它们的工作方式有何不同,学习它们的语法,并找到最适合我们的方法。
我们将从被动识别网络中的主机开始,然后验证结果以了解有关每个主机的更多信息(正在运行的服务、名称、潜在漏洞等)。一旦我们知道存在哪些主机,我们就可以继续探测这些主机,寻找我们可以从中收集到的数据。完成这些任务后,我们应该停下来重新组合并查看我们拥有的信息。此时,我们希望拥有一组凭据或用户帐户,以在加入域的主机上建立立足点,或者能够从我们的 Linux 攻击主机开始凭据枚举。
让我们看看一些工具和技术来帮助我们进行此枚举。
用户识别
如果在开始测试时没有任何用户权限,我们将需要找到一种方法通过获取用户的明文凭据或 NTLM 密码哈希来在域中建立立足点,加入域的主机上的 SYSTEM shell,或域用户帐户的 shell。在内部渗透测试的早期阶段,获得具有凭据的有效用户至关重要。这种访问(即使是最低级别)为执行枚举甚至攻击提供了许多机会。
Kerbrute - 内部域用户名枚举
Kerbrute可以用来做域帐户枚举。它利用了 Kerberos 预身份验证失败不会触发日志或警报这一漏洞。我们将使用 Kerbrute 结合Insidetrust中的用户列表。该工具速度很快,并且会向我们提供结果,让我们知道找到的帐户是否有效,这是发起密码喷射等攻击的一个很好的起点。
克隆 Kerbrute GitHub Repo
kali@kali:~$ sudo git clone https://github.com/ropnop/kerbrute.git
Cloning into 'kerbrute'...
remote: Enumerating objects: 845, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 845 (delta 18), reused 28 (delta 10), pack-reused 798
Receiving objects: 100% (845/845), 419.70 KiB | 2.72 MiB/s, done.
Resolving deltas: 100% (371/371), done.
为多个平台编译
kali@kali:~$ sudo make all
go: downloading github.com/spf13/cobra v1.1.1
go: downloading github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
go: downloading github.com/ropnop/gokrb5/v8 v8.0.0-20201111231119-729746023c02
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/jcmturner/gofork v1.0.0
go: downloading github.com/hashicorp/go-uuid v1.0.2
go: downloading golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
go: downloading github.com/jcmturner/rpc/v2 v2.0.2
go: downloading github.com/jcmturner/dnsutils/v2 v2.0.0
go: downloading github.com/jcmturner/aescts/v2 v2.0.0
go: downloading golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa
cd /tmp/kerbrute
rm -f kerbrute kerbrute.exe kerbrute kerbrute.exe kerbrute.test kerbrute.test.exe kerbrute.test kerbrute.test.exe main main.exe
rm -f /root/go/bin/kerbrute
Done.
Building for windows amd64..
<SNIP>
使用 Kerbrute 枚举用户
kali@kali:~$ kerbrute userenum -d INLANEFREIGHT.LOCAL --dc 172.16.5.5 jsmith.txt -o valid_ad_users
2022/12/27 23:01:46 > Using KDC(s):
2022/12/27 23:01:46 > 172.16.5.5:88
2022/12/27 23:01:46 > [+] VALID USERNAME: jjones@INLANEFREIGHT.LOCAL
2022/12/27 23:01:46 > [+] VALID USERNAME: sbrown@INLANEFREIGHT.LOCAL
2022/12/27 23:01:46 > [+] VALID USERNAME: tjohnson@INLANEFREIGHT.LOCAL
2022/12/27 23:01:50 > [+] VALID USERNAME: evalentin@INLANEFREIGHT.LOCAL
<SNIP>
2022/12/27 23:01:51 > [+] VALID USERNAME: sgage@INLANEFREIGHT.LOCAL
2022/12/27 23:01:51 > [+] VALID USERNAME: jshay@INLANEFREIGHT.LOCAL
2022/12/27 23:01:51 > [+] VALID USERNAME: jhermann@INLANEFREIGHT.LOCAL
2022/12/27 23:01:51 > [+] VALID USERNAME: whouse@INLANEFREIGHT.LOCAL
2022/12/27 23:01:51 > [+] VALID USERNAME: emercer@INLANEFREIGHT.LOCAL
2022/12/27 23:01:52 > [+] VALID USERNAME: wshepherd@INLANEFREIGHT.LOCAL
2022/12/27 23:01:56 > Done! Tested 48705 usernames (56 valid) in 9.940 seconds
我们可以从我们的输出中看到,我们验证了 INLANEFREIGHT.LOCAL 域中的 56 个用户,并且只用了几秒钟就完成了。现在我们可以利用这些结果构建一个列表,用于有针对性的密码喷射攻击。
识别潜在漏洞
本地系统中的NT AUTHORITY\SYSTEM帐户具有系统的最高级别访问权限,用于运行大多数 Windows 服务。主机上的SYSTEM帐户能够通过模拟计算机帐户来枚举 Active Directory,这实际上只是另一种用户帐户。在域环境中拥有系统级访问权限几乎等同于拥有域帐户。
有几种方法可以获得主机上的系统级访问权限,包括但不限于:
- 远程 Windows 漏洞,例如 MS08-067、EternalBlue 或 BlueKeep
- Windows 操作系统中的本地提权漏洞
- 使用本地帐户在加入域的主机上获得管理员访问权限,并使用 Psexec 启动 SYSTEM cmd 窗口
通过在加入域的主机上获得系统级访问权限,您将能够执行以下操作,包括但不限于: - 使用内置工具或攻击性工具(如 BloodHound 和 PowerView)枚举域
- 在同一域内执行 Kerberoasting / ASREPRoasting 攻击
- 运行 Inveigh 等工具来收集 Net-NTLMv2 哈希值或执行 SMB 中继攻击
- 执行令牌模拟以劫持特权域用户帐户
- 进行 ACL 攻击