密码喷洒与RPCCLIENT的其他妙用
注意: 本博文中引用的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习机会,并可能整合到现代工具和技术中。
我们渗透测试社区的许多人习惯于这样的场景:通过定向钓鱼活动进入Windows企业环境,获得美妙的Windows命令行网络工具访问权限。获得shell后,很快就能运行所有喜欢的枚举命令,例如:
|
|
更不用说通常还能使用Metasploit后期利用模块和各种PowerShell工具(如Veil和PowerShell Empire)的丰富功能。
想象一下这样一个世界:你只有一台Linux主机可用在内网中,无法后门访问任何现有Windows系统。在这个世界里,你实际上与网络的其他部分隔离,甚至无法使用Ettercap等拦截技术捕获有用的网络流量。这确实是我最近遇到的情况,我只能SSH到我控制的单个Linux主机。
一段时间没有遇到这种情况后,我停顿了片刻,才想起Samba的奇妙世界。特别是Samba套件中有两个优秀且有用的程序:“rpcclient"及其朋友"smbclient”。另外,别忘了我们最喜欢的DNS工具"dig"。
我的首要任务是利用可用侦察信息,明智地猜测内部域名可能是什么。这里有几种不同的方法可以考虑,但首先是使用dig来确定有用的DNS信息。我可以尝试查找Windows全局目录记录和权威域服务器记录,以确定域控制器地址。示例如下:
|
|
这只有在预测或确定了正确的"domain.corp"名称后才会给我答案。
幸运的是,我可以访问内部Nessus漏洞报告数据,并确定某些主机允许SMB空会话。我将数据与dig结果匹配,确定空会话实际上对应于域控制器地址。我的下一个任务是尝试仅使用rpcclient从域控制器枚举用户和组信息。我快速查阅"man"页面确定rpcclient确实可以执行匿名绑定,如下所示:
|
|
其中10.10.10.10是我可以匿名绑定的域控制器地址。运行该命令后,rpcclient将给出极好的"rpcclient>“提示。此时,如果可以使用匿名会话,那么工具中有一些非常有用的命令。
-
枚举域用户
1
enumdomusers
-
枚举域组
1
enumdomgroups
-
查询组信息和组成员
1 2
querygroup <RID> querygroupmem <RID>
-
按RID查询特定用户信息(包括计算机)
1
queryuser <RID>
使用这些基本命令,我能够彻底调查Windows域用户和组信息的概况。
渗透测试中经常使用的另一种技术称为"密码喷洒”。这是一种特别有效的技术,在给定域用户列表和常见密码知识的情况下,测试人员尝试对列表中的每个用户执行登录。这种技术非常有效,因为你有意将尝试的密码列表限制在少量。实际上,建议每次喷洒尝试只使用一个密码,因为你真的不想锁定账户。
在密码喷洒之前,使用"NET ACCOUNTS /DOMAIN"等命令确定Windows域密码策略非常有用。但是,鉴于我们没有可用的Windows shell,rpcclient给我们提供了以下选项:
|
|
至少我们能够确定关于密码长度的关键信息。写完这篇文章后,我可能会研究如何解码密码属性并将其匹配回适当的信息,但我还没有完成这项任务。
为了执行密码喷洒攻击,下一步是选择一个常见密码(如"Autumn2015")并找出使用rpcclient进行喷洒的技术。方便的是,rpcclient允许我们在命令行指定一些命令,这非常方便。以下两个示例显示了成功登录与失败登录。(密码"bbb"是正确的登录凭证)。
成功:
|
|
失败:
|
|
在这些示例中,我们特别告诉rpcclient运行两个命令:“getusername"然后"quit"退出客户端。现在我们拥有了执行密码喷洒攻击的所有要素。我们只需要一个bourne/bash shell循环,就可以开始了。假设"enumdomusers"输出在"domain-users.txt"文件中,简单的shell脚本或命令行喷洒示例如下:
|
|
当你在输出中看到"Authority"字符串时,你就知道成功了。每个用户不成功将会是"NT_STATUS_LOGON_FAILURE"消息。
如果你开始得到"ACCOUNT_LOCKED"失败,应立即停止喷洒,因为你可能在短时间内喷洒了太多次。
假设你获得了凭据访问权限,可以做的另一件好事是使用smbclient程序探索SYSVOL。语法如下:
|
|
我强烈建议熟悉UNIX Samba套件,特别是这些工具。在过去的一周里,它们确实救了我,将来你可能也需要这些有趣的工具。