您可以在前面的屏幕截图中看到,对我们命令的响应是域**www.packt.net**的 DNS 服务器的 IP 地址。您还可以看到他们的 DNS 配置了 IPv6 地址。如果我们测试这个网站,我们会进一步探索。或者,我们也可以使用另一个很棒的 DNS 查找工具**dig。**现在,我们将不讨论它,转而讨论下一个资源。
* Way Back Machine ([www.archive.org](http://www.archive.org)):
这个网站证明了互联网上的任何东西都不会离开!当客户通知团队他们正在测试一台未投入生产的 web 服务器时,已经有很多评估,当他们看到该站点已经被复制和存储时,他们惊奇地发现这确实发生了。我喜欢使用该站点下载一些我最喜欢的演示文稿、工具等,这些内容已从站点中删除,在某些情况下,该站点已不存在。例如,用于向学生展示隐写术概念的工具之一是工具*Infostego*。这个工具是由 Antiy 实验室发布的,它为学生提供了一个易于使用的工具来理解这些概念。如果你去他们的网站[www.antiy.net](http://www.antiy.net),你会发现没有提到这个工具。事实上,在他们的任何一页上都找不到。他们现在更专注于杀毒市场。他们页面的一部分显示在以下屏幕截图中:
我们需要一个 ISO 映像来用于我们的虚拟机。为此,我们将使用优秀的工具 Samurai**Web 测试框架**(**WTF**。这是一个 web 应用测试框架,它是一个实时 Linux 环境,已预配置为 web 测试框架。这张 CD 包含了一些最好的开源和免费工具,可以用来测试和攻击网站。您可以从[下载 ISO 图像 http://www.samurai-wtf.org/](http://www.samurai-wtf.org/) 。
3. Select **New Virtual network** on the left-hand pane and select **External** as the type of network, then click on **Add**. This is shown in the following screenshot:
5. In the Installation Options window, select the radio button **Install an operating system from a boot CD/DVD-ROM** and then select the image file (ISO) and browse to the Kali image. Refer to the following screenshot:
![Hyper-V](graphics/477-1_02_03.jpg)
![Hyper-V](img/477-1_02_03.jpg)
这是安装选项屏幕,供您参考
6. 导航到 ISO 图像后,单击**下一步**。验证您的设置是否正确,然后单击**完成**。
7. We now want to configure our network adapter. Within the Hyper-V environment, this can be a tricky process; so, the safest way when you are dealing with machines that are not from the Windows family is to select the legacy card. Right-click on the Kali virtual machine you have created and select **Legacy Network Adapter**. Then, click on **Add** as shown in the following screenshot:
9. A new virtual network will appear on the left-hand side of the window. Select it and then enter the name as `ExternalNet` in the right-hand pane of the window. Ensure that the **External** radio button is selected, click on the network adapter of your computer, and then click on **Apply**, as shown in the following screenshot:
11. If you do not want to be bothered by the alert again, then select the **Please don't ask me again** checkbox before you click on **Yes**, as shown in the following screenshot:
![Hyper-V](graphics/477-1_02_07.jpg)
![Hyper-V](img/477-1_02_07.jpg)
12. 我们现在已经准备好启动虚拟机。右键点击 Kali 虚拟机并选择**启动**。然后,再次右击并选择**连接**。您的虚拟机应该启动,您可以输入`startx`,这将启动环境。在这一点上,这取决于您对这个虚拟机的探索程度。我们将继续这一章,这样我们就可以通过虚拟化的不同选择,继续进行更大、更光明的事情。
正如您在前面的屏幕截图中所看到的,我们可以从许多选项开始。正如我们前面使用的 ISO 映像一样,我们将继续这一趋势,并添加另一项创建虚拟机的任务。为简单起见,我们将使用之前使用的相同 ISO Samurai WTF 映像,但欢迎您下载您选择的 ISO 映像并从此映像创建机器。一旦您选择了要使用的 ISO 映像,我们就可以开始安装了。要开始使用此虚拟机,我们将执行以下步骤:
2. In the next window, select the radio button **Installer disc image file (iso)** and browse to the location of the ISO file. Then, click on **Next**, as shown in the following screenshot:
5. Once you have made your decisions, click on **Next**. This should be the last screen; take a moment and review the information. Then, click on **Finish** and create your virtual machine. You should see the machine you created and the information for the machine configuration, as shown in the following screenshot:
1. 点击**打开虚拟机**。导航到提取文件的文件夹,并找到已损坏的 Web 应用项目 VM 的配置文件。
2. Once you have located the file, select it and click on **Open** to open the file. This will open the VM and you should be in the configuration screen, as shown in the following screenshot:
![VMware Workstation](graphics/477-1_02_14.jpg)
![VMware Workstation](img/477-1_02_14.jpg)
正如您在前面的屏幕截图中所看到的,VM 被配置为在 NAT 接口上启动,我们将在启动 VM 后使用它。在本节的最后,我们将了解这个 NAT 接口在 VM 环境中的意义。
3. 我们现在想要启动机器;点击**打开此虚拟机**电源,您的机器将启动。
4. Once the machine has booted, you will see the login information for the machine to access it across the Internet. We could log in to the machine locally, but there really is no reason to do this. You are welcome to do this if you want to check the machine out or look around, but for our purposes, we will access it from the network. This is the preferred way to access it because it provides us with a GUI to all of the different tools within the VM. The VM screen that shows the status after the boot is shown in the following screenshot:
![VMware Workstation](graphics/477-1_02_15.jpg)
![VMware Workstation](img/477-1_02_15.jpg)
这里我们需要的信息是分配给虚拟机的 IP 地址,这样我们就可以访问并查看它!打开您选择的浏览器,输入显示的 IP 地址,并打开断开的 web 应用项目 VM 的 web 界面。呈现给您的网页示例如以下屏幕截图所示:
![VMware Workstation](graphics/477-1_02_16.jpg)
![VMware Workstation](img/477-1_02_16.jpg)
如屏幕截图所示,在这个 VM 发行版中有许多工具,任何测试人员都可以从中受益。此处包含的教程和应用允许用户练习他们的技能和挑战,这些技能和挑战设置在不同的技能级别。我们鼓励你花很多时间在这里,并经常回来。当情况需要时,我们将在整本书中使用它。同样,自 Mandiant 赞助以来,VM 增加了许多额外的挑战。阅读本书的一些人可能熟悉 OWASP 的优秀教程 Web Goat。这个项目只是本教程的一个扩展,它还添加了 Irongeek 工具 Mutillidae。你可以在[上阅读更多关于水母科的信息 http://www.irongeek.com/i.php?page=mutillidae/mutillidae-故意-vulnerable-php-owasp-top-10](http://www.irongeek.com/i.php?page=mutillidae/mutillidae-deliberately-vulnerable-php-owasp-top-10)甚至在[www.irongeek.com](http://www.irongeek.com)上观看一些信息视频。
您可以从[下载软件 http://www.starwindsoftware.com/converter](http://www.starwindsoftware.com/converter) 。请注意,您需要注册并且应用在 Windows 中运行。下载软件后,安装软件,然后运行程序。这是一个易于使用的工具;您可以通过导航到文件图像来选择要转换的文件图像。随后,该工具将显示格式输出的选项。以下屏幕截图显示了一个示例:
在查看屏幕截图时,我们希望更仔细地查看该漏洞的一些特征。我们发现目前没有可用的缓解措施。这意味着在披露时无法对其进行辩护。这使得它非常适合添加到我们的工具箱中。您会注意到它影响了 Windows XP 机器,这很好地说明了为什么 Microsoft 继续试图从行业中消除这一点。操作系统已经过时,确实需要更换;问题是它作为一个受信任的操作系统已经存在很长时间了,以至于人们,包括我自己,都喜欢使用它。然而,微软已经宣布不再支持它。因此,从我们的测试角度来看,如果漏洞被释放,这意味着它永远不会有补丁,因此漏洞将始终存在。
...
...
@@ -171,19 +171,19 @@
下一个站点我们将关注的是由**TippingPoint**赞助的零日计划站点,该站点现在是 HP 的一部分。在浏览器中,打开链接[http://www.zerodayinitiative.com](http://www.zerodayinitiative.com) 。以下屏幕截图显示了站点主页的示例:
我们选择清单的这一部分是因为一个特定的原因。在写这本书的时候,我们正在为一个高端客户机进行一次安全测试,在简报会的初始结果中,客户问我们这样一个问题:“您在 Windows 以外的其他操作系统上发现了什么吗?”。经常会遇到这个问题,因为人们错误地认为 Linux 或 Unix 自动比 Windows 更安全。我们不打算在这本书的书页中讨论这个问题;此外,它忽略了安全性的要点,即最重要的是流程而不是操作系统。也就是说,如果您没有一个补丁管理过程,那么无论使用什么操作系统,都会发现漏洞。这里就是这样;他们的 Linux 和 Unix 平台存在漏洞,因为他们没有有效的漏洞管理系统。
@@ -269,13 +269,13 @@ Microsoft 有一个漏洞公告编号,我们可以在尝试关联来自不同
我们从漏洞利用数据库站点获取的 MS13-009 漏洞利用示例是为 Microsoft Internet Explorer 软件编写的。这是我们在执行测试任务时极有可能遇到的问题,而且它有一个一贯的习惯,即几乎在每一个*补丁*上为我们提供漏洞。我们现在将进一步探讨此漏洞。当我们在漏洞数据库站点时,我们点击**漏洞**打开漏洞代码。以下屏幕截图显示了利用漏洞代码的标题示例:
进攻性安全团队负责许多项目,我们将作为专业安全测试人员进行探索。的例子包括 Kali 发行版、metasploit 发布的指南、谷歌黑客数据库和漏洞数据库。如果您访问攻击性安全网站[http://www.offensive-security.com/](http://www.offensive-security.com/) ,您将无法找到实际方法的参考,但由于 Kali 发行版是该集团维护的项目,我们可以在其中寻找方法。以下屏幕截图显示了 Kali 中的方法示例:
![Offensive Security](graphics/477-1_05_14.jpg)
![Offensive Security](img/477-1_05_14.jpg)
如前一个屏幕截图所示,包含在 Kali 发行版中的方法遵循了我们在其他示例中介绍的类似步骤。如上所述,进攻性安全小组还保留了**metasploit 释放**的优秀参考资料。我们可以在这些步骤中练习一种方法,如以下屏幕截图所示:
![Deploying a network-based IDS](graphics/477-1_08-12.jpg)
![Deploying a network-based IDS](img/477-1_08-12.jpg)
我们现在有了一个 IDS 范围,可以用来观察不同工具和技术的反应。在执行此操作之前,我们将清除机器中的所有警报,要执行此操作,您需要转到**查询结果**屏幕的底部,并导航到**操作**|**删除警报**。完成此操作后,单击**整个查询**按钮删除警报,然后单击**主页**上的返回主屏幕。我们将使用 Nikto web 扫描工具查看使用扫描仪时 Snort 传感器的反应。我们将扫描 Snort 传感器网络上的网络安全工具包 web 服务器。要在 Kali Linux 机器上进行扫描,打开终端窗口,输入`nikto –ssl –h <IP address of the Sensor>`,如下图所示:
![Deploying a network-based IDS](graphics/477-1_08-13.jpg)
![Deploying a network-based IDS](img/477-1_08-13.jpg)
`ssl`选项用于强制检查**安全套接字层**(**SSL**),因为在默认配置中,网络安全工具包在端口 80 没有 web 服务器;只能访问 HTTPS 端口 443。扫描完成后,您会注意到有几个发现。要查看这些发现,您需要滚动浏览并查找它们。与大多数工具一样,有一种更好的方法,我们现在将对此进行探讨。
在终端窗口中,我们将使用工具的输出功能将其写入文件。输入`nikto –ssl –h <IP address of the Sensor> -o file.html`,如下图所示:
![Deploying a network-based IDS](graphics/477-1_08-14.jpg)
![Deploying a network-based IDS](img/477-1_08-14.jpg)
这已经获取了工具结果的输出,并将其写入 HTML 文件。导航至**应用****互联网****Iceweasel 网络浏览器**打开**Iceweasel**。浏览器打开时,打开已创建的文件并查看结果。您将看到输出更易于阅读,如以下屏幕截图所示:
![Deploying a network-based IDS](graphics/477-1_08-15.jpg)
![Deploying a network-based IDS](img/477-1_08-15.jpg)
![Working with virtual switches](graphics/477-1_08-24.jpg)
![Working with virtual switches](img/477-1_08-24.jpg)
如果你正在用物理开关构建你的射程,那么这是你必须考虑的事情。但是,如果您使用的是虚拟交换机,那么我们就没有这个难题。我们已经看过一次了,但我们想从入侵检测的角度来看。为此,我们将运行扫描,但这次不直接在传感器上运行。您将需要 Kali Linux 机器、OWASP 和网络安全工具包。在继续之前,启动所有三个虚拟机。
机器联机后,我们将使用运行 Snort 传感器的网络安全工具包,从 Kali Linux 机器对 OWASP 机器和 VMnet2 交换机进行扫描。设置如下图所示:
![Working with virtual switches](graphics/477-1_08-25.jpg)
![Working with virtual switches](img/477-1_08-25.jpg)
您将下一步需要在网络安全工具包机器上启动 Snort 传感器。我们在本章前面介绍了这方面的步骤。
...
...
@@ -183,17 +183,17 @@ snort –A –c snort.conf
以下屏幕截图显示了一个示例:
![Working with virtual switches](graphics/477-1_08-26.jpg)
![Working with virtual switches](img/477-1_08-26.jpg)
显示基本显示的屏幕(剪切的文本不重要)
正如前面的截图所示,流量已经生成了一些警报。接下来我们要做的是查看传感器生成的警报。点击**100%**,这将显示传感器报告的警报列表。当我们使用 Nikto 工具时,我们正在寻找与 web 流量相关的警报。以下屏幕截图显示了一个示例:
![Working with virtual switches](graphics/477-1_08-27.jpg)
![Working with virtual switches](img/477-1_08-27.jpg)
我们将要看到的第一个蜜罐是由**Marcus Ranum**在多年前创建的,当时 Back 孔工具感染了互联网上的机器。该工具不再可用,但您可以在 Internet 上搜索,您应该能够发现它。工具被称为**后备军官友好型**,而且虽然占地面积小,但在蜜罐的角色上非常有效。该工具允许您选择它将侦听连接的多个端口。以下屏幕截图显示了这些选项的示例:
![Integrating decoys and honeypots](graphics/477-1_13_5.jpg)
![Integrating decoys and honeypots](img/477-1_13_5.jpg)
接下来我们要看的蜜罐是商用产品**KFSensor**。您可以在[了解更多信息 http://www.keyfocus.net/kfsensor/](http://www.keyfocus.net/kfsensor/) 。该网站将要求您注册才能下载该工具。下载后,需要将其安装到 Windows 系统上。以下屏幕截图显示了该工具的界面示例:
![Integrating decoys and honeypots](graphics/477-1_13_15.jpg)
![Integrating decoys and honeypots](img/477-1_13_15.jpg)
一旦你建立并攻击了靶场,强烈建议你记录这些攻击,以便你可以使用它们进行练习,更重要的是,用于训练目的。每次执行攻击时,都会创建非常有价值的数据,这些数据应该被捕获并再次使用。捕获数据的最简单方法之一是使用 Wireshark。捕获数据后,保存它,然后可以使用工具重播捕获的流量。有很多方法可以实现这一点。最简单的方法之一是使用**tcpreplay**工具;它是 Kali Linux 发行版的一部分。此外,如果您不想创建自己的攻击,还可以下载许多包跟踪,这些跟踪涵盖了许多不同的攻击。下面的屏幕截图显示了用于重播早期 DEFCON 会议中的文件的命令示例:
![Recording the attack data for further training and analysis](graphics/477-1_13_19.jpg)
![Recording the attack data for further training and analysis](img/477-1_13_19.jpg)
从另一个流程调用外部流程称为**子流程**。在这种情况下,进程之间的通信是在 OS 管道的帮助下进行的。换句话说,如果流程 B 将流程 a 作为子流程调用,那么流程 B 可以向其传递输入,还可以通过操作系统管道从中读取输出。当涉及到自动化渗透测试以及使用 Python 调用其他工具和实用程序时,此模块至关重要。Python 提供了一个非常强大的模块`subprocess`来处理子流程。请看下面的代码片段`Subprocessing.py`,它显示了如何使用子流程调用名为`ls`的系统命令:
前面的脚本生成的信息很难让 Python 代码过滤和存储。如果我们想将所有打开的端口和服务存储在一个字典中,那么使用前面的方法很难做到这一点。让我们考虑一下脚本可以解析和处理生成的信息的另一种方式。我们知道,`oX`标志用于生成 XML 格式的输出。我们将使用`oX`标志将 XML 字符串转换为 Python 字典,如下部分所示。
...
...
@@ -65,11 +65,11 @@
在下面的示例中,我们重用了前面研究过的相同概念。我们将 XML 格式的 Nmap 输出重定向到屏幕。然后,我们收集作为字符串生成的输出,并使用`import xml.Etree.elementTree`Python 模块作为`ET`,以便将 XML 输出转换为 Python 字典。使用以下代码,我们可以使用我们的程序控制 Nmap 并过滤掉所有有用的信息:
前面的代码片段很简单。该方法从调用方接收所有参数。我们将扫描的开始时间保存在一个名为 start 的变量中。突出显示的代码段**(1)**调用同一类的另一个`main`方法,并将所有接收到的参数传递给它。这是启动所有主机的端口扫描的方法。一旦调用的`self.main`方法完成其执行,如代码片段(2)所示,我们需要检查是否所有主机都已成功扫描。这可以从反手表中推断出来,反手表为所有正在扫描的主机维护一个`status_code`,由当前项目 ID 引用。如果主机扫描成功,状态将为“完成”,否则将为“正在处理”或“未完成”。如果当前项目未处于暂停状态,并且仍有一些主机的状态为“未完成”或“正在处理”,则我们需要再次处理这些主机,代码段(3)突出显示了这一点。如果所有主机的处理状态都已完成,我们将最终项目状态更新为完成,如`self.IPtable.clearLogs`方法所指定。最后,我们以秒为单位显示执行时间。在下一个代码片段中,我们将看一看`NmapScan`类的主要方法,它使事情运行:
`startThreads()`方法很简单。我们通过调用`obj.simplescanner`方法并将当前 IP 列表传递给它,迭代列表主机并为每个主机分配一个线程。对于我们当前的示例,`simplescanner `方法将被调用两次。首先,它将被线程 1 调用,该线程的 IP 地址为`192.168.250.143`,然后它将被线程 2 调用,该线程的 IP 地址为`192.168.250.144`。这在片段**(1)**中突出显示。
在上一个屏幕截图中,我们可以看到一个 ID 为`9`的新任务已经创建,它正在扫描本地托管的易受攻击的 Web 应用。截图时,任务能够识别四个高问题、十个中问题和三个低问题。在下一节中,我们可以看到如何让扫描仪不断告诉我们扫描的状态。为了做到这一点,我们需要设置一个回调 URL。换句话说,我们需要一个监听端口,扫描仪将不断地发送结果。我们可以在控制台上按如下方式打印:
有关嵌入式 Linux 文件系统的更多信息,请访问以下链接:[http://elinux.org/images/b/b1/Filesystems-for-embedded-linux.pdf](http://elinux.org/images/b/b1/Filesystems-for-embedded-linux.pdf) 。
有关嵌入式 Linux 文件系统的更多信息,请访问以下链接:[http://elinux.oimg/b/b1/Filesystems-for-embedded-linux.pdf](http://elinux.oimg/b/b1/Filesystems-for-embedded-linux.pdf) 。