渗透测试基础(全)(4)https://developer.aliyun.com/article/1525435
点击劫持攻击
网页作为界面呈现给用户的内容已经变得非常复杂。实现这一点的一种方法是允许通过页面呈现多个层。然而,这种功能为所谓的点击劫持攻击打开了大门,在这种攻击中,攻击者创建一个模糊层,让用户在他们看不到的层上做一些事情。虽然看起来好像用户在点击一个东西,但是这个点击实际上被传递到了被遮蔽的较低层。用户可能会点击一个链接,他们认为这个链接会让他们参加免费抽奖,但实际上他们所做的是在脸书页面上点击一个产品的 Like 按钮。这让该产品获得了很多人为的喜欢。攻击者可能会在呈现给用户的人工按钮或链接下放置许多其他动作。这种攻击,因为它劫持了用户的点击,在某种程度上,实际上是对用户的攻击,这取决于用户在流氓层下真正点击的行为。
跨站点请求伪造
跨站点请求伪造(CSRF)攻击是针对用户的攻击。这种攻击使用包含隐藏请求的恶意网页。这有时被称为 POST 攻击的 GET。在大多数情况下,当您向 Web 服务器发送信息或请求它执行某个动作时,您发送的是一个POST
请求,该请求通常通过单击一个按钮来触发。该按钮可能与一个 Web 表单相关联,这将触发在一个POST
请求中向服务器发送所有表单数据。如果您有一个接受带有 URL 参数的GET
请求的 Web 应用程序,您可以隐藏该请求,如下面的 HTML 所示。
<img src="http://www.mybank.com/transfer.php?from=48893&to=49902340&amount=5000" style="width:1px;height:1px">
img 标签将向服务器发出一个GET
请求,由于它实际上并不检索图像,所以没有在页面上放置内容的风险。为了限制任何东西出现的风险,您可以将大小限制为 1 像素乘 1 像素,如示例所示。任何人都不会注意到一个像素。与此同时,你可以让页面看起来完全像任何吸引用户的东西。交易请求是在幕后处理的,尤其是如果用户最近登录了银行,所以有一个活动的身份验证 cookie,用户根本不知道它已经发生了。
防止这种攻击的一种方法是不允许通过GET
请求进行编程访问。然而,POST
请求不能使用 img 标签之类的东西来完成。相反,您需要一个可以由页面生成的操作。还可以使用其他保护措施,包括检查 referrer,这是一个指示请求来自哪个页面的标题。如果推荐人与您自己的域不匹配,最好不要允许请求继续。这些保护措施并非万无一失,但它们会使这类请求更加难以继续。
规避攻击
这种类型的攻击通常会与另一种攻击结合使用。这是一种格式化信息的方式,这样它可以通过一些程序性的输入检查。例如,如果有人在寻找</code>,而您提供了<code>%3Cscript%3E</code>,解析器将找不到它。这里没有使用字符<code><</code>和<code>></code>,而是展示了一种叫做 URL 编码的技术。许多字符不能在 URL 中使用,因为浏览器或 Web 服务器可能会错误地解释它们,并以您不希望的方式改变请求。而是使用替换字符。对于 URL 编码,您可以使用一个<code>%</code>来表示您有一个对应于 ASCII 值的十六进制值。为了解码,你在 ASCII 表中查找十六进制值,你将找到实际的字符。</div><div>在某些情况下,寻找输入错误的解析器可能相当严格。他们可能会寻找类似于<code><script></code>或<code><SCRIPT></code>甚至<code>%3Cscript%3E</code>的东西,但他们可能很难识别出<code>%3CScRiPt></code>,因为它混合了各种情况,也混合了 URL 编码和非 URL 编码。</div><div>沿着 URL 编码的路线,您可以使用十六进制编码。通过使用<code>#x</code>和一个 ASCII 字符值,您提供了字符而没有提供实际的字符,因为<code>#x</code>是一个明确的指示符,表示有一个字符要出现。如果翻译发生在过滤器之后,您就已经完成了攻击。</div><div>因为您试图绕过程序员编写的过滤器和转换器,所以您需要找到一种传递信息的方式,这种方式与他们所寻找的方式有点不同。通过使用 URL 编码、十六进制编码、大小写混合以及其他操作和处理请求的方式,找到以不同方式组合数据的方法可能会超过他们正在寻找的列表。每种可能性都必须至少有一行代码。这非常耗时,所以你创建请求的方式越多,通过过滤器的机会就越大。</div><h3 id="v09Ig"><a name="t56"></a><a></a>测试策略</h3><div>有许多方法可以执行 Web 应用程序测试。一种简单的方法是使用 Web 浏览器并执行手动测试。然而,这限制了您从呈现给您的界面中可以访问的内容。最有趣的攻击通常发生在请求离开浏览器之后,到达服务器之前。拦截请求以进行修改的一个非常简单的方法是使用 Firefox 浏览器和 TamperData 插件。您可以在图 6-4 中看到使用中的 TamperData。TamperData 将向您呈现一个请求,该请求在从浏览器发送之后,但在通过网络发送之前发送到服务器。它将允许您对标题以及任何参数进行更改。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_c2d345264d8e49ab8a0c2bd90c996662.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A544%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A544%7D"></span></div><div>图 6-4。</div><div>TamperData in Firefox</div><div>虽然这是一项非常有价值的技术,但是使用起来也非常繁琐,尤其是对于来回传输大量请求的更复杂的 Web 应用程序。不断地将许多请求传递到不同的站点,包括分析页面,只是为了得到您确实想要操作的一个请求,这可能需要做大量的工作。使用自动化工具可能会比手动完成所有这些工作容易得多。有许多商业工具可以用来进行 Web 应用程序测试,但是也有免费的、开源的、低成本的替代工具,稍后会详细介绍。除了这些可以用来执行大量测试的自动化工具之外,还有一些程序可以在您浏览站点时,简单地位于您和执行测试的服务器之间。在某些情况下,这可能与您已经用来执行大量自动化扫描和测试的工具相同。然而,情况并非总是如此。</div><div>最后,您可能会对您的目标服务器进行模糊攻击。模糊攻击是一种向服务器发送意外或格式错误的请求,以查看应用程序如何处理它们的方式。您可以破坏应用程序,或者只是收集一些关于服务器或应用程序的附加信息,这些信息可用于其他攻击。</div><h4 id="K0ZhI"><a name="t57"></a><a></a>自动化工具</h4><div>手动测试可能非常乏味,尤其是当您正在测试的 Web 应用程序具有任何规模时。在测试过程中,你需要得到一个网站上所有页面的完整列表。这个过程通常被称为爬行。你当然可以自己点击一个网站上的所有页面并记下来,但是让别人帮你做要容易得多。自动化工具将使这一过程变得更加容易。有许多程序或套件可以用来为您执行一些初始工作。这些工具包括商业工具和开源工具。虽然这些程序做的事情本质上是相同的,但是它们以不同的方式执行。你可以把它想成有不同的工作流程,你可能会发现一个比另一个更适合你的工作方式。</div><div>开放 Web 应用安全项目(OWASP)有一个 Web 应用测试工具,叫做 Zed 攻击代理(ZAP)。ZAP 充当代理,这意味着它拦截来自 Web 浏览器的请求,这些浏览器已经配置为使用 ZAP 作为 Web 代理,以便可以操纵这些请求。图 6-5 显示 Firefox 被配置为使用 ZAP 作为代理。一旦您在浏览器中配置了代理设置,来自浏览器的所有 Web 请求都将被发送到代理,以便转发到请求要到达的服务器。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_27ac40edb9554f40a9610f57b24522a9.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A671%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A671%7D"></span></div><div>图 6-5。</div><div>Proxy settings in Firefox</div><div>ZAP 不仅仅处理来自网络浏览器的请求。它也可以用来自己发起请求。ZAP 可以用来测试已知的漏洞,包括前面提到的那些。它通过向 Web 服务器发起请求,然后分析响应来做到这一点。除了在站点上运行主动扫描或蜘蛛,正如您在图 6-6 的上下文菜单中看到的,您还可以进行强制浏览。这意味着 ZAP 将试图定位网站中任何页面都不涉及的目录和文件。不提供页面链接可能是一种对搜索它的人隐藏它的方式。强制浏览将试图定位这些隐藏的测试资源。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_a3989662e4a2447d9e2a7fba673e0861.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A390%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A390%7D"></span></div><div>图 6-6。</div><div>Using OWASP ZAP to attack</div><div>在图 6-6 中,您可以在窗口的下部看到一些扫描结果。发现有问题的请求会被标记出来。为了识别漏洞,ZAP 依赖于来自 Web 服务器的响应,包括错误代码和搜索响应中的特定单词。显示的一些请求被标记为中等风险问题,而其他请求被标记为低风险问题。与 Nessus 和 Nexpose 等自动漏洞扫描器一样,您需要手动验证 ZAP 识别的是有效的漏洞。</div><div>虽然有许多高价位的商业扫描仪,但有一种低价扫描仪有免费版本,而且功能很多,那就是 Burp Suite。Burp Suite 提供了一些非常好的功能,这是其他扫描仪无法以完全相同的方式提供的。其中之一是入侵者功能,它为您提供了一种以独特的方式与 Web 服务器进行交互的方式。您可以让 Burp Suite 将一个值列表传递到 Web 应用程序中,以便(例如)尝试暴力登录。在同一个功能中,Burp Suite 提供了许多不同的方法来操作传递给应用程序的值。使用入侵者,选择您希望 Burp Suite 操作的参数,如图 6-7 所示。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_eaeecf820f6c4922b3ccb1f16dca08cb.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A375%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A375%7D"></span></div><div>图 6-7。</div><div>Selecting parameters in Burp Suite</div><div>Burp 允许您获取它有记录的任何请求,并将该请求发送给入侵者函数。原始请求被发送到“入侵者”选项卡,在这里您可以对请求进行更改,然后选择参数。当您添加一个参数时,Burp 会用一个突出显示的参数名称替换请求中的原始值,并创建一个可以填充变量数据的位置。您将需要“有效负载”标签中的参数值。Burp 提供了许多不同的攻击类型,具体取决于您要替换多少个值,以及您是否希望使用不同的有效负载分别检查它们。以下是 Burp Suite 提供的攻击类型:</div><ul><li>狙击手——这是一种使用单一有效载荷的攻击。如果有多个位置正在测试,所有位置都将在选定有效负载的情况下一次测试一个。</li><li>攻城锤——这种攻击也是单一有效载荷攻击。如果有多个位置,每个有效负载选项将同时放入所有位置,并发出请求。</li><li>pitchfork–pitchfork 攻击使用多个有效载荷,其中每个位置都用指定有效载荷集中的新有效载荷值同时测试。</li><li>集束炸弹——集束炸弹攻击也使用多种有效载荷,但不是同时测试每个位置,这是一种组合攻击。如果您有三个位置要测试,那么您将遍历有效载荷集中这三个位置的所有可能组合。使用这种方法并不是检查特定的应用程序如何响应无效的输入,而是检查应用程序如何响应输入集合。这种攻击是您尝试暴力登录时会选择的攻击,因为您希望对照每个密码检查每个用户名。</li></ul><div>选择有效载荷<code>—</code>后,有许多预定义的有效载荷集,或者您可以创建自己的<code>—</code>您也可以选择任何操作,或有效载荷处理规则,您希望 Burp 对有效载荷进行处理。您可以使用这些操作进行更改,比如改变大小写、执行编码或解码,或者对发送到服务器的请求进行其他更改。在图 6-8 中,你可以看到可以添加到入侵者攻击中的有效载荷处理选项列表。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_4344014b8bdc4b069d3a4a52452792b5.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A273%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A273%7D"></span></div><div>图 6-8。</div><div>Payload processing options in Burp Suite</div><div>当然,Burp 和 ZAP 都有很多这里没有提到的其他功能。当您使用这些工具或任何其他商业和开源测试工具继续深入 Web 应用程序测试时,您会发现您看到的是更高级的功能,例如更复杂的入侵者功能或 ZAP 的模糊功能。顺便说一下,这里提到的两个工具的一个优点是它们都可以在多个平台上运行,因为它们都是用 Java 编写的。如果你的系统支持 Java,它将运行这些程序。</div><div>不要因为扫描仪报告有问题就认为实际上有问题。在某些情况下,扫描器可能会出于完全良性的原因查看响应中存在的一段文本。在你报告发现之前,一定要核实你所发现的。您可以通过查看扫描仪的操作并尝试重复它来手动完成此操作,或者也可以像重新运行攻击一样简单。像 Burp 和 ZAP 这样的工具可以让你重放一个特定的请求,这样你就可以实时看到它做了什么。这些工具为您提供请求和响应。总是可视化地查看响应,这可能需要使用工具或外部浏览器来呈现响应,以便您可以看到行为,而不是试图可视化地解析大量的 HTML 和 Javascript。</div><h4 id="2cbRc"><a name="t58"></a><a></a>被动扫描</h4><div>像 ZAP 和 Burp Suite 这样的扫描仪很棒。他们有一个他们了解的攻击列表,他们将对目标运行这些攻击,看看会发生什么,以便确定是否存在漏洞。但是,当它们运行扫描时,噪音会很大。这意味着他们发送大量的流量到网站非常快。这意味着测试可以被检测到,这可能不是你想要发生的。另一种针对 Web 应用程序的方法是使用被动扫描器,如 rat proxy。Rat proxy 由专门研究被动扫描技术的 Michal Zalewski 编写。Zalewski 认为,无需执行任何攻击或发送任何可能泄露您正在做什么的流量,就可以确定目标的许多信息。他还有另外一个工具,叫做 p0f,可以用来评估网络流量。顾名思义,Rat proxy 就像代理一样工作,就像 ZAP 和 Burp Suite 一样。您将浏览器配置为通过 rat 代理运行,并让 rat 代理根据它看到的内容做出一些决定。您可以在图 6-9 中看到一个示例报告。</div><div><span data-card-type="inline" data-ready-card="image" data-card-value="data:%7B%22src%22%3A%22https%3A%2F%2Fucc.alicdn.com%2Fpic%2Fdeveloper-ecology%2Frh4c6jiq5zes4_ded74d6249604660b3e7b5a6c7c75f10.jpeg%22%2C%22originWidth%22%3A570%2C%22originHeight%22%3A343%2C%22size%22%3A0%2C%22display%22%3A%22inline%22%2C%22align%22%3A%22left%22%2C%22linkTarget%22%3A%22_blank%22%2C%22status%22%3A%22done%22%2C%22style%22%3A%22none%22%2C%22search%22%3A%22%22%2C%22margin%22%3A%7B%22top%22%3Afalse%2C%22bottom%22%3Afalse%7D%2C%22width%22%3A570%2C%22height%22%3A343%7D"></span></div><div>图 6-9。</div><div>Rat Proxy report sample</div><div>Rat proxy 确定与发现相关的潜在风险,然后向您提供一些想法,说明它为什么将特定请求标识为有问题。为了验证 rat 代理发现,您必须查看报告中提供的跟踪。缺点是,如果你可以这么说的话,rat 代理要工作,你需要通过它发送请求。没有自动抓取或扫描来查看页面。它根据通过它发送的页面进行所有评估。简而言之,为了让 rat 代理工作,您需要与您试图测试的服务器进行交互。</div><h3 id="kVStM"><a name="t59"></a><a></a>实践网站</h3><div>在您尝试使用这些工具和技术对付付费客户之前,您可能想在实践环境中尝试一下。幸运的是,有几种方法可以做到这一点。你可以为你的任何操作系统免费获得一个像 Apache 这样的网络服务器,并建立一个你自己的网站。一旦你有了一个网站,你就可以开始填充内容(和漏洞)。或者,您可以对许多开源 Web 应用程序进行测试。任何像 Drupal 或 WordPress 这样的内容管理系统都是一个很好的目标,因为它们有很多潜在的编程元素,你可以与之交互。另外,一般来说,在默认安装中有很多页面,您无需做太多工作就可以使用。</div><div>然而,这种方法的问题在于,你可能会付出很多努力,却得不到很多满足感。如果您使用的是最新版本的网络软件,这一点尤为重要。更好的方法是建立一个内置漏洞的网站。幸运的是,这样的网站随处可见。Web Goat 是一个很好的起点,它是一个 Java Web 应用程序,提供了一个研究攻击技术的地方。这有点像教程,因为你可以得到一些提示来帮助你。Web Goat 是 OWASP 提供的,就像 ZAP 一样。Web Goat 还提供了一些案例视频,展示了攻击在 Web Goat 中是如何进行的。这是一个以高度互动的方式学习如何进行网络攻击的好方法。</div><div>如果你只是想把一些页面安装到一个 Web 服务器上,这样你就可以使用它们了,这里也有一些选项。一个很好的选择是该死的易受攻击的 Web 应用程序(DVWA)。DVWA 提供了您可以处理的不同类别的攻击类型。DVWA 的一个优点是你可以调整它的安全级别。这使得应用程序更难被利用。如果你从一个低设置开始,你应该能够得到一个非常简单的攻击工作。如果你达到中等强度,你可能需要使用一些躲避技巧来使攻击有效。您还可以在 Web 应用程序上看到入侵检测系统的行为,因为 PHP-IDS 是 DVWA 安装的一部分。bWAPP 是与 DVWA 类似的另一个易受攻击的 Web 应用程序。</div><div>谷歌还维护着一个名为 Gruyere 的易受攻击的网络应用。Gruyere 是一种多孔奶酪,只是为了解释名字中的笑话。如果你不想安装和维护你自己的 Web 服务器,Gruyere 可能是一个不错的选择,但是它的组织方式和刚才提到的不一样。没有明确的类别可以让你知道应该尝试哪种攻击类型。相反,如果您在线连接到 Gruyere 应用程序(有一个版本您可以自己安装),您将看到该应用程序的一个实例,并且您必须找到存在的不同漏洞。幸运的是,如果你真的陷入困境,有一些关于这个应用程序的页面会给你一些帮助。</div><h3 id="JLSBF"><a name="t60"></a><a></a>摘要</h3><div>Web 应用程序无处不在,这就是为什么学习如何攻击它们是如此重要的技能的原因之一。与前几章讨论的其他类型的攻击非常相似,让 Web 应用程序以一种有用的方式崩溃需要来自大量经验的技能,以及大量的反复试验。你当然可以将扫描仪对准网络应用程序,你会得到一些结果,但这些结果可能不是很准确。最好以理解 Web 应用程序架构为起点。并非所有的 Web 应用程序都是以相同的方式设计的,但是您通常可以预期有一个 Web 服务器在端口 80 或端口 443 上处理 HTTP 请求。Web 服务器背后是一些应用程序逻辑。这可以使用运行在 Web 服务器上的语言来完成,比如 PHP,也可以在使用 Java 或。网络语言。在应用程序逻辑的背后通常是一个数据库,其中存储了应用程序的所有持久数据。这可能包括客户信息、登录信息,或者只是应用程序从中提取以生成页面的内容集合。数据库是一切的幕后推手,因为一般来说,数据库是最敏感信息所在的地方,所以它应该是最难访问的系统。</div><div>虽然许多攻击归结于不正确地验证用户的输入,但是攻击 Web 应用程序有许多不同的方式,并且不同的攻击可能集中在应用程序体系结构的不同方面。例如,SQL 注入攻击的目标是数据库,而跨站点脚本攻击的目标是客户端或用户。并非所有的攻击类型都是相同的,由于应用程序有如此多的级别,因此很有可能造成混乱并引发问题。</div><div>有许多程序可用于执行 Web 应用程序测试。这些包括你的网络浏览器插件,以及本质上是独立测试套件的商业工具。你可以使用低成本或免费的选项,如 ZAP 或 Burp 套件。你的一些决定将归结于你有多少预算和你需要做的有多彻底。随着您获得更多的工作,如果您发现它们更适合您的工作流程以及您对攻击的看法,您可能会升级到更昂贵的工具。最终,最重要的方面是找到你想要的工作方式,因为当你使用这个工具时,你会有一些安慰。当然,您选择的工具还需要能够生成利用漏洞的攻击,要么允许您自己创建它们,要么让工具为您进行攻击。如果你发现一个评价很高的工具,而你对它不是很熟悉,你可能不会像使用一个你很熟悉的工具那样从中获得很多。</div><div>幸运的是,当您开始时,有很多选择可以获得用于实践和培训的测试环境。您可以使用安装在您自己系统上的真实、实时的 Web 应用程序,或者您可以抓取故意破坏的 Web 应用程序,以便确保您能够侵入它们。OWASP 维护着这些应用程序的列表,您可以在那里找到您喜欢的应用程序。</div><div>最后,在这里需要注意的是,你永远不应该在你没有控制或者没有得到网站运营商的许可去扫描的网站上运行任何主动的测试、扫描或者爬行。未经许可运行这些工具是引起执法机构注意的好方法。永远保持在本地。</div><h3 id="TF5CX"><a name="t61"></a><a></a>练习</h3><ol><li>获取一个该死的易受攻击的 Web 应用程序或 Web Goat 的副本,并尝试利用一些内置的漏洞。</li><li>下载 OWASP Zed 攻击代理的副本。使用 ZAP 浏览一些网站,看看它的表现如何。不要运行任何攻击。</li><li>下载一份打嗝套装。浏览一些使用 Burp Suite 的网站,看看它的表现如何。不要运行任何攻击。</li><li>在您控制的系统上安装 Web 应用程序。用 ZAP 用主动扫描攻击它。</li><li>在您控制的系统上安装 Web 应用程序。使用 Burp 套件通过主动扫描来攻击它。</li></ol><h2 id="5kadg"><a name="t62"></a><a></a>七、报告</h2><div>在这里挑选一个有意义的陈词滥调。例如,橡胶与路面的交界处。报道是一切真正发生的地方。你可以花几天或几周的时间做实际的测试,但是如果你不报告,那还有什么意义呢?当你试图引起某人的注意,而这个人可能真的能够解决你发现的问题时,你需要做一个专业的陈述,并且能够以非常清晰的方式解释这些问题。以客观的方式传达您的发现非常重要,这样不了解信息安全的人也能理解您所说的内容。他们还需要明确你认为根据你的发现应该做什么。指出如何解决问题是你真正能增加价值的地方。如果你只是把一份报告扔在某人的桌子上,解释他们有很多问题,然后离开,你对他们没有多大帮助,尽管他们会有一份报告,可以用来反对审计。不过,最终,仅仅说他们做了渗透测试以获得审计勾号是没有帮助的。在六个月或一年后,当他们为他们的审计需求再次运行测试时,结果仍然会在那里,一个体面的审计员会注意到这一点。</div><div>当然,如果你已经在这个行业工作了一段时间,你会看到一些报告,这些报告提供了很多关于测试人员如何能够访问网络中各种资源的细节。最后,这基本上是徒劳的,因为一旦你进入系统,系统之间可能存在信任问题,这可能会给攻击者带来额外的访问权限。从一个系统跳到另一个系统并不一定意味着存在任何额外的漏洞。这可能只是一个窃取凭证的案例。凭证盗窃是漏洞所在,而不一定是那些相同的凭证可被用来获得对网络核心内的各种服务器的访问的事实。通常,这是按照设计的,因为许多企业组织在其整个基础架构中使用单一用户帐户。在使用 Microsoft Windows 及其活动目录的企业中尤其如此。Active Directory 存储用户凭据,所有需要身份验证的系统和资源通常会对照 Active Directory 进行身份验证。如果您在这样的环境中窃取了用户名和密码,您就可以访问该用户有权访问的任何系统。</div><div>最后,重要的是非常清楚具体的漏洞以及如何纠正它们。提供一份华而不实的报告,显示你能够访问几十个系统,这看起来很酷,但是它掩盖了测试过程中真正发生的事情,即使看起来测试人员真的知道他们在做什么。不一定是这样。所以,帮你自己一个忙,确保尽可能包含补救建议。这是能给你的雇主或客户提供最大价值的东西,也是能让他们要求你回报的东西。</div><div>多年来,我已经确定了一种单一的报告格式,这种格式非常适用于网络测试、远程测试、基于主机的测试和 Web 应用程序测试。您将要进行的每一种渗透测试或安全评估都归结为一组需要描述的漏洞。每个描述都需要包括您发现漏洞的证据,以及按危险程度对漏洞进行分类的方法。最后,你需要提供补救建议。报告中的其他内容只是设置了肉,这是调查结果。然而,环绕也同样重要。首先,你需要一份执行摘要,因为写检查的人通常不会阅读调查结果,其中包括许多他们没有时间深入研究的技术细节。除此之外,描述你的方法表明你已经考虑过如何工作。它展示了一种科学的方法,意味着你是有条不紊的,并且以一种可以被理解的方式进行测试,并且在需要的时候重复。这意味着,在理想情况下,你不只是向目标扔很多东西,而不知道你在做什么。在某种程度上,这个方法会提供你的凭证。</div><div>报告的主要内容通常是调查结果,您需要将调查结果详细化,以便技术人员能够了解已发现的漏洞以及攻击者利用这些漏洞所带来的业务后果。大多数情况下,他们需要知道他们需要做什么来解决问题。最后,你应该在报告的结尾重申测试的重要发现。你也可以包括一些附录作为辅助材料,这些材料太长了,如果不把它们放入报告中,每个人都会被几页输出或其他数据弄糊涂。</div><div>接下来的部分将详细说明您应该在这些报告部分中输入什么,以便您最终得到一份易于理解的实质性报告,并提供一份路线图,说明您已经完成了什么以及他们应该为此做些什么。</div><h3 id="QvOqu"><a name="t63"></a><a></a>行动纲要</h3><div>从某种意义上说,这可能是你报告中最重要的部分,因为这部分向管理层展示了你提供了服务,而且你确实有了一些发现。他们不会自己去读这些发现。因此,您需要在这里提供一个非常简短的总结。报告最好以一两句话开始,解释你做了什么,为什么这么做。优达因推进系统公司于 2016 年 3 月 21 日与 Wubble 咨询公司签约,对内部基础设施系统进行安全评估。这是一个非常简洁的开始方式。你可以用另一句话来跟进,提供有关合约范围的更多细节。你可以再次非常简洁地表明<code>—``—</code>你在那里对所有系统进行安全测试,除了被认为超出范围的任何东西。这是你回到合同的地方。您所签订的合同或协议需要非常具体地说明合约的范围,因此您需要明确是否有您没有通过协议测试的元素。执行管理层可能会有这样的印象,即一切都经过了测试,尽管直线管理层可能已经向您表明,您不应该测试脆弱的基础设施。如果测试是零零碎碎地进行的,也就是说你选择了一个有代表性的样本,指出这一点,并在附录中包括系统。参考这里的附录。</div><div>这里有一点很重要。确保突出您发现良好网络安全实践范例的领域。例如,这可能是保持最新的最强加密。如果你发现某件事做得很好,指出来。这可能会产生政治分歧,因为这让你可能合作过的技术团队在他们的管理层看来很好。这也证明了你不仅仅是为了摧毁他们。</div><div>通常,在执行摘要中,我会特别指出,我们受到项目条款的时间限制,报告中的调查结果是在该时间段内发现的。它不应该被解释为一个详尽的列表。拥有额外时间和资源的人可能会发现更多漏洞。这让他们明白,如果他们同意报告中的发现,并不意味着他们完全安全。如果它们后来被破坏了,它也在一定程度上保护了你。你已经表明你已经做了你能做的事情,但是这份报告并不能保证这就是他们易受攻击的地方。</div><div>一旦您指出了您执行的测试,您就可以指出您遵循的一般方法。例如,您可以表明您遵循了开放源代码安全测试方法(OSSTM ),或者遵循了您自己的测试方法,该方法关注由开放 Web 应用程序安全项目(OWASP)确定的前 20 个常见漏洞。</div><div>根据您执行的测试,在此提供特定高风险漏洞的列表或漏洞类别的列表。这可能是一个项目列表,你可以提供一两句话,以非常清晰的方式解释每一项。请记住,报告这一部分的读者可能没有太多的技术经验或理解能力。使用简单明了的英语,阐明对公司及其数据或人力资源的潜在影响。这部分是必不可少的。仅仅说有一些输入验证问题是没有多大帮助的。从影响的角度来看,清楚地表明其中一些问题可能会导致数据损坏或泄漏更容易理解。管理层会理解那里的影响,尤其是如果你弄清楚你指的是哪些数据。这是库存数据、用户名数据还是公司拥有的其他存储?</div><div>你也可以选择在这里加入一些表格,对你的发现进行分类。一些高风险调查结果,一些中等风险调查结果,等等。如果你愿意,你也可以进一步分解它。Windows 基础架构中的一些调查结果,台式机中的一些调查结果,设备领域中的一些调查结果,其中可能包括没有面向用户的界面或操作系统的打印机或其他设备。除了表格之外,您还可以包括图表,因为这些图表有助于非常清楚地了解到底发现了什么以及发现的比例。一个红色的大饼条表示高风险项目,通常会引起某人的注意。</div><div>理想情况下,你报告的这一部分应该尽可能接近一页纸。考虑到你的听众和你想给人留下的印象,你可能会倾向于在这里提供大量的信息。战胜这种冲动。请记住,只阅读执行摘要的人非常忙。当你进入多个页面时,你的目光会停留在细节上,你会失去它们。你需要非常中肯。如果你能把它控制在一页之内,你就最有可能确保他们会阅读整个摘要。如果你有图形和图表,你可以进入第二页,但任何超出这一页的内容,你将会失去一些人。简直就是大忙人看报告的天性。开门见山,确保包含一些接近行动号召的内容。他们需要为此做些什么?让他们知道能做什么。</div><div>从文档格式的角度来看,您可以选择将目录放在执行摘要的后面,这样阅读文档的人就不必为了找到重要部分而跳过它。实际上,您可以选择将摘要导出为独立的文档。这可能对需要向客户或供应商提供某些东西的公司有用,因为他们不想提供报告中的所有细节。除了目录之外,您可能还希望提供图表目录,因为您可能会将屏幕截图作为调查结果的一部分,图表目录是一个很好的参考。</div><h3 id="Tc8R1"><a name="t64"></a><a></a>方法学</h3><div>你不需要在这里详细说明。如果你有一个详细的方法,它可能已经作为合同期的一部分提供给你的客户,或者你可以作为附录或额外的文件提供,以便他们知道。如果您有自己的方法,提供一个高层次的概述可能比提供一些对您或您的组织来说独特的东西更好。有时这些东西可以被用作区别特征,尽管在大多数情况下,组织和测试人员之间的一般方法是相同的。不同之处在于每个测试人员拥有的技能,他们在应用方法时的创造力,以及他们感觉哪里有值得深入挖掘的东西的能力。</div><div>你的方法部分应该包括你的一般方法和你所做的一些重点。包括您用作指导的任何测试方法的参考。这可能包括美国国家标准与技术研究所(NIST)的一些文档,以及任何可用的开放测试方法。最后,你可以列出你使用的所有工具。包括版本号,这样您就可以证明您使用的至少是合理的最新版本。如果你使用任何定制工具,你可以在你的方法论中提到它们。这也是一个可以让你脱颖而出的地方。在测试过程中,优秀的测试人员最终会编写一些他们自己的工具,或者为特定的目的开发脚本或程序。毕竟,有些任务确实需要编程方法。举个例子,如果你试图使用一个使用二进制协议的服务器,你将不能在 telnet 或 netcat 会话中输入它。您需要编写一些东西来与能够传输特定二进制编码的服务器进行交互。</div><div>你的方法页面很可能就是你会反复使用的页面。这可以是您的样板模板的一部分,当新版本的软件出现时,或者如果您在一个项目中使用了一些不同的工具,您可以更新该模板。随着实践的发展,你也应该更新你的一般方法。</div><h3 id="Q9Wmw"><a name="t65"></a><a></a>调查的结果</h3><div>调查结果将是你报告的主要部分,因为这是最重要的方面,将为你客户的技术人员提供最大的价值。虽然前两个部分主要是叙述性的,但在这里您可以考虑将其分解,以便更容易进行可视化解析。这样,读者可以直接跳到他们最感兴趣的部分。你可以选择用一种对你有意义的方式来展示你的信息。我提供了下面的演示风格,这种风格已经在我身上运行了好几年了。每个发现都按照这种格式得到自己的块。一旦我有了所有的发现,我就把它们分成高、中、低风险的发现。然后,我有一个信息表,列出了应该提及但不够有趣的项目,以对完整的发现块进行评级。从文档格式化的角度来看,您可以为每一个关键点设置小节标题。这意味着每个部分在目录中都有一个条目,使它们更容易快速找到,尤其是在报告很长的情况下。</div><div>用于关键程度的部分有高、中和低,但这实际上是两个组件的合并,只是为了更容易报告。在确定一个发现的关键程度时,通常会结合使用影响和概率。调查结果的影响是衡量在漏洞被触发或利用时组织可能会发生什么的指标。如果该发现可能导致数据丢失或损坏,则它的影响程度可能会很高。发现服务器名称和版本的信息泄漏可能影响不大。如果有问题的服务器在它运行的版本中有漏洞,那应该是它自己的发现和它自己的影响,这将取决于确切的漏洞是什么。</div><div>在这种情况下,我们使用文字而不是数字来评估风险。这通常被称为定性风险评估,因为没有与这些发现相关的硬性数字。这些发现的确切数字可能很难获得,尤其是如果你是一名承包商。如果你是一名员工,并能提供这些调查结果中的一项将导致公司停工或损失的确切数字,你可以用它来证实你所说的话。不过,作为外部人士,你必须做出最佳评估,有时还要与你在客户处的联系人一起进行评估,他们可能会告诉你,一项调查结果的影响真的很小,因为他们更清楚公司面临的风险。</div><div>影响的另一个因素是概率。这个真的是最难确定的。计算概率很大程度上依赖于经验。不过,有一些简单的方法可以解决这个问题。如前所述,在提供服务器信息的情况下,我们认为这种情况发生的概率非常高。服务器信息很容易获得。如果有一个 Web 服务器被配置为提供版本号,那么获取该信息是很简单的事情<code>—</code>几乎不需要任何技能。如果它出现在网页上的错误消息中,或者有时出现在某些页面的页脚,那么它根本不需要任何技巧。只有阅读的能力。</div><div>比如说,在对世界开放的电子邮件服务器存在已知漏洞的情况下,或者存在概念验证利用,或者更糟的是,存在实时利用,这种可能性再次很高。只需要有人下载漏洞并运行它,你就妥协了。在某些情况下,编译或运行漏洞利用代码可能需要一些技巧,但是由于漏洞利用是免费提供的,并且容易获得,因此这种可能性很高。</div><div>其他发现可能更难确定其可能性。例如,如果一个 Web 服务器面临拒绝服务攻击,这种可能性有多大?有时,确定概率依赖于可能存在的其他补救措施,因此如果有其他考虑因素,您可以降低概率。例如,您可以为漏洞扫描程序提供凭证,这样它就可以在系统上进行本地认证扫描。也许扫描程序发现了一个本地漏洞,这意味着你必须登录系统才能利用它。这可能是一个权限提升漏洞,普通用户可以获得超级用户权限,因此扫描程序将其标记为严重漏洞。您知道,要利用此漏洞,您必须是经过身份验证的用户,而且您可能还知道,您已经实现了双因素身份验证,并且只有极少数系统管理员拥有此系统的帐户。这肯定是一个需要解决的问题,但是双因素身份验证和有限的帐户数量使得它被利用的可能性大大降低。</div><div>一旦我完成了对可能性和影响的评估,我就将它们合并成一个单一的严重等级。做这件事没有单一的方法。当我决定一件事是否分裂时,有不同的影响和概率等级,我倾向于选择影响。如果我有一个影响大、可能性中等的问题,我可能会将其归类为高优先级项目。高/低或低/高的发现通常是中等发现。</div><div>在进入所有细节之前,用一个简短的标题来确定问题是有帮助的。如果您用标题格式化文档,您可以用数字和名称来标识每个查找结果,这样它就可以清楚地显示在目录中。通常,对于编号,我会使用一个字母和一个数字。H1 将是第一个高优先级的调查结果,M2 是第二个中等优先级的调查结果,依此类推。一旦你提供了一个名字并计算出它的优先级,你就可以开始填写所有的细节了。</div><h4 id="rqJom"><a name="t66"></a><a></a>发现</h4><div>发现是你可以准确描述你发现了什么。像往常一样,这里要简洁明了。这不是一个长篇大论的地方。准确解释漏洞是什么以及它为什么重要。这应该包括如果漏洞被触发会发生什么,以及某种解释,说明您为什么对其进行评级。这里不用担心提供证明。只要清楚地解释问题是什么,为什么它是一个问题。</div><h4 id="3udgQ"><a name="t67"></a><a></a>建议</h4><div>这是你提供大量价值的地方。确保提供详细的解释,说明他们需要做些什么来解决问题。在某些情况下,你可能只能提供一般性的建议。如果这是一个 Web 应用程序漏洞,这将是典型的。但是,如果是需要更改配置的问题,请提供需要更改的文件和设置的详细信息。</div><h4 id="JsxkN"><a name="t68"></a><a></a>证据</h4><div>在本节中,提供证明漏洞真实存在的详细信息。您可能有数据包捕获的一部分、一组报头或一些其他证据。这里使用屏幕截图真的很有帮助。视觉证据非常有助于证明你确实看到了你所说的东西。如果你在这里演示了你所做的,这也有助于客户复制它。如果你真的雄心勃勃,你可以录制一些截屏视频来展示你到底做了什么以及结果是什么。你可以将它们保存到 Google Drive 文件夹中,并与你的客户分享这个文件夹,作为一种发送方式。视频不仅仅是截屏,但大多数时候截屏就够了。毕竟,他们不一定需要看到你到底做了什么。他们只是需要一些证据来证明你确实发现了什么。总是提供叙述来解释屏幕截图。不要让屏幕截图为你说话。解释他们在看什么。这里需要叙述有很多原因。证明你知道你做了什么只是其中一个原因。教育你的客户是第二个原因。记住,你增加的价值越多,你就越有可能被收回。</div><h4 id="D93Bc"><a name="t69"></a><a></a>参考</h4><div>在参考资料部分,您可以提供一些解释该发现的附加资源。这可能包括一个通用漏洞和利用(CVE)链接,提供与供应商无关的漏洞信息。您可以包含一些解释一类攻击的链接,例如与输入验证相关的链接。如果您已经提供了关于如何修复漏洞的具体说明,那么在这里提供更多详细信息的链接会很有用。大多数情况下,这只是一个支持你所说的实质性信息的地方。同样,不要让这里成为你让他们去寻找答案的地方。所有相关的信息都应该在你的报告里。这只是为了支持。</div><h4 id="1bbWv"><a name="t70"></a><a></a>报告的</h4><div>您可能有信息项。这些可能是各种各样的发现,甚至没有真正上升到低优先级发现的水平。例如,它可能是您在测试过程中注意到但无法复制的东西。既然你已经找到了一次,这很可能是一个问题。除了信息项之外,您还可以包括一组一般性建议。如果你发现了一些主题,这可能是特别真实的。这里提到健壮的更新策略对整体安全状况的重要性可能是有用的。任何你能想到的与你的测试相关的一般性建议都可以放在这里。</div><h3 id="8P6Jg"><a name="t71"></a><a></a>摘要</h3><div>该报告是您将在项目过程中执行的最后一项任务,但可能是最重要的任务。要记住的一件事是,在你离开公司很久以后,你的报告仍然存在。它应该反映你的专业精神和对细节的关注。这是一份组织中任何人都可以查看的报告,也可能与您客户的合作伙伴和客户共享。你希望你的工作能给你带来好的影响。</div><div>你可以用任何对你有意义的方式提供你的发现。根据多年来与各种有自己偏好的客户打交道的经验,我最终采用的格式分为以下几类:</div><ul><li>行动纲要</li><li>方法学</li><li>调查的结果</li><li>结论</li></ul><div>《执行摘要》应简明扼要,提供有关项目的细节以及调查结果的简要概述。此外,请务必在此指出,您受到了时间的限制,因为所有项目都是无期限的。拥有更多时间、资源和奉献精神的人可能会发现其他漏洞。</div><div>方法部分展示了你在测试中不仅仅是随意的,而是遵循一个计划。你不需要在这里提供一个测试计划,只需要一个关于测试的基本原理以及你使用的工具列表,包括版本。</div><div>调查结果应该是最长的部分,并且应该包括优先顺序,从最高优先级的项目开始,以最低优先级的项目结束。在每项发现中,请确保包括对您发现的内容及其重要性的描述、如何纠正问题的建议,以及您确实发现了该问题的证据。除此之外,你还可以为他们提供更多的参考资料,以防他们想做更多的阅读。</div><div>总结部分是你总结一切的地方。无论是在这里还是在执行摘要中,一定要指出你发现的任何做得好的地方。这对你和客户的关系非常有帮助,尽管这看起来很愚蠢,因为你是被雇来找问题的。对他们做得好的方面给予表扬将有助于改善你们的关系,并表明你不仅仅是要摧毁他们,而是要真正帮助他们改善他们的整体安全状况。突出他们擅长的领域可以帮助他们从这些领域学习,然后专注于他们真正需要帮助的其他领域。</div>