渗透测试数据管理的六大技巧
真实世界的档案
引言
信息就是力量。在讨论创建支持档案时,这一观点同样适用。支持档案是我们为了向客户通报测试发现并提供最相关信息而整理的内容。它应包含渗透测试的证据和工件,使测试人员能够利用信息进一步制定攻击策略,同时为客户提供好处,以便他们更好地增强安全态势。
理想情况下,安全测试人员(您)会希望在终端中与数据和支持档案进行交互。这样做可以通过命令行快速记录和交互内容,这在处理和搜索大量信息时尤其强大。
在本文中,我们将简要讨论如何最好地管理数据并创建强大的支持档案。
技巧 #1:为数据分配专用空间
在进行渗透测试时,您首先需要确保在文件系统中有一个专门用于帮助构建支持档案的数据的位置。除了与渗透测试直接相关的信息外,不应保存其他任何内容。例如,考虑以下目录路径:
/home/tester/testing
此文件路径指向用户“tester”的“home”目录和一个名为“testing”或客户名称的子目录。
图 1:您的档案从这里开始
虽然这似乎是一个平凡的概念,但为测试数据分配专用空间将有助于最小化不相关数据污染的机会,并最大化最终产品易于查找和导航的可能性。
创建专用文件夹后,考虑将其拆分为额外的子目录,根据您将使用的工具进一步分离内容。您当然可以在测试期间随意添加更多内容,但提前布局并将其作为任何测试环境的标准部分将节省您的时间,并使您能够实施一些节省时间的脚本实践,这将在后面讨论。例如,我们可能在空间中拥有以下目录:
/home/tester/testing/nmap
/home/tester/testing/gobuster
/home/tester/testing/cryptography
/home/tester/testing/eyewitness
/home/tester/testing/impacket
/home/tester/testing/recon
/home/tester/testing/crackmapexec
下图显示了一个示例。
图 2:支持档案内容
我首选的测试命名约定是:
/home/malone/[CLIENT-NAME]/testing
请随意使用您喜欢的任何命名约定。
有了这个基础,我们可以将这些信息带到下一个技巧,该技巧强调理解工具的重要性,以便您能够为数据提取最高质量的信息。
技巧 #2:理解命令语法和管道
在使用测试工具时,常见的是支持将结果输出到特定文件的工具。例如,我们可以配置 Nmap 使用开关 -oN
表示“正常输出”或 -oX
表示“XML 输出”。虽然这些方法通常有自己独特的用例,但为了彻底的支持档案的目的,我们希望依赖 -oN
。原因是正常输出是一个包含我们信息的简单文本文件。简单性是一件好事,可以允许我们使用同样简单的命令提取有意义的信息。此外,您可以根据需要利用 –oA
开关。此开关将同时为您提供正常、XML 和可 grep 的输出!对于此示例,我们将坚持使用 –oN
。
以下是利用此功能的示例命令。
nmap -vvv -Pn -T4 -sV 192.168.1.1 -oN /home/tester/nmap/192.168.1.1.txt
此命令指示 Nmap 提供非常、非常详细的输出(-vvv
),将所有主机视为存活(-Pn
),快速扫描(T4
),目标 IP 地址,并将该 IP 地址的输出保存为正常输出(-oN
)。通过这样做,我们能够生成一个包含简单输出的文本文件,最重要的是,它被保存到我们支持档案中此工具的指定位置。
图 3:Nmap 命令在行动中
值得注意的是,有些工具,无论是出于选择还是设计疏忽,可能并不总是包含输出信息的工具。在这种情况下,我们可以使用以下命令:
tee -a /home/tester/testing/[TOOL]/[FILENAME]
此命令 tee -a
允许我们将信息附加到计算机系统或支持档案中的任意位置。此命令在此格式下单独使用相对无用,但当与之前的命令结合时,它成为一个强大的日志记录工具。尽管 Nmap 支持日志记录,但为了此示例,我们可以假装它不支持,并使用以下命令获得相同的结果:
nmap -vvv -Pn -T4 -sV 192.168.1.1 | tee -a /home/tester/testing/192.168.1.1-nmap.txt
此命令将执行与上述 Nmap 命令相同的扫描,但现在将内容直接输出到所需文件。我们可以以这种方式利用“tee”来确保快速捕获信息。
技巧 #3:通过脚本增强您的档案
在真实环境中测试时,您可能会发现自己需要从事各种活动,这些活动如果手动执行,将消耗过多的时间。这些活动,无论是主机发现、枚举还是利用,都可以通过使用 BASH 脚本在终端中变得异常容易。
结合上述技巧,您可以快速编织脚本,这些脚本不仅可以使用您选择的工具执行所需操作,还会构建支持档案的干净完整区域。在我看来,最好的方法是使用“for 循环”。
对于此示例,我们将使用与上述相同的 Nmap 命令,但这次将其应用于整个主机范围。我们还将下面的命令分解为其各个组成部分,以确保最大清晰度。另外,请注意粗体文本。
for IP in $(cat /home/tester/testing/targets.txt); do nmap -vvv -Pn -T4 -sV $IP -oN /home/tester/testing/nmap/$IP.txt; done
此命令称为“for 循环”,以命令中的第一个单词命名 — 即“for”。让我们将其分解为三个部分。
我们的命令以以下开始:
for IP in $(cat /home/tester/testing/targets.txt);
这里,我们说,“嘿计算机,对于我们在读取 targets.txt 时每行找到的每个 IP…”。此片段是我们为命令其余部分设置的参数,该参数在我们的分号之后。(稍后详细说明。)一些熟悉 Nmap 的人可能意识到,类似的方法可以简单地向 Nmap 提供一个带有 -iL
开关的单词列表,并完全放弃“for 循环”。然而,这样做将产生一个包含所有扫描的单个日志文件。使用“for 循环”将改为生成多个日志文件用于所有 IP。这,正如我们稍后将涵盖的,将允许您以允许快速解析属于每个主机的信息的方式提取数据。
在我们继续之前,重要的是要注意 IP 是一个任意值。我们可以命名这个东西 — 这是一个变量 — 无论我们想要什么!我们可以称它为“i”或“blahblahblah”或“whatever”,我们的结果将是相同的,前提是我们在命令中的所有其他粗体文本中也反映这一点。
我们的分号然后告诉我们的脚本我们将提供另一个参数。此参数是:
do nmap -vvv -Pn -T4 -sV $IP -oN /home/tester/testing/nmap/$IP.txt;
我们现在说的是,“嘿计算机,对于我们在读取 targets.txt 时每行找到的每个 IP,请执行此 Nmap 命令并将您正在读取的 IP 值插入到我们命令中每个 $IP
的实例中。”我们的分号再次准备脚本用于最后一个参数,即简单地:
done
这告诉我们的循环在读取 targets.txt 中的列表后终止。为了使整个命令完整,您现在说了,“嘿计算机,对于我们在读取 targets.txt 时每行找到的每个 IP,请执行此 Nmap 命令并将您正在读取的 IP 值插入到我们命令中每个 $IP
的实例中。然后退出!”
为了将所有内容整合在一起,假设我们的目标列表是:
|
|
假设我们在终端中运行以下脚本:
for IP in $(cat /home/tester/testing/targets.txt); do nmap -vvv -Pn -T4 -sV $IP -oN /home/tester/testing/nmap/$IP.txt; done
这将执行与以下三个命令相同的指令:
|
|
根据我们已经探索的内容,您可以看到我们的 BASH 脚本将为您的 targets.txt 中的所有目标生成彻底的日志。然而,我们节省了大量时间,因为我们的“for 循环”只需要输入一次,留下 Nmap 为我们扫描我们的三个,或我们的三百个,或三千个主机。这节省了我们的时间,并确保我们的支持档案包含最大量的信息。
图 4:由 For 循环生成的 Nmap 日志列表
当变成习惯时,这种实践将有助于确保最大效率和日志记录准确性!
技巧 #4:让您的数据为您工作
不是要将其变成编程课,但您在测试期间收集的数据会变成一个相当强大的测试工具,前提是您以爱和关怀对待它并保持其组织!话虽如此,只要您实施一个聪明的脚本计划,允许它这样做,您的档案就可以自我增长。
通过结合我们之前的所有技巧,我们现在拥有:
- 一个专用工作空间;
- 对我们工具的理解;
- 对如何使用我们的工具与脚本构建档案的理解。
无论如何,我们可以完全在此结束文章并送您上路,但如果我们不考虑利用我们获得的信息的聪明方法,我们就不能称自己为黑客,对吗?
考虑到上述要点,我们现在可以使用我们的档案,使其能够进一步自我构建,从而节省更多时间。这次,由于我们工作的性质,时间可以用于完善那份美丽的渗透测试报告或从事手动测试,而您的工具在努力工作,您的档案在自我构建。
对于此示例,我起草了一个脚本,遵循以下步骤:
- 发现给定范围内存活的主机并生成目标列表。
- 使用目标列表进行端口扫描并将结果保存到档案。
- 使用端口扫描结果生成用于 Web 服务器的报告,该报告存储在档案中。
- 使用端口扫描结果枚举所有 Web 服务器的密码学,并且,您可能猜到了,将结果存储在您的档案中。
作为挑战,在审查代码以寻找工具背后的韵律和节奏时,考虑上述技巧。
另外,小免责声明:此脚本远非完美。然而,我确实觉得它很好地说明了本文讨论的概念,并适用于帮助构建档案的起点。请随意窃取此脚本并根据您的喜好使用/修改它。最重要的是 — 在您自己的脚本工作中发挥创造力!
|
|
创建这样的脚本并将其保存到文件后,您可以简单地在终端中“chmod +x scriptname.sh”然后运行脚本。
./scriptname.sh
此脚本遵循一个链,将我们到目前为止讨论的所有技巧付诸实践。
- 它在自己的独特位置构建我们的档案。
- 使用 IP CIDR 范围列表,它生成存活主机列表,并创建这些存活主机的日志文件 targets.txt。这被保存到我们的档案。
- 它使用新的 targets.txt 文件执行两个 Nmap 操作。第一个操作枚举所有存活主机。第二个操作生成一个 XML 文件,该文件将用于增强 EyeWitness。所有文件都保存到支持档案。
- EyeWitness 枚举包含在 Nmap XML 文件中的 Web 服务器并将其报告保存到我们的支持档案。
- 然后我们使用 ag,一个基于终端的搜索平台,和 regex 解析出检测到运行 Web 服务器的主机列表。这被保存到支持档案。
- 我们的脚本然后调用 testssl.sh 来评估所有目标 Web 服务器及其各自端口的密码学。这些日志然后也被保存到支持档案。
在走了这么远并遵守这些原则之后,您应该为您的支持档案拥有大量信息。当然,这只是我在评估期间用于收集低 hanging fruit 的方法。请随意设计您自己的脚本,但确保它们遵守生成强日志和为您的档案构建证据的理念!
技巧 #5:使用 Silver Searcher 快速搜索收集的数据
ag 是 Kali 中一个梦幻般的搜索工具,并帮助做了从刷新我测试中的记忆到创建我觉得分享了很多好信息的屏幕截图的一切。
ag 是一个搜索工具,可以通过以下方式调用:
ag
此命令,前提是您一直在使用 BASH“for 循环”并一直将信息输出到文件,可以用于快速识别重要信息。
例如,如果我想在我的 Nmap 扫描结果中搜索开放端口,我可以 cd 到我的 Nmap 目录并简单地发出:
ag open
此命令将拉取包含单词“open”的文件列表。看到 Nmap 如何使用单词“open”来描述端口状态,这可以用于快速拉取关于每个主机上开放端口的整齐修剪信息。
图 5:ag 拉取开放端口
这很棒,因为它不仅允许您快速查看关于开放端口的关键信息,而且数据可以进一步修剪,例如以下命令,它将快速产生运行 SSH 的主机列表:
ag open | grep ssh | sort -Vu
图 6:ag 结果用 grep 进一步修剪
类似地,您可以使用此来调查目录枚举结果,以立即拉出返回特定 HTTP 状态代码的有效目录名称:
ag 200
图 7:ag 在 Gobuster 日志中定位有效目录
此外,您甚至可以查找与密码学漏洞相关的信息:
ag sweet | grep VULNERABLE
图 8:ag 在主机日志中定位密码学漏洞
通过良好管理的支持档案和一点创造力,ag 可以为您提供巨大的力量和灵活性,允许快速检索信息。
我希望我已经说服了您!然而,值得注意的是,此工具确实递归挖掘。因此,最好在您希望执行搜索的目录中使用它。您还可以使用 –depth
开关指定它搜索递归的级别。在更高级别的目录中使用它,例如“/”,将返回许多您可能正在寻找的内容之外的结果。然而,ag 也是刮取挂载共享以获取存储密码信息的好方法 😉。
您可以使用“ag password=”或类似变体来搜索整个挂载共享以获取潜在凭据,但那是另一个时间的对话。
技巧 #6:接受手动添加内容…并丢弃东西!
别担心,我们已经完成了技术内容。值得记住的是,没有两次渗透测试是相同的。因此,简单地发射一个脚本并假设您的档案已完成从来是不合适的。如果您有一个稳定的基线方法,允许您获得关于目标的宝贵信息,如上述脚本,请随意使用它,但准备在测试期间向您的档案添加额外信息。类似地,您还应该准备从您的支持档案中排除内容,特别是如果它们包含可能非常敏感的信息,例如来自内部测试期间域控制器的 NTDS.DIT 转储的用户名和哈希,或个人