原文:
annas-archive.org/md5/ac8636ca42d7bb48c9364852fd6f1216
译者:飞龙
前言
Burp Suite 是一个基于 Java 的平台,用于测试 web 应用程序的安全性,并被广泛采纳为专业企业测试人员的工具。
开放网络应用安全项目(OWASP)为开发人员和测试人员提供了许多资源,用于保护 web 和 API 应用程序的安全。本书利用了 OWASP 的测试用例,并对其进行了少量修改,以便在 Burp Suite 中进行实践操作。在本书的后期,还包括了更多高级概念,提供了可用于漏洞赏金猎捕、渗透测试和应用程序安全的实用方法。
到了本书结束时,你将能够使用 Burp Suite 来测试你的 web 应用程序和 API 的安全性。
本书适合人群
如果你是一个安全专业人士、web 渗透测试人员或软件开发人员,想要使用 Burp Suite 来测试应用程序和 API 安全性,那么本书适合你。
本书涵盖的内容
第一章,开始使用 Burp Suite,提供了继续学习本书内容所需的设置说明。
第二章,了解 Burp Suite 工具集,通过确定目标范围开始,并概述了 Burp Suite 中最常用的工具。
第三章*,使用 Burp 配置、爬行、审计和报告,帮助测试人员调整 Burp Suite 设置,以减少对目标应用程序的干扰。
第四章,评估身份验证方案,介绍了身份验证的基础知识,包括对其的解释,即验证一个人或物体的声明是否真实的行为。
第五章,评估授权检查,帮助你理解授权的基础知识,包括对其的解释,即应用程序如何利用角色来决定用户的功能。
第六章,评估会话管理机制,深入探讨了会话管理的基础知识,包括对其的解释,即应用程序如何跟踪用户在网站上的活动。
第七章,评估业务逻辑,介绍了业务逻辑测试的基础知识,包括对一些常见测试的解释。
第八章,评估输入验证检查,深入探讨了数据验证测试的基础知识,包括对一些常见测试的解释。
第九章,攻击客户端,帮助你理解客户端测试如何涉及在客户端执行代码,通常是在 Web 浏览器或浏览器插件中原生执行。你将学习如何使用 Burp Suite 测试客户端代码的执行,以确定是否存在跨站脚本攻击(XSS)。你还将了解如何使用 Burp Suite 浏览器中的 DOM Invader 工具揭示基于 DOM 的漏洞。
第十章,使用 Burp Suite 宏和扩展,教你如何利用 Burp Suite 宏帮助渗透测试人员自动化事件,如登录或响应参数读取,以克服潜在的错误情况。你还将了解作为 Burp Suite 附加功能的扩展,特别是一些用于漏洞奖励的选择性扩展。
第十一章,实现高级主题攻击,简要解释了 XXE 作为一种针对解析 XML 的应用程序的漏洞类别,以及 SSRF 作为一种漏洞类别,允许攻击者代表应用程序发起未经授权的请求。你还将学习如何使用 Burp Suite 攻击 GraphQL 和JSON Web 令牌(JWTs)。
如何最大限度地利用本书
所有要求都在每个章节的技术要求部分进行了更新。
以下表格列出了软件要求。你将需要书中所列的项目。每个食谱的初步步骤将告知你所需的软件。
书中涉及的 软件/硬件 | 操作系统及 其他要求 |
---|---|
Oracle VirtualBox | Windows、macOS 和 Linux(任何) |
Mozilla Firefox 浏览器 | OWASP Broken Web Applications(BWA)虚拟机 |
7-Zip 文件归档工具 | Burp Suite 社区版或专业版 |
Oracle Java | PortSwigger 帐户以访问实验室 |
每个食谱包含一个称为准备工作的设置阶段,其中提供了执行各个步骤之前所需软件的链接和说明。
使用的约定
本书中使用了若干文本约定。
文本中的代码:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 用户名。以下是一个示例:“允许攻击继续,直到你到达载荷50。”
代码块按如下方式设置:
<%@ page import="java.util.*,java.io.*"%>
<%
if (request.getParameter("cmd") != null) {
out.println("Webshell cmd: " + request.getParameter("cmd")
任何命令行输入或输出均按如下格式编写:
C:\Burp Jar Files>java -jar
burpsuite_pro_v2023.4.3.jar
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。以下是一个示例:“从下拉列表中选择一个工具并点击查找工具按钮。”
提示或重要说明
以这种方式显示。
部分
本书中你会发现多个经常出现的标题(准备工作,如何操作…,工作原理…,更多内容…,以及另见)。
为了清晰地指导你完成配方,使用以下几个部分:
准备工作
本节告诉你如何理解本书中的配方,并描述如何设置任何软件或配方所需的初步设置。
如何操作…
本节包含了完成本配方所需的步骤。
工作原理…
本节通常包括对上一节内容的详细解释。
更多内容…
本节包含了有关配方的附加信息,旨在帮助你更好地了解该配方。
另见
本节提供了配方的其他有用信息的链接。
与我们联系
我们始终欢迎读者的反馈。
一般反馈:如果你对本书的任何部分有疑问,请在邮件主题中提及书名,并通过 customercare@packtpub.com 联系我们。
勘误表:尽管我们已经尽最大努力确保内容的准确性,但错误难免发生。如果你在本书中发现错误,我们将非常感激你能向我们报告。请访问 www.packtpub.com/support/errata,选择你的书籍,点击勘误表提交链接,并输入详细信息。
盗版:如果你在互联网上发现我们的作品有任何非法复制版本,我们将非常感谢你提供其位置地址或网站名称。请通过 copyright@packt.com 联系我们,并提供相关链接。
如果你有兴趣成为作者:如果你在某个领域有专业知识,并且有兴趣撰写或为书籍做贡献,请访问 authors.packtpub.com
分享你的想法
当你读完 Burp Suite Cookbook - 第二版 后,我们非常希望听到你的想法!请 点击这里直接访问亚马逊的评论页面,分享你的反馈。
你的评论对我们和技术社区非常重要,它将帮助我们确保提供优质内容。
下载本书的免费 PDF 版本
感谢购买本书!
你喜欢随时随地阅读,但又无法随身携带纸质书籍吗?
你的电子书购买是否与所选设备不兼容?
别担心,现在每本 Packt 书籍都可以免费获得该书的 DRM-free PDF 版本。
随时随地,在任何设备上阅读。你可以从你喜爱的技术书籍中搜索、复制并粘贴代码到你的应用程序中。
特权不止于此,你可以获得独家的折扣、通讯和每日送达的优质免费内容。
按照以下简单步骤来获得好处:
- 扫描二维码或访问下面的链接
[外链图片转存中…(img-PmOmztBL-1750320516874)]
packt.link/free-ebook/9781835081075
-
提交你的购买凭证
-
就是这样!我们会将你的免费 PDF 和其他福利直接发送到你的邮箱
第一章:使用 Burp Suite 入门
本章提供了继续学习本书材料所需的设置说明。从下载 Burp 开始,详细介绍了两种主要的 Burp 版本及其区别。
使用 Burp Suite 时,渗透测试员需要一个目标应用程序。本章包含下载和安装包含在虚拟机(VM)中的 OWASP 应用程序的说明。这些应用程序将在全书中作为目标脆弱的 Web 应用程序使用。
本章包括配置 Burp Suite 代理监听器的说明。此监听器用于捕获在本地浏览器和目标网站之间流动的所有 HTTP 流量。监听器的默认设置包括互联网协议(IP)地址 127.0.0.1 和端口号 8080。
最后,本章将介绍启动 Burp Suite 的选项,包括如何通过命令行启动 Burp Suite,选择性地使用无头模式,以及使用可执行文件启动。
在本章中,我们将介绍以下内容:
-
下载 Burp Suite(社区版和专业版)
-
设置 Web 应用渗透测试实验室
-
创建 PortSwigger 账户以访问 Web 安全学院
-
通过命令行或可执行文件启动 Burp Suite
-
使用 Burp 监听 HTTP 流量
下载 Burp Suite(社区版和专业版)
学习本书中包含的技术的第一步是下载 Burp Suite 应用程序。下载页面在这里:portswigger.net/burp/
。你需要决定下载哪个版本的 Burp Suite,以下是可供选择的版本:
-
专业版
-
社区版
-
企业版(未涵盖):该产品专为大型公司设计,可在成千上万的目标上运行 Burp 扫描器
-
Dastardly(未涵盖):此版本仅提供 Burp 扫描器功能,专门设计为与 Jenkins 和其他 CI 工具集成,作为 DevOps 流水线中的作业
现在被称为社区版的产品曾经被称为免费版。你可能会在互联网上看到这两者的引用,但它们是一样的。截止目前,专业版的价格为 $449。
为了帮助你做出选择,我们将比较这两个版本。社区版提供了本书中使用的许多功能,但并非全部。例如,社区版不包括任何扫描功能。此外,使用 Burp Suite Intruder 功能时,社区版在使用线程时有一定的强制性限制。社区版没有内置的有效负载,但你可以加载自定义负载。最后,许多需要专业版的 Burp Suite 扩展显然在社区版中无法使用。
Professional 版本启用了所有功能,包括被动和主动扫描器。没有强制性的流量限制。PortSwigger(即编写并维护 Burp Suite 的公司名称)提供了多个内置的有效载荷用于模糊测试和暴力破解。使用扫描器相关 API 调用的 Burp Suite 扩展也能在 Professional 版本中正常工作。
在本书中,我们将使用 Professional 版本,它相比 Community 版本提供了更丰富的功能。不过,当本书中使用到仅限于 Professional 版本的功能时,会通过一个特殊的图标进行标示:
图 1.1 – Burp Suite Professional 图标
准备工作
为了开始我们的共同冒险,请访问 portswigger.net/burp
并下载你希望使用的 Burp Suite 版本。页面上提供了一个滑块,如下所示,突出显示了 Professional 和 Community 版本的功能,允许你进行对比:
图 1.2 – Burp Suite Professional 与 Community 功能对比
在购买 Professional 版本之前,你可能希望选择 Community 版本,以便先熟悉该产品。
如果你选择购买或使用 Professional 版本的试用版,你需要填写表格或进行支付,并随后会收到邮件确认。一旦账户创建完成,你可以登录并通过我们的账户提供的链接进行下载。
软件工具要求
完成本配方需要以下内容:
-
Oracle Java (
www.oracle.com/java/technologies/downloads/
) -
Burp Proxy Community 或 Professional (
portswigger.net/burp/
) -
Mozilla Firefox 浏览器 (
www.mozilla.org/en-US/firefox/new/
)
如何操作…
在确定所需版本后,你有两种安装选项,包括可执行文件或普通 JAR 文件。可执行文件仅适用于 Windows,并且提供 32 位和 64 位版本。普通 JAR 文件适用于 Windows、macOS 和 Linux。你可以在此处找到所有可用的下载选项:portswigger.net/burp/releases/professional-community-2023-4-5?requestededition=community&requestedplatform=
。
Windows 可执行文件是自包含的,将在您的程序列表中创建图标。然而,普通 JAR 文件要求您的平台预先安装 Java (www.oracle.com/java/technologies/downloads/
)。您可以选择当前版本的 Java(JRE 或 JDK),因此可以自由选择最新版本:
图 1.3 – PortSwigger 的下载页面
设置 web 应用渗透测试实验室
破损的 Web 应用 (BWA) 是 OWASP 项目,提供一个完整的虚拟机,包含多种已知漏洞的应用程序。该虚拟机中的应用程序让学生可以了解 web 应用安全,实践和观察 web 攻击,并使用如 Burp Suite 等渗透工具。
为了按照本书中的教程进行操作,我们将使用 OWASP 的 BWA 虚拟机。在本书写作时,您可以从 sourceforge.net/projects/owaspbwa/files/
下载 OWASP BWA 虚拟机。
准备工作
我们将下载 OWASP BWA 虚拟机及其辅助工具,以创建我们的 web 应用渗透测试实验室。
软件工具要求
为了完成此教程,您将需要以下内容:
-
Oracle VirtualBox (
www.virtualbox.org/wiki/Downloads
): 选择适用于您的平台的可执行文件 -
Mozilla Firefox 浏览器 (
www.mozilla.org/en-US/firefox/new/
) -
7-Zip 文件归档工具 (
www.7-zip.org/download.html
) -
OWASP BWA 虚拟机 (
sourceforge.net/projects/owaspbwa/files/
) -
Burp Proxy 社区版或专业版 (
portswigger.net/burp/
) -
Oracle Java (
www.oracle.com/java/technologies/downloads/
)
如何操作…
对于本教程,您需要下载 OWASP BWA 虚拟机,并通过以下步骤安装它:
-
点击提供的 OWASP BWA 虚拟机链接后,点击 下载最新版本 并解压 OWASP_Broken_Web_Apps_VM_1.2.7z 文件。
-
您将看到如下所示的多个文件列表:
图 1.4 – 解压 OWASP_Broken_Web_Apps_VM_1.2.7z 后的文件列表
-
所有显示的文件扩展名表明该虚拟机可以导入到 Oracle VirtualBox 或 VMware Player/Workstation 中。为了设置本书中的 web 应用渗透测试实验室,我们将使用 Oracle VirtualBox。
-
记下 OWASP Broken Web Apps-cl1.vmdk 文件。打开 VirtualBox 管理器(即 Oracle VM VirtualBox 程序)。
-
在 VirtualBox 管理器界面中,选择机器 | 新建从顶部菜单中输入虚拟机名称,例如OWASP BWA。
-
将类型设置为Linux,版本设置为Ubuntu (64-bit),然后点击下一步,如下所示:
图 1.5 – 创建虚拟机
-
下一个屏幕允许你调整内存或保持默认设置。点击下一步。
-
在下一个屏幕上,选择使用现有虚拟硬盘文件。
-
使用右侧的文件夹图标,从提取的文件列表中选择OWASP Broken Web Apps-cl1.vmdk文件并点击创建,如下所示:
图 1.6 – 硬盘分配
-
你的虚拟机已经加载到 VirtualBox 管理器中。让我们进行一些小的调整。高亮显示OWASP BWA条目并从顶部菜单选择设置。
-
在左侧窗格中选择网络部分,并将附加到:更改为仅主机适配器。点击确定:
图 1.7 – 网络适配器设置
- 现在,让我们启动虚拟机。右键点击,然后选择启动 | 正常启动:
图 1.8 – 启动虚拟机
- 等待直到 Linux 系统完全启动,这可能需要几分钟。启动过程完成后,你应该会看到以下屏幕。请注意,显示的 IP 地址与你的机器不同:
图 1.9 – 你的虚拟机分配的 IP 地址
-
此屏幕上显示的信息指明了你可以访问虚拟机上运行的易受攻击 web 应用程序的网址。例如,在前一个屏幕截图中,网址是http://192.168.56.101/。你将会被提示管理虚拟机,但此时无需登录。
-
在你的宿主系统中打开 Firefox 浏览器,而不是在虚拟机中。使用宿主机器上的 Firefox 浏览器,输入提供的网址(例如http://192.168.56.101/),其中 IP 地址是特定于你的机器的。
-
在你的浏览器中,你将看到一个包含指向易受攻击的 web 应用程序的链接的索引页面。这些应用程序将在本书中作为目标进行使用:
图 1.10 – 虚拟机的启动页
它是如何工作的…
利用 OWASP 创建的定制虚拟机,我们可以快速设置一个包含故意易受攻击应用程序的 web 应用渗透测试实验室,这些应用程序将作为我们本书中的合法测试目标。
创建 PortSwigger 账户以访问 Web 安全学院
在本版中,我们添加了更多与 web 安全相关的实验室,以丰富你使用 Burp Suite 的体验。为了跟进并完成这些实验室,你必须在 PortSwigger 上注册一个账户。
PortSwigger 通过 Web 安全学院 (portswigger.net/web-security
) 提供免费的在线 web 安全培训。学院包含学习材料、实操实验和练习考试。在本书中,我们将使用其中一些实验来演示黑客技术。
准备工作
浏览到 PortSwigger 网站 (portswigger.net/
) 并查找登录按钮。点击登录按钮,进入登录页面,页面上有一个注册按钮:
图 1.11 – PortSwigger 登录按钮
如何操作…
按照以下步骤操作:
- 访问
portswigger.net/users
,然后选择底部的创建账户按钮,旁边是登录按钮:
图 1.12 – 创建账户按钮
- 您必须提供有效的电子邮件地址,以便接收登录网站的密码:
图 1.13 – PortSwigger 账户创建页面
您应该很快就能收到账户的密码。
通过命令行或可执行文件启动 Burp Suite
对于非 Windows 用户或选择普通 JAR 文件选项的 Windows 用户,您每次想运行 Burp 时都需要在命令行启动它。因此,您需要一个特定的 Java 命令来启动。
在某些情况下,例如自动化脚本,您可能希望在命令行中调用 Burp,作为 shell 脚本中的一行命令。此外,您还可能希望在没有图形用户界面(GUI)的情况下运行 Burp,这种模式称为无头模式。本方法将介绍如何执行这些任务。
如何操作…
我们将回顾启动 Burp Suite 产品所需的命令和操作:
- 在从下载的**.exe**文件运行安装程序后,您可以通过双击桌面上的图标或从程序列表中选择来启动 Windows 中的 Burp:
图 1.14 – 安装后 Burp Suite 菜单项
- 使用普通 JAR 文件时,java 可执行文件后跟**-jar**选项,再跟下载的 JAR 文件名。
在命令行(最小化)使用普通 JAR 文件启动 Burp(首先必须安装 Java):
C:\Burp Jar Files>java -jar burpsuite_pro_v2023.4.3.jar
如果您希望更好地控制堆内存大小设置(即分配给程序的内存量),您可以修改java命令。
java 可执行文件后跟**-jar**,然后是内存分配。在这种情况下,为读取访问内存(RAM)分配了 2 GB(即2g),接着是 JAR 文件的名称。如果您收到无法分配这么多内存的错误,请将内存量降低至 1,024 MB(即1024m)之类的值。
在命令行启动 Burp(优化版)并使用纯 JAR 文件(首先需要安装 Java):
C:\Burp Jar Files>java -jar -Xmx2g burpsuite_pro_v2023.4.3.jar
- 可以从命令行启动 Burp Suite 并以无头模式运行。无头模式意味着在没有图形用户界面的情况下运行 Burp。
注意
本书中,我们不会在无头模式下运行 Burp,因为我们是通过图形界面学习的。然而,您可能将来会需要这些信息,所以这里呈现给您。
从命令行启动 Burp Suite,以便它可以使用纯 JAR 文件在无头模式下运行(首先需要安装 Java):
C:\Burp Jar Files>java -jar -Djava.awt.headless=true burpsuite_
pro_v2023.4.3.jar
请注意,-Djava.awt.headless=true 参数紧随 -jar 选项之后,并位于 JAR 文件名称之前。
如果成功,您应看到以下内容:
proxy: Proxy service started on 127.0.0.1:8080
按下Ctrl + C 或 Ctrl + Z 可停止进程。
可以为无头模式命令提供一个配置文件,以便您自定义代理监听器所在的端口号和 IP 地址。
注意
请查阅 PortSwigger 的支持页面,了解更多相关信息:support.portswigger.net/customer/portal/questions/16805563-burp-command-line
。
在每种启动场景中,您应看到一个启动画面:
- 启动画面标签将与您下载的版本匹配,无论是专业版还是社区版:
图 1.15 – Burp Suite 启动画面
-
可能会提示您更新版本;如果愿意,可以进行更新。Burp 会不断添加新功能以帮助您发现漏洞,因此升级应用程序是一个好主意。如果适用,请选择立即更新。
-
接下来,您将看到一个对话框,询问有关项目文件和配置的问题:
图 1.16 – 启动时的项目选项
-
如果您使用的是社区版,您将只能创建一个临时项目。如果您使用的是专业版,请在磁盘上创建一个新项目,并将其保存在一个合适的位置,以便您能够找到它。点击下一步。
-
随后的启动画面会询问您希望使用的配置选项。此时,我们还没有任何配置,所以请选择使用 Burp 默认配置。随着本书的进展,您可能希望保存配置设置,并在将来从此启动画面加载它们,如下所示:
图 1.17 – 启动时的配置选项
- 最后,我们准备点击启动 Burp。
它是如何工作的…
使用纯 JAR 文件或 Windows 可执行文件,你可以启动 Burp 来启动代理监听器,以捕获 HTTP 流量。Burp 提供临时或永久的项目文件,以便保存套件中执行的活动。
使用 Burp 监听 HTTP 流量
Burp 被描述为一个拦截代理。这意味着 Burp 位于用户的 web 浏览器与应用的 web 服务器之间,拦截或捕获它们之间流动的所有流量。这种行为通常被称为代理服务。
渗透测试人员使用拦截代理捕获浏览器与 web 应用之间的流量,以便进行分析和操控。例如,测试人员可以暂停任何 HTTP 请求,从而在请求发送到 web 服务器之前进行参数篡改。
拦截代理,如 Burp,允许测试人员拦截 HTTP 请求和 HTTP 响应。这使得测试人员能够在不同条件下观察 web 应用的行为。如我们所见,有时这些行为是意外的,偏离了原开发者的预期。
要查看 Burp Suite 的工作效果,你需要配置 Firefox 浏览器的网络设置,使其指向正在运行的 Burp 实例。这样,Burp 就能捕获浏览器与目标 web 应用之间所有的 HTTP 流量。
准备工作
我们将配置 Firefox 浏览器,允许 Burp 监听浏览器与 OWASP BWA 虚拟机之间的所有 HTTP 流量。这将使 Burp 内部的代理服务能够捕获流量以进行测试。
有关此操作的说明可以在 PortSwigger 上找到:support.portswigger.net/customer/portal/articles/1783066-configuring-firefox-to-work-with-burp
。我们将在本食谱中逐步讲解此过程。
如何操作…
按照以下步骤使用 Burp 启动 HTTP 流量监听:
-
打开 Firefox 浏览器并进入选项。
-
在常规选项卡中,向下滚动到网络代理部分,然后点击设置。
-
在连接设置窗口中,选择手动代理配置,并输入 IP 地址127.0.0.1,端口设置为8080。选中对所有协议使用此代理服务器复选框。
确保不使用代理的地址文本框为空,如下截图所示,然后点击确定:
图 1.18 – 手动配置 Firefox 浏览器将 HTTP 流量发送到 Burp
-
在后台运行 OWASP BWA 虚拟机,并使用 Firefox 浏览器访问与你的机器相关的 URL(即 VirtualBox 中 Linux 虚拟机显示的 IP 地址),点击重新加载按钮(一个圆圈中的箭头),以查看 Burp 捕获的流量。
-
如果你没有看到任何流量,请检查 Proxy | Intercept 是否阻止了请求。如果标有 Intercept is on 的按钮被按下,如下图所示,那么再次点击该按钮以禁用拦截。完成后,流量应顺利流入 Burp,如下所示:
图 1.19 – 默认情况下,Intercept 是开启的
在下图中,Proxy | Intercept 按钮被禁用:
图 1.20 – 关闭 Intercept 以查看流量
- 如果一切正常,你将在 Target | Site map 标签中看到流量,类似于下图所示。你的 IP 地址会不同,当然,你的 Site map 区域中可能显示更多的项目。恭喜!你现在已经让 Burp 监听了你所有的浏览器流量!
图 1.21 – 确认 HTTP 流量已流入 Burp
它是如何工作的……
Burp Proxy 服务正在 127.0.0.1 上监听,端口号为 8080。你可以更改这些设置,以便在其他 IP 地址或端口上进行监听。然而,为了学习目的,我们将使用默认设置。
还有更多……
作为一个更简单的替代方案,你可以使用 Burp 内置的浏览器。要访问它,请从顶部菜单中选择 Proxy,然后选择 Intercept 子菜单,接着点击 Open browser 按钮:
图 1.22 – 使用 Burp 内置的浏览器,而不是使用外部浏览器(例如,Firefox)
第二章:了解 Burp Suite 工具集
本章概述了 Burp Suite 中最常用的工具。首先,我们将介绍如何在目标 | 站点映射中设置目标范围。然后,介绍消息编辑器。接下来,利用OWASP Mutillidae II进行一些实践操作,熟悉代理、Repeater、Decoder和Intruder工具。
在本章中,我们将涵盖以下内容:
-
设置目标站点映射
-
了解消息编辑器
-
使用Repeater进行重复请求
-
使用Decoder进行解码
-
使用Intruder进行攻击
技术要求
要完成本章的所有操作,你将需要以下工具:
-
Burp Proxy Community 或 Professional(
portswigger.net/burp/
) -
配置允许 Burp 代理流量的 Firefox 浏览器(
www.mozilla.org/en-US/firefox/new/
)
设置目标站点映射
现在,浏览器、Burp 和 OWASP Broken Web Applications(BWA)虚拟机(VM)之间的流量已经建立,我们可以开始设置我们的测试范围。对于本次操作,我们将使用 OWASP BWA VM 中的 OWASP Mutillidae II 链接(http://<Your_VM_Assigned_IP_Address>/mutillidae/)作为目标应用程序。
更仔细地查看目标选项卡,你会注意到有两个子选项卡:站点映射和范围。从浏览器、Burp 和 Web 服务器之间的初始代理设置开始,你应该已经在目标 | 站点映射选项卡中看到一些 URL、文件夹和文件。你可能会觉得信息量有些庞大,但为我们的项目设置范围将有助于更好地集中注意力。
准备工作
使用目标 | 站点映射和目标 | 范围选项卡,我们将为 Mutillidae 分配 URL(http://<Your_VM_Assigned_IP_Address>/mutillidae/)作为范围。
如何操作…
执行以下步骤以设置目标站点映射:
- 查找mutillidae文件夹,然后右键单击它,从下拉菜单中选择添加到范围:
图 2.1 – 设置目标应用程序的范围
- 当你将mutillidae文件夹添加到你的范围时,可能会弹出一个代理历史记录对话框,如下所示。你可以选择点击是,以避免收集超出你范围的消息,或者你可以选择继续让代理 HTTP 历史选项卡收集通过 Burp 的任何消息,即使这些消息超出了你已经确定的范围。出于我们的目的,我们将选择是:
图 2.2 – 代理历史提示
- 点击目标 | 范围设置选项卡,弹出菜单显示后,你应该能够看到以下内容:
图 2.3 – 点击范围设置以显示弹出显示
OWASP Mutillidae II 的完整 URL 显示在项目 | 范围的包括在范围内表格中,如下所示:
图 2.4 – 弹出显示,显示设置为目标应用的范围
它是如何工作的…
设置范围对于更清晰地理解从目标到 Burp 的流量流动至关重要。一旦正确设置范围,所有 HTTP 流量都可以在您的目标 | 站点地图和 Burp 的代理 | HTTP 历史记录标签中看到。个别请求和响应的详细信息可以通过消息编辑器查看。
理解消息编辑器
在 Burp Suite 中几乎每个显示 HTTP 消息的工具和标签中,您都会看到一个编辑器,用于标识请求和响应。这通常被称为消息编辑器。消息编辑器允许查看和编辑 HTTP 请求和响应,并具有一些特性。
在消息编辑器中,有多个子标签。一个请求消息的子标签至少包括以下内容:
-
漂亮
-
原始
-
十六进制
响应消息的子标签包括以下内容:
-
漂亮:漂亮子标签向您提供与原始相同的信息,但格式更易读。请注意,漂亮子标签可能会被禁用。这是由于支持的格式所致。为了启用漂亮子标签,消息必须是以下格式之一:
-
JSON
-
XML(包括图像/SVG + XML 内容)
-
HTML
-
CSS
-
JavaScript
-
-
原始:原始子标签以原始 HTTP 形式向您显示消息。
-
十六进制:十六进制子标签以十六进制格式呈现消息;本质上,它是一个十六进制编辑器。您可以在诸如代理和Repeater等工具中编辑单个字节,但这些值必须以两位十六进制形式给出,从00到FF。
-
渲染(有时):最后,渲染子标签可能会被灰显或可见,具体取决于 HTTP 响应的内容类型。只有当返回的响应为 HTML 时,这个子标签才会被启用,给您一个与浏览器查看时相同的视图。
准备就绪
让我们探索在 Burp 中针对每个请求和响应所捕获的消息编辑器中的多个标签。需要注意的重要区分是——来自目标 | 站点地图和代理 | HTTP 历史记录标签的消息在消息编辑器中是不可编辑的。这两个区域保存了通过 Burp 流动的流量状态。如果您希望编辑任何消息,您必须将单独的消息发送到 Burp 中的其他工具——如Repeater、Intruder等——在这些工具中您可以编辑值。
如何操作…
确保您的流量在浏览器、Burp 和 OWASP BWA 虚拟机之间流动。
- 查看目标 | 站点地图标签时,请注意消息编辑器部分。我们先聚焦于消息的请求部分:
图 2.5 – 消息编辑器查看请求
- 在查看请求时,请注意可用的子标签包括格式化、原始和十六进制。要查看其他值,如 cookies、属性和参数,请使用检查器侧标签。可以通过点击“检查器”上方的三条线来展开或折叠检查器标签。
检查器标签现在已折叠:
图 2.6 – 消息编辑器检查器折叠状态
检查器标签现在已展开:
图 2.7 – 展开检查器的消息编辑器
展开后,属性、参数、cookies 和头部将被列出。每个部分可以展开为下拉菜单,显示各个部分的信息。例如,要查看此请求中使用的所有 cookies,展开显示数字 4 的请求 cookies子部分,表示该请求中使用了四个 cookies:
图 2.8 – 检查器视图,展开请求 cookies 子部分
- 消息的另一部分是响应标签,包含格式化、原始和十六进制子标签,并有时还包括渲染。如果内容是 HTML,则渲染子标签提供浏览器中呈现的 HTML 显示。检查器侧标签也可以使用,显示与之前描述的请求部分相同的信息:
图 2.9 – 消息编辑器查看响应时检查器折叠
使用 Repeater 进行重复请求
Repeater允许对请求进行轻微的修改或调整,并显示在左侧窗口中。发送按钮允许重新发送请求,响应显示在右侧窗口中。
与 HTTP 请求相关的详细信息包括标准的消息编辑器详细信息,如格式化、原始和十六进制,以及检查器侧标签。
与 HTTP 响应相关的详细信息包括标准的消息编辑器详细信息,如格式化、原始和十六进制,以及检查器侧标签,有时还包括渲染。
每个面板的底部都有一个搜索框,允许测试人员快速查找消息中存在的值:
图 2.10 – Repeater 中请求底部的搜索框
当点击齿轮图标时,会有额外的搜索框设置可用,包括区分大小写、正则表达式(Regex)和文本更改时自动滚动以匹配。当进行文本搜索时,如果需要区分大小写,可以切换该选项为开启。除了搜索普通文本字符串,用户还可以使用正则表达式(regex)模式来匹配消息中的某个值。最后,勾选自动滚动功能后,系统会自动滚动到用户搜索的值所在的位置:
图 2.11 – 可用的额外搜索框设置
准备开始
Repeater允许你手动修改并重新发出单个 HTTP 请求,分析你收到的响应。
如何操作…
- 在Target | Site map或Proxy | HTTP history标签下(如下面的截图所示),右键点击一条消息并选择发送到 Repeater:
图 2.12 – 从代理 HTTP 历史记录中将请求发送到 Repeater 的上下文菜单
- 切换到Repeater标签。Request现在在Repeater中,准备进行参数调整。
图 2.13 – Repeater 中的请求,准备进行调整
我们将在本书中频繁使用Repeater。本章只是对Repeater的介绍,帮助理解它的用途。关于用途,请注意Repeater和Intruder的主要区别在于每次发送请求的数量。如果你是在进行轻微更改以识别暴露点的实验,Repeater非常方便。一旦模式确定,Intruder就可以用来反复地暴力破解你的漏洞参数,发送大量请求。
使用 Decoder 解码
Burp Decoder是一个工具,允许测试者将原始数据转换为编码数据,或者将编码数据转换回纯文本。Decoder支持多种格式,包括 URL 编码、HTML 编码、Base64 编码、二进制代码、哈希数据等。Decoder还包括一个内置的十六进制编辑器。
准备开始
在 Web 渗透测试过程中,测试者可能会遇到一个编码值。Burp 通过允许测试者将编码值发送到Decoder并尝试各种可用的解码功能,简化了解码过程。
如何操作…
让我们尝试解码在 OWASP Mutillidae II 应用程序中找到的PHPSESSID会话令牌。当用户最初浏览到 URL(http://<Your_VM_Assigned_IP_Address>/mutillidae/)时,该用户将被分配一个PHPSESSID cookie。PHPSESSID的值似乎是加密的,然后用 Base64 编码进行了包装。使用Decoder,我们可以解开该值:
-
浏览到**http://<Your_VM_Assigned_IP_Address>/mutillidae/**应用程序。
-
在Proxy | HTTP 历史记录标签中找到你刚刚从浏览器生成的 HTTP 请求(如下一截图所示)。高亮显示PHPSESSID值本身,而不是参数名称,右键点击,然后选择发送到Decoder:
图 2.14 – 从代理 HTTP 历史记录中发送请求中的高亮值到 Decoder 的上下文菜单
- 在Decoder标签中,在如下面所示的Decode as…下拉菜单中选择Base64。请注意,结果是加密的:
图 2.15 – 从请求中高亮的值,以及可用的编码/解码选项
在这个例子中,我们无法继续进行。我们可以确认值确实是用 Base64 进行了包装。然而,解开后的值是加密的。本教程的目的是向你展示如何使用Decoder来操作编码后的值。
还有更多…
PortSwigger 还将Decoder功能添加到Inspector侧标签中。这使得在通过消息编辑器查看请求或响应的完整上下文时,操作值更加直观。
图 2.16 – 使用 Inspector 进行编码/解码操作
使用入侵者进行攻击
Burp Intruder允许测试人员使用自定义有效载荷对 HTTP 消息的特定部分进行暴力破解或模糊化。
为了正确设置Intruder中的自定义攻击,测试人员需要使用Intruder四个子标签中可用的设置:
图 2.17 – 入侵者和可用子标签
准备工作
测试人员可能希望在消息中模糊化或暴力破解参数值。Burp Intruder通过提供各种入侵攻击方式、有效载荷和选项简化了这一过程。
如何操作…
-
浏览到 Mutillidae 的登录页面,并尝试登录应用程序。例如,输入用户名admin和无效密码adminpass。
-
在代理 | HTTP 历史标签页中找到登录尝试。你的请求编号(即左侧的**#**符号)与下方显示的编号不同。选择捕获你登录尝试的消息。
-
当登录尝试消息在HTTP 历史表中被高亮显示时,右击请求标签,选择发送 到 Intruder:
图 2.18 – 从代理 HTTP 历史发送请求到 Intruder 的上下文菜单
位置
位置子标签页确定在负载 | 位置部分内定义负载标记的位置。位置子标签页还标识攻击类型,默认设置为 Sniper,这对于我们的任务是有效的。为了我们的目的,从右侧菜单点击**清除§按钮(即负载标记)。使用光标手动选择密码字段。现在,点击右侧菜单中的添加§**按钮。你应该看到负载标记围绕密码字段如下所示:
图 2.19 – 替代标记放置在请求中的密码值上
负载
在位置子标签页之后是负载子标签页:
图 2.20 – Intruder 负载子标签页
负载子标签页识别你希望插入到前一个标签页中标识的各个位置的字典值或数字。负载子标签页内有多个部分,包括负载集、负载选项、负载处理和负载编码。
负载集
负载集允许设置负载的数量及其类型。为了我们的目的,我们将使用Sniper的默认设置,如之前的位置子标签页所示。这种配置将允许我们使用一个负载,负载类型值为简单列表:
图 2.21 – 负载子标签页允许配置负载集
负载选项
在负载选项部分,测试人员可以配置自定义负载或从文件中加载预配置的负载。
为了我们的目的,我们将向负载中添加一个值。在文本框中输入admin,然后点击添加按钮以创建我们的自定义负载:
图 2.22 – 可以在此负载集的简单列表中设置值
负载处理
载荷处理在配置特殊规则时非常有用,这些规则将在Intruder将载荷替换到载荷标记位置时使用。对于本配方,我们不需要任何特殊的载荷处理规则:
图 2.23 – 载荷处理允许在 Intruder 攻击过程中对载荷应用规则
载荷编码
载荷编码在将请求发送到 Web 服务器之前应用于载荷值。许多 Web 服务器可能会阻止攻击性载荷(例如,
对于本配方的目的,保持默认框选中:
图 2.24 – 应用于每个请求中替换标记的载荷值的载荷编码
资源池
在载荷子标签后是资源池子标签:
图 2.25 – Intruder 资源池子标签
资源池子标签用于分配在 Intruder 攻击过程中使用的线程数。默认池大小为10,具体取决于资源。此标签允许创建和管理不同大小的资源池,并结合固定或随机延迟进行节流:
图 2.26 – Intruder 中配置的默认资源池
根据目标应用程序的抗压能力,你可能希望创建一个新的资源池,采用较少侵入性的行为和网络噪声:
图 2.27 – 在 Intruder 中创建自定义资源池
设置
最后,Intruder | 设置标签页提供了攻击表的自定义,特别是与捕获的响应相关,如特定的错误信息。Intruder | 设置标签页中有多个部分,包括保存攻击、请求头、错误处理、攻击结果、Grep - 匹配、Grep - 提取、Grep - 载荷、重定向和HTTP 版本:
图 2.28 – Intruder 设置标签页
保存攻击
保存攻击是一个选项,允许你将 Intruder 攻击、配置和结果保存到项目文件中。默认情况下此功能是关闭的,以节省空间,因为攻击数据的积累可能会变得非常庞大:
图 2.29 – 保存你的 Intruder 攻击
请求头
请求头提供了与攻击期间Intruder运行时的头参数相关的配置项。对于此食谱,保持默认勾选框选中:
图 2.30 – 请求头配置
错误处理
错误处理是一个配置项,告诉Intruder在攻击过程中如何处理网络错误。默认设置为3次重试,并在每次重试前暂停2000毫秒。
对于此食谱,保持默认设置不变:
图 2.31 – 错误处理
攻击结果
在启动攻击后,Intruder会创建一个攻击表。攻击结果部分提供了一些与该表中捕获内容相关的设置。
对于此食谱,保持默认设置不变:
图 2.32 – 攻击结果选项
Grep - 匹配
Grep - 匹配是一个非常有用的功能,启用后会在攻击表结果中创建附加列,以便快速识别响应中的错误、异常或自定义字符串。
对于此食谱,保持默认设置不变:
图 2.33 – Grep - 基于关键字匹配
Grep - 提取
Grep - 提取,启用后,是另一种选项,可以在攻击表中添加一列,其标签与响应中找到的字符串相关。此选项与Grep - 匹配不同,因为Grep - 提取的值来自实际的 HTTP 响应,而不是任意字符串。
对于此食谱,保持默认设置不变:
图 2.34 – Grep - 基于响应提取
Grep - 负载
Grep - 负载为您提供了向攻击表中添加列的功能,这些列包含响应中反射的负载。
对于此食谱,保持默认设置不变:
图 2.35 – Grep - 基于请求中的负载值提取响应
重定向
重定向指示Intruder是否从不、根据条件或始终跟随重定向。这个功能非常有用,特别是在暴力破解登录时,因为 302 重定向通常表示登录成功。
对于此食谱,保持默认设置不变:
图 2.36 – 重定向行为
HTTP 版本
HTTP 版本指示Intruder在攻击期间使用HTTP/2或HTTP/1作为协议。默认设置将使用目标服务器当前使用的协议:
图 2.37 – HTTP 协议行为
如果你希望覆盖目标项目并使用HTTP/1,请启用此功能。确保取消勾选Default to HTTP/2 if the server supports it,以强制使用HTTP/1协议:
图 2.38 – HTTP/2 覆盖
开始攻击按钮
最后,我们准备开始Intruder。在Payloads或Settings子选项卡中,点击Start attack按钮以开始:
图 2.39 – Intruder 的开始攻击按钮
当攻击开始时,一个攻击结果表将以弹出屏幕的形式出现。这使得测试人员可以查看所有使用负载在负载标记位置中的请求。它还允许我们查看所有响应以及显示状态码、错误、超时、长度和评论的列:
图 2.40 – 攻击结果表
对于此食谱,我们注意到password参数中的管理员负载产生了302状态码,这是一个重定向。这意味着我们成功登录到 Mutillidae 应用程序。
查看攻击表中的Response | Render,可以看到 Web 应用程序如何响应我们的负载。如你所见,我们成功以管理员身份登录:
图 2.41 – Intruder 攻击的结果是已登录的会话
第三章:使用 Burp 配置、爬虫、审计和报告
本章将帮助测试人员在项目和用户级别上校准 Burp Suite 设置,以优化对目标应用程序的测试。例如,对 爬虫 和 审计 选项的调整可以帮助进行更少侵扰、噪声更小的暴力破解攻击。同样,测试人员在尝试访问目标时可能会遇到有趣的网络情况。因此,Burp Suite 包括了几个功能,用于测试运行在 超文本传输协议安全 (HTTPS) 上的网站,或通过 SOCKS 代理或端口转发访问网站。许多设置在项目和用户级别都有提供。最后,Burp Suite 提供了开箱即用的功能来生成已发现问题的报告。
本章将涵盖以下方案:
-
在 HTTPS 上建立信任
-
设置项目配置
-
设置用户配置
-
爬取目标网站
-
创建自定义扫描脚本
-
报告问题
技术要求
要完成本章中的方案,您需要以下内容:
-
OWASP 损坏的 Web 应用程序 (BWA)
-
OWASP Mutillidae 链接
-
Burp Suite 代理社区版或专业版 (
portswigger.net/burp/
) -
Firefox 浏览器 (
www.mozilla.org/en-US/firefox/new/
) -
配置为允许 Burp Suite 代理流量的 Firefox 浏览器的 FoxyProxy Standard 插件 (
addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/
) -
代理配置步骤在 第一章 的 使用 Burp 监听 HTTP 流量 方案中有所涵盖。
在 HTTPS 上建立信任
由于大多数网站都实现了(HTTPS),了解如何启用 Burp Suite 与这些站点通信是有益的。HTTPS 是一个加密隧道,运行在 超文本传输协议 (HTTP) 之上。
HTTPS 的目的是加密客户端浏览器与 Web 应用程序之间的流量,以防止窃听。然而,作为测试人员,我们希望允许 Burp Suite 进行窃听,因为这正是使用拦截代理的目的。Burp Suite 提供了一个由根 证书授权机构 (CA) 签署的证书。该证书可以用来在 Burp Suite 和目标 Web 应用程序之间建立信任。
默认情况下,Burp 的代理在与运行在 HTTPS 上的目标建立加密握手时,可以生成每个目标的 CA 证书。这处理了 Burp 到 Web 应用程序部分的隧道。我们还需要处理浏览器到 Burp 部分。
为了在客户端浏览器、Burp 和目标应用程序之间建立完整的 HTTPS 隧道连接,客户端需要将 PortSwigger 证书信任为浏览器中的受信任证书机构。
准备工作
在需要进行渗透测试的 HTTPS 网站场景中,测试人员必须将 PortSwigger CA 证书作为受信任的权限导入到浏览器中。你可以使用像 FoxyProxy 这样的代理穿透工具,使流量更容易地通过 Burp Suite。
如何操作…
确保 Burp Suite 已启动。然后,执行以下步骤:
- 下载 FoxyProxy Standard 插件并在 Firefox 浏览器中安装扩展程序。
图 3.1 – FoxyProxy Standard Firefox 插件
- 配置 FoxyProxy Standard 作为 Burp 的通道。点击 添加 并填写设置,如下所示。完成后点击 保存:
图 3.2 – 如何配置 FoxyProxy Standard 与 Burp 一起使用
完成后,你应该看到以下输出:
图 3.3 – 配置了 Burp Suite 的 FoxyProxy Standard
- 切换 FoxyProxy 按钮为 开启,以便开始将所有浏览器流量通过 Burp 进行转发:
图 3.4 – 启用 FoxyProxy Standard 以拦截流量并将其发送到 Burp Suite
当启用 FoxyProxy 以允许浏览器流量通过 Burp Suite 时,它的样子如下:
图 3.5 – 启用的 FoxyProxy Standard
- 为了在 Burp 的证书与目标应用程序之间建立信任,你需要将 Burp 的证书添加到浏览器中并将其标记为受信任。为此,请打开 Firefox 浏览器并访问
burp
。你必须准确输入该网址才能访问此页面。你应该能在浏览器中看到以下屏幕。注意右侧的链接,标注为 CA 证书。点击该链接以下载 PortSwigger CA 证书:
图 3.6 – 下载 PortSwigger CA 证书的 URL
-
系统会弹出一个对话框,提示你下载 PortSwigger CA 证书。文件名为 cacert.der。将文件下载到你硬盘上的某个位置。
-
在 Firefox 中,打开 Firefox 菜单。然后,点击 选项。
-
在左侧点击 隐私与安全,然后向下滚动到 证书 部分。点击 查看 证书… 按钮:
图 3.7 – Firefox 设置以安装 PortSwigger 证书
- 选择 Authorities 标签页。点击 导入,选择你之前保存的 PortSwigger CA 证书文件,然后点击 打开:
图 3.8 – 将 PortSwigger CA 证书导入到 Firefox 浏览器中
- 在弹出的对话框中,勾选信任此 CA 以识别网站框并点击确定。在证书管理器对话框中也点击确定:
图 3.9 – 您必须明确信任 PortSwigger CA 证书
关闭所有对话框并重启 Firefox 浏览器。如果安装成功,您现在应该能够在浏览器中访问任何 HTTPS URL,同时通过 Burp Suite 代理流量,并且不会收到任何安全警告。
还有更多…
作为使用 FoxyProxy 并将 Burp 的证书导入浏览器的更简单替代方案,您可以直接使用 Burp Suite 内置的浏览器。要访问此浏览器,请从顶部菜单中选择代理,选择拦截子菜单,然后点击打开 浏览器按钮:
图 3.10 – Burp Suite 的浏览器是使用 FoxyProxy Standard 或外部浏览器的替代方案
这个内置浏览器处理证书信任并将所有流量代理到 Burp。Burp 的浏览器是近年来新增的最高效、最用户友好的功能之一。
这是 Burp Suite 内置浏览器的截图:
图 3.11 – Burp Suite 启动时的浏览器
设置项目配置
项目设置允许测试人员保存或设置特定于项目或范围目标的配置。这些设置存储在项目文件中,该文件在启动 Burp Suite 应用程序时创建。在项目部分下有多个子部分,包括工具、项目、会话和网络。这些选项是渗透测试人员在评估特定目标时所需的,因此我们将在此介绍它们。在逐一浏览每个区域时,我们将提供一些您在测试过程中可能会发现有用的建议。
如何操作…
- 要访问所有项目级配置,请点击 Burp Suite 右上角的设置齿轮图标:
图 3.12 – 点击设置后可访问项目级设置
- 新的弹出窗口将出现。确保在弹出窗口的左侧菜单中选择了项目,位于窗口顶部:
图 3.13 – 在弹出窗口中,确保项目被选中
- 在 项目 下包含的子部分有 工具、项目、会话 和 网络:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/Image96548.jpg
图 3.14 – 弹出窗口中所有可用的项目配置
项目 | 工具选项卡
此选项卡允许您为 代理、重复器、序列器 和 Burp 浏览器 Burp Suite 工具设置配置。为了增添一些色彩,我们将提供一些关于这些领域的建议,帮助您在渗透测试过程中更好地进行操作:
图 3.15 – 项目 | 工具菜单项
项目 | 工具 | 代理选项卡
在 代理 选项卡下,测试人员可以选择以下选项:
- 代理监听器:
默认情况下,Burp Suite 会为本地主机配置一个默认的代理监听器,运行在端口 8080。可以在此区域配置其他代理监听器,用于测试一些不常见的应用程序,例如移动应用。对于大多数测试人员来说,默认配置是足够的:
图 3.16 – 默认代理监听器列表
- 请求 拦截规则:
默认情况下,Burp Suite 代理被配置为监听并拦截所有 HTTP 请求,除非是图片(gif$**、**^jpg$**、**png ∗ ∗ 、 ∗ ∗ c s s **、**^css ∗∗、∗∗css、js$**、**^ico$**、**svg ∗ ∗ 、 ∗ ∗ e o t **、**^eot ∗∗、∗∗eot、woff$**、**^woff2$**、**ttf$)。如果您希望更改默认设置,可以在这里进行调整。对于大多数测试人员来说,默认配置是足够的:
图 3.17 – 默认的请求拦截规则
- 响应 拦截规则:
默认情况下,Burp Suite 代理是 不 配置为拦截 HTTP 响应的:
图 3.18 – 响应拦截规则,默认关闭
捕获响应的优势在于,您可以操控状态码和响应体,查看网页中的 JavaScript 是否会根据这些变化做出不同的反应。要开始在浏览器显示之前捕获每个 HTTP 响应,请进行以下更改:
图 3.19 – 推荐的响应拦截规则修改
- WebSocket 拦截规则:
当应用程序使用 WebSocket 时,此设置控制这些消息的拦截。对于大多数测试人员来说,默认配置是足够的:
图 3.20 – WebSocket 拦截规则
- 响应 修改规则:
Burp Suite 允许你在将 HTML 响应转发到本地浏览器之前重写它。在本节中,你可以配置 Burp Suite 以显示隐藏的表单字段,甚至禁用响应页面上的 JavaScript:
图 3.21 – 默认响应修改规则
- 匹配和 替换规则:
Burp Suite 提供了一个非常强大的 匹配和替换规则 表格,让你可以在拦截前自动替换请求或响应中的值。此表格的使用完全由测试人员自行决定。例如,你可能希望使用此表格将用户代理替换为使浏览器看起来像移动设备。或者,你可能希望用它来设置 cookie 值,甚至删除请求头!你甚至可以添加正则表达式规则来匹配值:
图 3.22 – 匹配和替换规则表
- TLS 通行:
你可以使用 TLS 通行 来识别目标设备前的其他设备。当其他设备位于目标前时,Burp Suite 将流量传递到这些设备,只寻求你的目标:
图 3.23 – TLS 通行
- 杂项:
Burp Suite Proxy 行为的一个通用设置区域位于 杂项 中。此区域允许你将使用的 HTTP 协议更改为非常旧的版本 HTTP/1.0。此区域还允许 gzip 解压控制。对于大多数测试人员,默认配置已经足够:
图 3.24 – 杂项设置
项目 | 工具 | Repeater 标签
在 Repeater 标签下,测试人员有以下选项:
- 连接:
该设置控制 Repeater 是否重新使用原始请求中使用的相同连接和协议,或者让 Burp Suite 创建一个新的连接并更改协议。对于大多数测试人员,默认配置已经足够:
图 3.25 – 连接
- 消息修改:
本节所做的任何修改仅保存到当前项目。对于大多数测试人员,默认配置已经足够:
图 3.26 – 消息修改
- 重定向:
使用 Burp Suite Repeater 时,每当遇到 302 重定向,你可以在此控制 Repeater 的行为。对于大多数测试人员,他们选择不自动执行重定向,因此默认设置通常已经足够:
图 3.27 – 重定向
- 默认 标签组:
除非你在进行带有多个标签组的客户端不同步攻击,否则你可能不需要修改此设置。此区域允许你指定任何新的请求发送到 Repeater 时,应该发送到哪个标签组:
图 3.28 – 默认选项卡组
项目 | 工具 | Sequencer 选项卡
在 Sequencer 选项卡下,测试人员可以选择以下选项:
- 实时捕获:
此设置控制在从实时请求中提取标记时,Sequencer 将使用的线程数量和行为。对于大多数测试人员,默认配置是足够的:
图 3.29 – 实时捕获
- 标记处理:
此设置控制每个提取的标记在分析过程中如何处理。对于大多数测试人员,默认配置是足够的:
图 3.30 – 标记处理
- 标记分析:
此设置控制对标记执行的测试类型。对于大多数测试人员,默认配置是足够的:
图 3.31 – 标记分析
项目 | 工具 | Burp 浏览器选项卡
此设置控制 Burp 内置的 Chromium 浏览器,并允许您使用机器的图形处理单元(GPU)。您还可以指定在没有沙盒的情况下运行内置浏览器。沙盒设置是针对任何受损目标应用程序影响本地机器的保护机制。对于大多数测试人员,默认配置是足够的:
图 3.32 – Burp 浏览器的浏览器运行设置
项目 | 项目 | 范围选项卡
在范围选项卡下,测试人员可以选择以下选项:
- 目标范围:
第二章中的 设置目标站点地图 方案展示了如何为此区域设置目标范围。请注意,这里还有一个排除在范围外的部分,允许您指定不希望包括的 URL,通常是登出链接:
图 3.33 – 目标范围
- 不在范围内 请求处理:
此设置开启时,将使 Burp Suite 丢弃任何不在范围内的请求,即使它们是在浏览器内请求的。对于大多数测试人员,默认配置是足够的:
图 3.34 – 不在范围内的请求处理
项目 | 项目 | 协作选项卡
Burp Suite Collaborator 是 Burp Suite Professional 的一个功能,提供给测试者访问外部服务器,用于捕获由内部目标服务器发出的 DNS 和/或 HTTP 请求。这是一个对攻击者非常强大的功能,因为许多漏洞可以通过 Collaborator 来证明。这样的漏洞包括 服务器端请求伪造(SSRF)、通过 跨站脚本(XSS)的数据外泄、cookie 偷窃等。大多数测试者使用 PortSwigger 提供的 Collaborator 服务器,但你也可以在此设置中配置自己的服务器并使用它。有关如何使用 Burp Collaborator 服务器的更多详细信息,请参见 第十一章:
图 3.35 – Burp Collaborator 服务器
本节有一个按钮用于运行健康检查。点击 运行健康检查 允许你检查与外部 Collaborator 服务器提供的所有外部服务的连接性:
图 3.36 – Burp Collaborator 健康检查
项目 | 项目 | 任务 标签
在 任务 标签下,测试者可以选择以下选项:
- 资源池:
资源池是可供入侵者和扫描任务使用的线程。此设置允许你创建自定义资源池,以便降低并发请求(线程)数量,并且限制请求的时机。默认设置的使用完全取决于目标应用程序处理同时多个请求的能力。如果你不确定,创建一个并发请求少于 10 的自定义资源池:
图 3.37 – 资源池
- 新任务自动启动:
任务是你可以在后台运行的自动扫描。此设置允许你配置是否希望在创建任务时它们自动启动。对于大多数测试者,默认配置即可:
图 3.38 – 新任务自动启动
- 安排任务:
如果你希望安排任务,这个设置允许你为特定任务设置开始和停止的日期、时间以及频率:
图 3.39 – 安排任务
项目 | 项目 | 日志记录 标签
日志记录 标签允许你指定哪些工具会将其请求和/或响应记录到文件中。如果选择此项,用户将被提示提供文件名和本地机器上保存日志文件的位置。对于大多数测试者,这个功能通常不会使用:
图 3.40 – 日志记录
项目 | 会话 标签
查看第十章以获取有关如何使用会话选项卡中的功能的更多信息。会话选项卡包括会话处理规则、Cookie jar和宏区域。
在会话选项卡下,测试人员有以下选项:
- 会话处理规则:此区域允许您在评估 Web 应用程序时配置自定义会话处理规则。默认情况下,Burp Suite 捕获并使用所有 HTTP 流量中看到的 cookie,并将它们保存在Cookie jar区域内:
图 3.41 – 会话处理规则
- Cookie jar:Cookie jar区域提供了 Burp Suite Proxy(默认情况下)捕获的一组 cookie、它们各自的域和路径,以及名称/值对。Cookie jar区域内的 Cookie 也是可编辑的:
图 3.42 – Cookie jar
- 宏:宏部分允许测试人员脚本化以前执行的请求/响应,从而在与目标应用程序交互时自动执行活动:
图 3.43 – 宏
项目 | 网络选项卡
网络选项卡提供了对连接、TLS和HTTP区域的控制。
项目 | 网络 | 连接选项卡
连接选项卡允许测试人员控制特定的交互,如身份验证和代理服务器:
- 平台认证允许您自动化 Burp Suite 针对目标平台的身份验证方式。此功能的默认设置在用户设置级别:
图 3.44 – 平台认证
如果需要项目设置级别,请使用左侧的滑块激活仅为此项目覆盖选项:
图 3.45 – 平台认证覆盖设置
单击添加复选框后,您将看到身份验证选项表(即基本、NTLMv2或NTLMv1),可用于目标平台。目标主机通常设置为通配符(*****)字符,并且必须预先知道凭据和域:
图 3.46 – 添加平台认证凭据
- 超时区域允许您在 Burp Suite 尝试连接到目标应用程序时指定超时阈值。对大多数测试人员来说,默认配置已经足够:
图 3.47 – 超时
- 上游代理服务器设置允许您识别任何上游代理服务器以访问目标应用程序。此功能的默认设置在用户设置级别:
图 3.48 – 上游代理服务器
如果需要项目设置级别,必须使用左侧的滑块来激活仅此项目的覆盖选项:
图 3.49 – 为项目设置级别覆盖上游代理服务器的设置
单击复选框以覆盖用户选项后,系统会显示一个表格,允许为该项目启用特定的上游代理选项。点击添加按钮会显示一个名为添加上游代理规则的弹出框。该规则特定于目标应用程序的环境。如果目标应用程序的环境前端有一个 Web 代理,并且需要与应用程序登录不同的凭据,则此功能非常有用:
图 3.50 – 添加上游代理规则的详细信息
- 主机名解析覆盖允许您添加类似于本地计算机上主机文件的主机条目,以覆盖域名系统(DNS)解析:
图 3.51 – 如何添加主机名解析
- SOCKS 代理允许 Burp Suite 通过SOCKS 代理配置访问目标。此功能的默认设置位于用户 设置级别:
图 3.52 – SOCKS 代理
如果需要项目设置级别,必须使用左侧的滑块来激活仅此项目的覆盖选项:
图 3.53 – 为项目设置级别覆盖 SOCK 项目设置
项目 | 网络 | TLS 标签
TLS 标签下的选项允许您配置证书和各种 TLS 相关的设置。TLS 协商、客户端 TLS 证书和服务器 TLS 证书区域可以在这里找到:
- TLS 协商:
当 Burp Suite 与目标应用程序通过 TLS 通信时,此选项允许您使用预配置的加密套件或指定不同的加密套件:
图 3.54 – TLS 协商
如果您希望自定义加密套件,可以点击使用自定义协议和加密套件单选按钮。此时会显示一个表格,允许您选择 Burp Suite 在与目标应用程序通信时可以使用的协议和加密套件:
图 3.55 – 使用自定义协议进行 TLS 协商
- 客户端 TLS 证书:
如果您希望对目标应用程序使用客户端证书,您可以在此部分配置这些证书。请记住,在添加客户端证书时,您必须拥有私钥。此功能的默认设置为用户****设置级别:
图 3.56 – 客户端 TLS 证书
如果需要项目设置级别,您必须使用左侧的滑块激活仅此项目的覆盖选项:
图 3.57 – 为项目设置级别覆盖客户端 TLS 证书
- 服务器 TLS 证书:
此表格为只读,并列出了 Burp Suite 从各种 Web 服务器接收到的所有服务器端证书。您可以双击任何一行查看每个证书的详细信息:
图 3.58 – 服务器 TLS 证书
项目 | 网络 | HTTP 标签
在HTTP标签下,测试人员有以下选项:
- 允许的重定向类型提供 Burp Suite 在捕获 HTTP 流量时使用的重定向类型。对于大多数测试人员,默认设置已足够:
图 3.59 – 允许的重定向类型
- 流式响应提供与无限期流式响应相关的配置。对于大多数测试人员,默认设置已足够:
图 3.60 – 流式响应
- 状态 100 响应处理提供 Burp Suite 处理 HTTP 状态码 100 响应的设置。对于大多数测试人员,默认设置已足够:
图 3.61 – 状态 100 响应处理
- HTTP/1 允许您重用相同的HTTP/1连接,而不是创建新的连接。对于大多数测试人员,默认设置已足够:
图 3.62 – HTTP/1
- HTTP/2 默认情况下,当目标 Web 服务器支持时,Burp Suite 会使用HTTP/2,而非HTTP/1,并在初始 TLS 握手期间协商。对于大多数测试人员,默认设置已足够:
图 3.63 – HTTP/2
设置用户配置
用户设置将应用于在您的本地计算机上运行的所有 Burp Suite 实例。这些设置允许测试者设置并保存用于所有 Burp Suite 项目的配置。在用户选项标签下有多个子部分,包括工具,项目,会话,网络,用户界面,套件,扩展和配置库。当我们逐个区域进行迭代时,我们将提供一些建议,这些建议可能在您的测试过程中很有帮助:
图 3.64 – 用户配置
如何做…
要访问所有用户级配置,请单击 Burp Suite 右上角的设置齿轮图标:
图 3.65 – 通过设置可用的用户级设置
将会弹出一个新窗口。确保您在弹出窗口的左侧菜单中选择了用户,位于顶部:
图 3.66 – 在弹出窗口内部,请确保已选择用户
用户 | 工具标签
注意用户 | 工具子部分影响的区域。我们将专注于每个区域 – 即代理,入侵者,重复器和Burp 浏览器:
图 3.67 – 用户 | 工具菜单项
用户 | 工具 | 代理标签
在代理标签下,测试者有以下选项:
- 代理 历史记录:
此设置是否提示您(或不提示您)是否仍希望将超出范围的项目记录到HTTP 历史标签:
图 3.68 – 代理历史记录
- 默认代理 拦截状态:
默认情况下,代理拦截器将切换为开启状态(启用拦截)。这可以在以下截图中看到。我们建议将此功能关闭(禁用拦截)。这可能是您想要对所有 Burp Suite 实例进行的第一个更改之一,用于用户设置:
图 3.69 – 默认代理拦截状态
用户 | 工具 | 入侵者标签
在入侵者标签下,测试者有以下选项:
- 自动 负载放置:
当使用入侵者时,使用此设置来确定负载是否将替换已识别的位置或附加值到已识别的位置。对于大多数测试者,默认设置就很好:
图 3.70 – 自动负载放置
- 新 标签配置:
使用 Intruder 时,使用此设置来确定在攻击过程中打开新标签时数据的行为。对于大多数测试人员来说,默认设置是合适的:
图 3.71 – 新标签配置
- 关闭时的行为 结果窗口:
如果您希望在关闭模态窗口之前移除提示,请使用此设置将其关闭。对于大多数测试人员来说,默认设置是合适的:
图 3.72 – 关闭结果窗口时的行为
- Payload 列表位置:
使用 Intruder 时,如果您希望更改 Burp Suite Professional 中可用的词表源,请使用此设置。对于大多数测试人员来说,默认设置是合适的:
图 3.73 – Payload 列表位置
用户 | 工具 | Repeater 标签 | 标签视图
Repeater 中的标签默认设置为 包装视图。您可以在下方的截图中看到 包装视图 的样子。对于大多数测试人员来说,默认设置是合适的:
图 3.74 – 使用包装视图的标签视图
以下是包装标签视图的截图:
图 3.75 – 包装标签视图
如果您希望更改 Repeater 标签的查看方式,请选择 滚动视图。您可以在这里看到 滚动视图 的样子:
图 3.76 – 滚动视图
用户 | 工具 | Burp 的浏览器 | 浏览器数据
您可以使用此设置来定制在使用 Burp 内置浏览器时存储所有捕获流量的位置。对于大多数测试人员来说,默认设置是合适的:
图 3.77 – 浏览器数据
用户 | 项目 标签
注意受 用户 | 项目 子部分影响的区域。我们将集中讨论每个区域——即 任务 和 自动备份:
图 3.78 – 用户 | 项目 菜单项
用户 | 项目 | 任务 标签 | 启动时的自动化任务
启动所有 Burp Suite 实例时的默认行为是暂停之前正在运行的任务。对于大多数测试人员来说,默认设置是合适的:
图 3.79 – 启动时的自动化任务
用户 | 项目 | 自动备份
默认情况下,Burp Suite 会实时自动保存(即备份)您的工作。然而,此设置允许您更好地控制项目备份文件保存的频率。开启此设置后,您可以配置备份之间的间隔时间。对于临时项目,此功能不可用:
图 3.80 – 自动备份
用户 | 网络选项卡
注意受 用户 | 网络 子部分影响的区域。我们将重点关注每个区域——即 连接 和 TLS:
图 3.81 – 用户 | 网络菜单项
用户 | 网络 | 连接选项卡
连接 选项卡允许测试人员控制特定的交互,如身份验证和代理服务器:
- 平台认证:
平台认证 允许您自动化 Burp Suite 如何对目标平台进行身份验证。此功能的默认设置位于 用户 设置 级别:
图 3.82 – 平台认证
- 上游 代理服务器:
上游代理服务器 设置允许您识别任何已到达目标应用程序的上游代理服务器。此功能的默认设置位于 用户 设置 级别:
图 3.83 – 上游代理服务器
- SOCKS 代理:
SOCKS 代理 允许 Burp Suite 通过 SOCKS 代理 配置访问目标。此功能的默认设置位于 用户 设置 级别:
图 3.84 – SOCKS 代理
用户 | 网络 | TLS 选项卡
在 TLS 选项卡下,测试人员有以下选项:
- 客户端 TLS 证书:
如果您希望对目标应用程序使用客户端证书,必须在此部分配置这些证书。请记住,在添加客户端证书时,您必须能够访问私钥。此功能的默认设置位于 用户 设置 级别:
图 3.85 – 客户端 TLS 证书
- Java TLS 设置:
对于使用 Java 的目标应用程序,此设置允许 TLS 握手协商使用通常由于过时而被 Java 安全策略阻止的算法。对于大多数测试人员,默认设置是可以的:
图 3.86 – Java TLS 设置
用户 | 用户界面选项卡
注意受 用户 | 用户界面 子部分影响的区域。我们将重点关注每个区域——即 检查器和消息编辑器、快捷键 和 显示:
图 3.87 – 用户 | 用户界面菜单项
用户 | 用户界面 | 检查器和消息编辑器选项卡
在 检查器和消息编辑器 选项卡下,测试人员有以下选项:
- 检查器小部件:
这个设置允许你调整 检查器 中小部件的显示方式。小部件包括显示请求和响应部分的多个文本区域。对于大多数测试人员来说,默认设置是合适的:
图 3.88 – 检查器小部件
- 默认检查器 面板布局:
在这里,你可以改变检查器所在的侧边。默认情况下,检查器显示在右侧,紧挨着 HTTP 响应。但是,这个设置允许你根据需要将其移至左侧。对于大多数测试人员来说,默认设置是合适的:
图 3.89 – 默认检查器面板布局
- 消息编辑器 请求视图:
你可以在每个请求的顶部为消息编辑器添加额外的标签。默认情况下,漂亮模式、原始模式和十六进制模式始终可用。这个设置允许你添加更多标签。对于大多数测试人员来说,默认设置是合适的:
图 3.90 – 消息编辑器请求视图
- 消息编辑器 响应视图:
在这里,你可以在每个响应的顶部为消息编辑器添加额外的标签。默认情况下,漂亮模式、原始模式、十六进制模式和渲染模式始终可用。这个设置允许你添加更多标签。对于大多数测试人员来说,默认设置是合适的:
图 3.91 – 消息编辑器响应视图
- HTTP 消息显示:
这个设置控制消息编辑器中使用的字体和字体大小。默认情况下,Burp Suite 会在请求或响应中高亮显示搜索到的值,这是一个很有用的功能。对于大多数测试人员来说,默认设置是合适的:
图 3.92 – HTTP 消息显示
- 字符集:
这个设置控制原始 HTTP 消息中使用的字符方案。默认情况下,Burp Suite 会自动识别消息头中应使用的字符集。对于大多数测试人员来说,默认设置是合适的:
图 3.93 – 字符集
- HTML 渲染:
当 HTTP 响应包含 HTML 内容时,渲染模式标签会被启用,并且点击后会以浏览器中显示的方式展示响应。默认情况下,设置允许额外的请求被发送,以便正确渲染页面。对于大多数测试人员来说,默认设置是合适的:
图 3.94 – HTML 渲染
- HTTP 消息搜索:
在每个 HTTP 消息的底部都有一个搜索框。这个设置允许你永久添加各种选项,以便查找在框中输入的搜索词。对于大多数测试人员来说,默认设置是合适的:
图 3.95 – HTTP 消息搜索
用户 | 用户界面 | 快捷键标签页
快捷键是按键组合,为操作提供了替代右键点击的方法。例如,代替右键点击请求并选择 发送到重放器,你可以使用 Ctrl + R 快捷键执行相同操作。本节中的表格允许你为 Burp Suite 中几乎任何操作配置更多快捷键:
图 3.96 – 快捷键
用户 | 用户界面 | 显示标签页
在 显示 标签页下,测试人员有以下选项:
- 外观:
该设置允许你控制用户界面的字体大小,并将主题从亮色(默认)更改为暗色:
图 3.97 – 外观
- 学习 标签页显示:
此设置允许你阻止 学习 标签页出现在 Burp Suite 工具的顶部列表中:
图 3.98 – 学习标签页显示
这是 学习 标签页的截图。你也可以通过点击 隐藏此 标签页 按钮来关闭该标签页:
图 3.99 – 学习
- 缩放:
Burp Suite 可以配置为自动调整高分辨率显示器的 DPI 缩放。对于大多数测试人员来说,默认设置已经足够:
图 3.100 – 缩放
用户 | 套件标签页
请注意 用户 | 套件 子部分影响的区域。我们将重点关注每个区域——即 REST API、更新、性能反馈 和 临时 文件位置:
图 3.101 – 用户 | 套件菜单项
用户 | 套件 | REST API 标签页
在测试 API 时,用户可以启动一个无头实例的 Burp,然后将 Burp Suite 配置为 Postman 中的代理,以捕获所有流量。以下截图显示 Burp Suite 的 REST API 默认监听器设置为在 localhost(例如 127.0.0.1)和端口 7777 上运行。
PortSwigger 强烈建议使用 API 密钥连接到 Burp Suite 监听服务,因为不使用密钥连接是不安全的。生成 API 密钥非常简单:
图 3.102 – REST API
它是如何工作的…
点击 新建 按钮并将密钥复制到剪贴板。你需要将其粘贴到 Postman 中使用。请注意,API 密钥仅在初次生成时有效,之后不可用:
图 3.103 – 将密钥复制到剪贴板
以下截图展示了如何在 Postman 中调用 Burp Suite 的 REST API。你可以看到 REST API 正在 localhost 上运行,端口为 7777,并且使用了在上一步生成的 API 密钥,该密钥位于 URL 的末尾。
在 API 调用的 JSON 正文中,你可以添加目标应用程序和默认的 Burp Suite 监听器。这些设置将捕获所有来自 Postman 的 API 流量到 Burp:
图 3.104 – Postman 设置以使用 Burp Suite REST API
还有更多…
对于捕获来自 Postman 的流量到 Burp 的更简单替代方法,配置 Postman 的设置(通过右上角的齿轮图标),并选择 代理 标签。选择 添加自定义代理配置 并填写 Burp Suite 监听器的 IP 地址和端口。默认情况下,这些值是 127.0.0.1 和 8080:
图 3.105 – 捕获 Postman API 流量到 Burp Suite 的替代选项
用户 | 套件 | 更新标签
默认情况下,当 Burp Suite 产品有更新时,设置会自动下载并提示你重启产品以使更改生效。对于大多数测试人员来说,默认设置是足够的:
图 3.106 – 更新
用户 | 套件 | 性能反馈标签
性能和调试信息可以在此设置开启时自动发送给 PortSwigger 进行进一步的故障排除:
图 3.107 – 性能反馈
用户 | 套件 | 临时文件位置标签
在 PortSwigger 需要从你的系统获取额外日志以进行故障排除时,你可以从自定义位置提供这些日志:
图 3.108 – 临时文件位置
用户 | 扩展标签
在 扩展 标签下,测试人员有以下选项:
- 启动行为:
随着你在使用 Burp Suite 的经验增加,你无疑会开始为该产品添加扩展,以扫描特定的漏洞。一些扩展可能会对网络造成极大的干扰和噪音。此设置允许你控制扩展在 Burp 启动时的行为。该行为包括重新加载和更新这些扩展:
图 3.109 – 启动行为
- Java 环境:
当使用任何用 Java 编写的扩展时,Burp Suite 要求你指定本地系统上的 JDK 位置:
图 3.110 – Java 环境
- Python 环境:
在使用任何用 Python 编写的扩展时,Burp Suite 要求你指定本地系统上的 Jython(Java 到 Python 翻译器)位置:
图 3.111 – Python 环境
- Ruby 环境:
使用任何用 Ruby 编写的扩展时,Burp Suite 要求您在本地系统中指定 JRuby(Java 到 Ruby 的翻译器)的位置:
图 3.112 – Ruby 环境
配置库选项卡
使用 Burp Suite 的扫描功能时,可以执行各种类型的扫描。默认情况下,Burp Suite 提供内置的扫描类型,但您也可以添加自定义扫描类型。Configuration library 是所有这些扫描脚本的集中存放位置:
图 3.113 – 配置库
爬行目标站点
爬虫是一种用于映射 Web 应用程序的扫描类型。此映射过程对于发现目标应用程序中的链接、文件夹和文件是必要的。在运行时,Burp Suite 会将发现的资源添加到 Target | Site map 中。
爬虫应该在扫描之前进行,因为测试人员希望在寻找漏洞之前识别出所有可能的路径和功能。Configuration library 中提供了特定于爬虫的 Burp Suite 内置脚本,如下所示:
图 3.114 – 配置库中可用的爬虫脚本
准备工作
使用在 OWASP BWA 虚拟机中找到的 OWASP Mutillidae II 应用程序,我们将配置并使用其中一个内置脚本来爬取应用程序。
如何操作…
-
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且您要么使用 Burp 的浏览器,要么在 Firefox 浏览器中启用了 FoxyProxy。
-
从 OWASP BWA 登陆页面,点击链接进入 OWASP Mutillidae II 应用程序:
图 3.115 – 从虚拟机启动页面链接到 Mutillidae II 应用程序
- 在运行任何脚本之前,我们需要设置目标范围。前往 Target | Site map,选中 mutillidae 文件夹,右键点击并选择 Add to scope:
图 3.116 – 如何将 Mutillidae 根应用程序添加到目标范围
- 系统会给出一个选项,停止将超出范围的项目发送给 Burp。为我们的目的,我们将点击 Yes 按钮:
图 3.117 – 代理历史记录日志提示
- 可选地,您可以通过点击 Filter: Hiding out of scope and not found items; hiding CSS, image and general binary content; hiding 4xx responses; hiding empty folders 来清理 Site map 区域,使其仅显示在范围内的项目:
图 3.118 – 目标过滤器 | 网站地图
- 点击过滤器:….后,你将看到一个下拉菜单出现。在这里,勾选仅显示范围内的项目框。然后,点击 Burp Suite 中的任意位置,除下拉菜单外,以使过滤器消失:
图 3.119 – 过滤器下拉菜单
- 现在我们已设置好范围,可以开始爬取和审计的过程。前往 Burp Suite 的目标标签,确保你恢复所有流量,以便它进入 Burp。查找以下消息,如果显示出来,请点击恢复按钮。如果不点击恢复按钮,网站地图将不会显示爬取过程中发现的新资产。如果完全没有看到此消息,也不用担心这个功能:
图 3.120 – 恢复任务执行以查看流量
- 前往 Burp Suite 的目标标签,右键点击mutillidae文件夹,点击扫描:
图 3.121 – 从目标 | 网站地图开始扫描配置的上下文菜单
- 一个新的弹出菜单将出现,你可以在其中配置扫描—在本例中是爬取。选择爬取单选按钮。扫描的 URL 应该已经为你填好:
图 3.122 – 在扫描类型部分选择爬取
- 在弹出的菜单中,选择左侧的扫描配置:
图 3.123 – 选择扫描配置
- 点击底部的从库中选择按钮;然后,点击模态框内的内置按钮,以显示所有包含在 Burp Suite Professional 中的扫描脚本:
图 3.124 – 如何从库中选择内置脚本
- 从提供的列表中选择一个爬取脚本。为了我们的目的,我们将选择爬取限制 – 10 分钟:
图 3.125 – 从爬取脚本列表中选择爬取限制 – 10 分钟
点击确定,以关闭扫描配置弹出菜单:
图 3.126 – 点击确定按钮关闭对话框
- 在弹出菜单中,选择左侧的应用程序登录。此功能允许您在遇到登录 HTML 表单时向爬虫提供凭证。点击新建并添加用户名admin和密码admin。完成后点击确定:
图 3.127 – 添加认证,滚动到应用程序登录部分并添加凭证
- 在弹出菜单中,选择左侧的资源池。此功能允许您为并发请求的数量配置不同的池大小。为了我们的目的,我们将使用默认的资源池。点击确定以关闭弹出菜单并开始爬行:
图 3.128 – 如果资源充足,使用默认资源池
- 转到仪表盘标签页查看我们爬虫脚本的进度。预计完成脚本所需的时间将显示:
图 3.129 – 脚本执行时,仪表盘标签页将显示正在运行的脚本及其预计时间
-
返回到目标 | 站点地图;注意现在在mutillidae文件夹下会显示附加的资源。
-
如果您希望在 10 分钟结束前停止爬虫,请点击暂停图标,或点击垃圾桶图标删除任务。在继续下一步骤前,请确保爬虫脚本未在运行:
图 3.130 – 如何暂停或删除正在运行的脚本
审计目标站点
注意
扫描器功能仅在 Burp Suite Professional 版本中可用。
Burp Suite 扫描器是一款自动化工具,用于查找应用程序运行时版本中的弱点。审计员根据应用程序的行为尝试发现安全漏洞。
Burp Suite 扫描器将识别可能导致安全漏洞识别的指示符。Burp Suite 扫描器非常可靠;然而,测试人员有责任在报告之前验证任何发现的内容。
Burp Suite 扫描器提供两种扫描模式:
- 被动扫描器:该模式分析已经通过代理的流量。被动扫描器对目标无侵入性。可能的漏洞推测是通过已捕获的流量进行分析得出的:
图 3.131 – 如何被动扫描目标应用程序
- 主动扫描器:此模式向目标发送大量包含已知攻击模式的请求。这些攻击模式旨在触发可能表明存在漏洞的行为(
portswigger.net/kb/issues
)。主动扫描器关注可能存在于客户端和服务器端的基于输入的漏洞:
图 3.132 – 如何主动扫描目标应用程序
实时爬虫和审计任务
扫描任务应在爬虫完成后进行,但它们也可以一起进行(例如,爬虫和审计)。此前,我们学习了 Burp Suite 在发现新内容时如何继续爬行。同样,随着新流量通过Proxy,被动扫描会继续识别漏洞。
当初次与目标应用程序进行交互并启用 Proxy 捕获流量时,Burp Suite 会自动运行两个任务:
-
来自 Proxy 的实时被动爬虫
-
来自 Proxy 的实时审计
这两个任务开始填充目标 | 站点地图,并识别可能的问题。你可以在仪表板标签下找到这两个任务:
图 3.133 – 内置的实时任务
由于实时审计正在运行,你会看到潜在问题出现,并伴随颜色编码和编号。以下截图显示已经识别出 11 个低(蓝色)和 6 个信息(灰色)问题:
图 3.134 – 已识别问题数量
我们可以点击查看详细信息以弹出此扫描脚本的数据部分。该区域包括详细信息、审计项、问题活动、事件日志和日志记录器:
- 实时审计任务 | 详细信息:
详细信息标签提供发现问题的总结和所执行扫描的类型:
图 3.135 – 实时任务详细视图中的详细信息标签
- 实时审计任务 | 审计项:
审计项标签提供所有审计项的列表,并指定主机、URL和扫描的运行进度:
图 3.136 – 实时任务详细视图中的审计项标签
- 实时审计任务 | 问题活动:
问题活动标签以表格形式显示所有扫描器发现的内容,包括被动和主动扫描器问题。
通过在表格中选择特定问题,可以查看消息详细信息,包括针对发现的建议以及请求和响应:
图 3.137 – 实时任务详细视图的事件活动标签页
- 实时审计任务 | 事件日志:
事件日志标签页显示了扫描过程中遇到的问题列表,按严重性排序:
图 3.138 – 实时任务详细视图的事件日志标签页
- 实时审计任务 | 日志:
日志标签页提供了扫描过程中发送的每个请求的视图。注意,在该标签页中新增了时间和开始响应计时器列。这些信息在你寻找基于时间的攻击时非常有用:
图 3.139 – 实时任务详细视图的日志标签页
Burp Suite 扫描器可以检测的所有问题都列在 portswigger.net/kb/issues
上,并且也可以在 Burp Suite 的 目标 | 问题定义 中查看:
图 3.140 – 问题定义
创建自定义扫描脚本
Burp Suite 提供了预定义的任务,用于爬取和审计。之前,我们已经了解了实时爬取和审计任务及其工作原理。然而,如果你想创建自定义扫描脚本,Burp Suite 提供了相应的机制来支持这一操作。
准备工作
以 OWASP BWA 虚拟机中的 OWASP Mutillidae II 应用作为目标,我们将创建一个具有自定义配置的扫描脚本,并将其应用于 Mutillidae。
如何进行…
- 右键点击目标应用程序,并从菜单中选择 扫描:
图 3.141 – 如何为目标应用配置扫描
- 在 新建扫描 弹出窗口中,确保选择了 爬取和审计 单选按钮,并且你的目标应用程序出现在 要扫描的 URL 文本区域。向下滚动到 扫描配置 框:
图 3.142 – 选择或使用默认的爬取和审计设置
请注意,可以选择多个预设的扫描模式。在本教程中,我们将创建一个自定义模式。请选择 使用自定义配置 单选按钮:
图 3.143 – 扫描配置
- 点击 新建… 并选择 审计:
图 3.144 – 如何创建自定义审计配置
- 在新的弹出窗口中,如果需要,可以为您的扫描脚本命名;您也可以使用默认名称。展开审计优化区域,并为审计速度选择彻底,因为这应该是发现漏洞的最佳设置。不要在更改后关闭此区域。向下滚动到修改参数位置并勾选所有提供的框,如下图所示。不要在更改后关闭此区域。如果关闭了这些区域,您的更改将会丢失。保持这些区域展开,并确保将您的新扫描配置脚本保存到库中(即,保存到库)。点击底部的保存。我们没有更改的区域对于大多数测试人员来说通常是合适的:
图 3.145 – 自定义配置的自定义设置
- 可选步骤是将凭据添加到应用程序登录部分的新扫描对话框中:
图 3.146 – 向自定义扫描添加认证
- 在保存配置并点击确定后,您会看到您的扫描脚本开始在仪表盘标签下运行。在此区域,您可以使用暂停按钮暂停扫描,使用齿轮图标更改任何配置,或完全删除扫描:
图 3.147 – 执行扫描后,仪表盘标签显示正在运行的脚本和预计完成时间
还有更多…
如果您不希望使用自定义扫描脚本,并希望使用 PortSwigger 推荐的主动扫描配置,只需右键点击您希望扫描的分支,然后选择主动扫描 此分支:
图 3.148 – 使用内置扫描配置时的替代扫描选项
报告问题
注意
报告功能仅在 Burp Suite Professional 中提供。
在 Burp Suite Professional 中,当扫描器发现潜在漏洞时,发现的漏洞将被添加到目标标签下的一个问题列表中,位于 UI 的右侧:
图 3.149 – 问题
问题通过颜色编码来指示其严重性和信心水平。带有红色感叹号的问题表示其严重性高,并且信心水平确定。
严重性或置信度较低的项目将显示为低、信息性,并且为黄色、灰色或黑色。这些项目需要手动渗透测试来验证漏洞是否存在。例如,HTML 未指定 charset是扫描器识别的潜在漏洞。这可能是 XSS 的攻击载体,也可能是误报。验证此类问题需要渗透测试人员根据经验来判断:
-
严重性等级:可用的严重性等级包括高、中、低、信息和误报。任何标记为误报的发现将不会出现在生成的报告中。误报是一种需要渗透测试人员手动设置的问题严重性等级。
-
置信度等级:可用的置信度等级包括绝对确定、确定和暂定。
准备就绪
扫描过程完成后,我们需要验证我们的发现,适当调整严重性,并生成报告。
如何操作…
- 对于此方案,在问题部分选择缺少 HttpOnly 标志的 Cookie:
图 3.150 – 需要确认的问题项
- 查看此消息的响应标签以验证该发现。在此,我们可以看到PHPSESSID cookie 未设置HttpOnly标志。因此,我们可以将严重性从低更改为中,并将置信度从确定更改为绝对确定:
图 3.151 – 确认响应中缺少 HttpOnly 标志
- 右键单击问题并通过选择设置严重性 | 中来将其严重性更改为中:
图 3.152 – 如何更改问题的严重性
- 右键单击问题并通过选择设置置信度 | 绝对确定来将其置信度更改为绝对确定:
图 3.153 – 如何更改问题的置信度
- 在运行审计脚本一段时间后,您应该在问题面板中选择多个高严重性问题:
图 3.154 – 问题面板
- 对于此方案,选择置信度和严重性最高的问题项,并将我们的中等严重性缺少 HttpOnly 标志的 Cookie问题一起包含在报告中。选中(高亮 + Shift键)此处显示的项目后,右键单击并选择报告 选定的问题:
图 3.155 – 选择的六个要包含在报告中的项目
- 点击报告选定的问题后,会弹出一个对话框,提示我们选择报告的格式。这个弹出框被称为 Burp Scanner 报告向导。
对于本食谱,保持 HTML 的默认设置。点击下一步:
图 3.156 – HTML 是 Burp Suite 报告的默认格式
-
此屏幕提示输入报告中应包含的详细信息类型。对于本食谱,保持默认设置。点击下一步。
-
此屏幕提示报告中消息的显示方式。对于本食谱,保持默认设置。点击下一步。
-
此屏幕提示选择应包含哪些类型的问题。对于本食谱,保持默认设置。点击下一步。
-
此屏幕提示选择保存报告的位置。对于本食谱,点击选择文件…,选择一个位置,并提供文件名,后缀为 .html;保持其他所有默认设置。点击下一步:
图 3.157 – 选择 Burp Suite 报告的目录和文件名
-
此屏幕显示报告已生成。点击关闭,并浏览到文件保存的位置。
-
双击文件名将报告加载到浏览器中:
图 3.158 – 生成的 Burp Suite 报告
恭喜!你已经创建了你的第一个 Burp Suite 报告!
第四章:评估认证方案
本章涵盖了一些基本的认证渗透测试用例。背景知识:认证是验证个人或物体身份声明是否真实的行为。Web 渗透测试人员必须进行关键评估,以确定目标应用程序认证机制的强度。这些测试包括用户名枚举、可猜测的账户、弱锁定机制、认证绕过、浏览器缓存漏洞和账户配置遗漏,特别是与 表现性状态转移 (REST) API 调用相关的内容。您将学习如何使用 Burp Suite 执行这些测试。
在本章中,我们将涵盖以下几个测试步骤:
-
测试账户枚举和可猜测的账户
-
测试弱锁定机制
-
测试绕过认证机制
-
测试浏览器缓存弱点
-
通过 REST API 测试账户配置过程
技术要求
要完成本章中的测试步骤,您需要以下内容:
-
OWASP 破损的网络应用程序 (BWA) (虚拟机)
-
一个 OWASP Mutillidae 链接
-
一个 GetBoo 链接
-
Burp Suite Proxy 社区版或专业版 (
portswigger.net/burp/
) -
配置为允许 Burp Suite 代理流量的 Firefox 浏览器 (
www.mozilla.org/en-US/firefox/new/
)
测试账户枚举和可猜测的账户
通过与认证机制的交互并研究响应,测试人员可能能够收集一组有效的用户名。一旦确定了有效账户,测试人员可以尝试暴力破解密码。本步骤解释了如何使用 Burp Suite Repeater 通过用户名枚举攻击收集有效用户名列表。
准备工作
使用 OWASP GetBoo 应用程序和 Burp,我们将对目标执行用户名枚举攻击。
如何操作…
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且 Burp Suite 已在您的 Firefox 浏览器中配置,以便您可以查看 OWASP BWA 应用程序:
- 从 OWASP BWA 主页,点击链接进入 GetBoo 应用程序:
图 4.1 – OWASP BWA 主页
- 点击 登录 按钮,并在登录页面尝试使用 demo 用户名和 aaaaaa 密码登录:
图 4.2 – GetBoo 登录页面
- 请注意,返回了一条消息 密码无效。从这些信息中,我们现在知道 demo 用户名有一个有效账户。让我们使用 Burp Suite Repeater 来查找更多账户:
图 4.3 – 使用有效用户名和无效密码进行登录失败后的过于详细的错误信息
- 在 Burp 的代理 | HTTP 历史标签页中,找到失败的登录尝试消息。查看响应 | 原始标签页,找到相同的冗长错误消息,密码 无效:
图 4.4 – 在 Burp 中看到的失败登录尝试
- 切换回请求 | 原始标签页,右键点击并将此请求发送到Repeater:
图 4.5 – 发送请求到 Repeater 的上下文菜单
- 转到 Burp 的Repeater标签页,在其中发送请求。点击发送按钮。注意响应中的消息 – 安全令牌 无效:
图 4.6 – 带有失败登录尝试的 Repeater 标签页
- 关于无效安全令牌的消息是由于每个请求中发送的令牌在我们在 Repeater 中反复发送相同请求时没有被刷新。因为目标应用程序期望每次 POST 请求时令牌值都会变化,我们可以在 Repeater 中构建我们的请求,绕过这个消息。让我们来学习如何让 Burp Suite 为我们更改令牌值!我们可以使用宏创建一个会话处理规则来解决这个问题:
图 4.7 – 每个 POST 请求中的令牌值必须是唯一的
- 创建带有宏的会话处理规则的第一步是点击 Burp 右上角的设置齿轮图标:
图 4.8 – 设置齿轮图标
- 在弹出窗口中,确保选中了所有配置,并且会话区域被高亮显示,如下截图所示:
图 4.9 – 所有 | 会话
- 在高亮显示会话后,进入会话处理规则区域并点击添加按钮,添加一个新规则:
图 4.10 – 创建一个新的会话处理规则,并使用宏处理令牌刷新
- 当会话处理规则编辑器区域出现时,输入RefreshToken作为新规则的名称。在规则操作中,选择运行 一个宏:
图 4.11 – 命名我们的会话处理规则并定义操作
- 当会话处理编辑器弹出窗口打开时,选择仅更新以下参数和头信息单选按钮并输入token。请不要跳过此步骤,否则规则将无法正常工作:
图 4.12 – 仅更新 token 参数设置
在同一个会话处理编辑器弹出窗口中,顶部点击添加按钮,位于选择宏下:
图 4.13 – 会话处理操作编辑器设置
- 点击添加按钮后,在选择宏下会弹出两个新窗口。在这里显示的宏录制器表格中,找到历史记录中包含demo用户名和aaaaaa密码的 POST /getboo/login.php 请求。这是你在浏览器中执行的相同请求,也是我们最初在Repeater中查看的相同请求。现在,你需要在宏录制器表格中找到它,以便让宏重播该请求:
图 4.14 – 宏录制器
这是包含 demo 和 aaaaaa 的请求:
图 4.15 – 宏录制器高亮显示登录的 POST 请求
- 在历史记录中找到 POST /getboo/login.php 请求后,选择发生在 POST 之前刚好的 GET /getboo/login.php 请求(如下面截图所示,距离 POST 请求两次):
图 4.16 – 前一个 GET 请求的宏录制器
- 这个 GET /getboo/login.php 请求之所以重要,是因为响应中的 token 值被分配到了两次请求后的 POST 请求的 token 值:
图 4.17 – 前一个 GET 响应为 token 分配了一个隐藏值
作为证据并便于理解,再次查看 POST /getboo/login.php 请求。注意,token 的值与前一个 GET 响应中的隐藏值相匹配(即ed881be5badd9b284239be84948a103a):
图 4.18 – token 值将在随后的 POST 请求中使用
- 使用这种模式,我们将创建一个宏,从 GET 响应中抓取不断变化的 token 值,并将该唯一值填充到我们在 Repeater 中等待的 POST 请求的 token 中。运行这个宏应该能解决我们当前遇到的问题,并去除显示安全 token 无效的消息。
现在,让我们构建宏!仅选择宏录制器历史记录中的 GET /getboo/login.php 请求,并点击确定:
图 4.19 – 宏录制器搜索框
- 点击确定后,您将返回到宏编辑器区域。可以随意为您的宏命名,例如TokenFromResponseMacro。确保表格中仅显示 GET /getboo/login.php请求。点击配置项:
图 4.20 – 宏编辑器 | 配置项
- 一个新的弹出窗口将出现,标题为配置宏项。我们将在响应中选择一个自定义参数。点击添加:
图 4.21 – 从响应中配置宏项的自定义参数
另一个弹出窗口将出现,您可以在其中定义自定义参数:
-
对于参数名称,输入token。
-
在底部的搜索框中输入token以查找响应中的 token 位置。
-
一旦找到 token 值,突出显示值的起始和结束。如果您正确突出显示,您应该看到开始于表达式之后和结束于分隔符的内容,如下图所示。
点击确定关闭定义自定义 参数窗口:
图 4.22 – 定义自定义参数
- 点击确定三次关闭所有弹出窗口后,您应该返回到原始的会话处理规则编辑器对话框。视图将默认显示详细信息,因此您需要选择另一个标签,范围。
在工具范围下,取消选中除Repeater工具之外的所有工具框。在URL 范围下,选择包括所有 URL。点击确定关闭会话处理规则编辑器对话框:
图 4.23 – 仅为 Repeater 分配范围
- 确保您的新会话处理规则已启用,通过确保选中框被填充:
图 4.24 – 启用新的会话处理规则
- 现在,您可以返回到Repeater并使用宏测试新的会话处理规则。在Repeater中重新发送 POST /getboo/login.php请求,用户名为demo,密码为aaaaaa。现在,您将看到消息是密码无效,而不是安全令牌无效。如果您没有看到新的消息,请回顾您创建会话处理规则和宏的步骤:
图 4.25 – 在 Repeater 中重新测试 POST 请求
- 我们不再在 Repeater 中收到安全令牌无效的消息了。太棒了!现在,我们的会话已经通过宏正确处理,让我们在 POST 请求中修改用户名,看看是否可以枚举更多的用户账户。在用户名字段中输入无效的用户名,如 joey,然后点击 发送 按钮。注意返回的消息是 用户不存在:
图 4.26 – 尝试不同的用户名以获取详细响应
- 继续尝试不同的用户并观察不同的详细消息。例如,尝试 admin。你得到了什么消息?有趣!现在,我们知道有一个有效的 admin 账户。
测试弱锁定机制
应用程序应该具备账户锁定机制,以防止暴力破解登录攻击。通常,应用程序会设定一个阈值,限制三到五次尝试。许多应用程序会在账户被锁定一段时间后,才允许再次尝试。
渗透测试人员必须测试所有登录保护机制,包括挑战问题和回答(如果存在)。
准备工作
确定应用程序是否具有适当的锁定机制。如果没有,请尝试暴力破解凭据,访问登录页面,以实现对应用程序的未授权访问。使用 OWASP Mutillidae II 应用程序,尝试使用有效的用户名但无效的密码登录五次。
如何操作…
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且已经在 Firefox 浏览器中配置了 Burp Suite,以便查看 OWASP BWA 应用程序:
-
从 OWASP BWA 登陆页面,点击链接进入 OWASP Mutillidae II 应用程序。
-
打开 Firefox 浏览器,进入 OWASP Mutillidae II 的登录界面。从顶部菜单中点击 登录。
-
在登录界面,尝试使用 admin 用户名和错误密码 aaaaaa 登录五次。注意,在这五次尝试中,应用程序的反应没有任何不同。错误信息没有变化,admin 账户也没有被锁定。这意味着登录可能容易受到暴力破解密码攻击:
图 4.27 – 暴力破解登录尝试
继续我们的测试,暴力破解登录页面,获得对应用程序的未授权访问。
- 转到 代理 | HTTP 历史 标签,查找失败的登录尝试。找到后,右键点击并选择 发送到 Intruder:
图 4.28 – HTTP 历史中的登录失败尝试及发送到 Intruder
- 进入 Burp 的入侵者 | 位置选项卡。如果出现建议的负载标记,请点击**清除 §**按钮将其移除。如果没有建议项,您可以忽略此步骤:
图 4.29 – 入侵者 | 位置选项卡
- 然后,突出显示aaaaaa的密码值并点击**添加 §**按钮:
图 4.30 – 在入侵者 | 位置选项卡中设置替换标记
-
继续进入入侵者 | 负载选项卡。许多测试人员使用字典列表在负载标记占位符内暴力破解常用密码。对于本教程,我们将输入一些常见密码,创建一个独特的负载列表。
-
在负载设置 [简单列表]部分,输入admin123字符串并点击添加按钮:
图 4.31 – 自定义负载值
- 在负载列表框中再添加一些字符串,如adminpass、welcome1和admin:
图 4.32 – 自定义负载值的最终列表
- 进入入侵者 | 设置选项卡并向下滚动到Grep - 提取部分:
图 4.33 – Grep - 提取响应中的特定字符串字面量
-
勾选从响应中提取以下项目复选框,然后点击添加按钮。弹出框将显示您用admin/aaaaaa请求进行的失败登录尝试的响应。
-
在底部的搜索框中,搜索未登录。找到匹配项后,您必须突出显示未登录以正确分配 grep 匹配:
图 4.34 – Grep 查找字符串字面量
-
如果没有正确突出显示单词,在点击确定后,您将在Grep - 提取框中看到**[无效]。如果发生这种情况,请点击移除按钮删除该条目,然后通过点击添加**按钮、执行搜索并突出显示单词来重新尝试。
-
如果您正确突出显示了单词,您应该在Grep - 提取框中看到以下内容:
图 4.35 – 选择字符串字面量以自动填充表达式的开始和结束框
- 如果您正确突出显示了单词,在点击确定关闭定义提取 grep 项目对话框后,您将在Grep - 提取文本区域看到以下表达式:
图 4.36 – 最终的 grep 规则设置
-
现在,点击设置页面右上角的开始攻击按钮。如果攻击没有开始,并且你看到恢复按钮,点击它以开始攻击。如果你没有看到恢复按钮,可以忽略此步骤。
-
弹出攻击结果表格出现,显示了你定义的请求和放置在有效负载标记位置的有效负载。请注意,生成的攻击表格显示了一个额外的列,名为ReflectedXSSExecution。这个列是我们之前设置的Grep - Extract规则的结果。
-
从这个攻击表格中,通过查看我们从Grep - Extract添加的附加列,测试人员可以轻松识别哪些请求成功暴力破解了登录页面。在这种情况下,请求2和请求4:
图 4.37 – 攻击表格
- 在攻击表格中选择请求4,并查看响应 | 呈现选项卡。你应该看到右上角有一条信息,内容为已登录管理员:admin(g0t r00t?):
图 4.38 – 攻击结果记录在会话中
- 点击右上角的X按钮关闭攻击表格。
这样,你成功地暴力破解了系统中一个有效账户的密码。攻击成功是因为该应用程序的锁定机制较弱。
测试绕过认证机制
应用程序可能存在缺陷,允许通过绕过认证措施进行未经授权的访问。绕过技术包括直接页面请求(即强制浏览),参数修改,会话 ID 预测,以及SQL 注入。
对于这个配方,我们将使用参数修改。
准备就绪
编辑经过身份验证的请求中的参数,将低权限用户提升为管理员。我们将在登录过程中使用代理 | 拦截,并操控一些 cookie 值来提升权限。一旦权限被提升,我们可以访问管理员功能,而无需知道管理员的凭证。
如何操作…
- 打开你的 Firefox 浏览器,或 Burp Suite 浏览器,点击左侧顶部菜单中的主页按钮,访问 OWASP Mutillidae II 的主页。确保你未登录该应用程序。如果已经登录,选择菜单中的注销:
图 4.39 – 确认你未登录
- 点击登录/注册链接,导航到登录页面:
图 4.40 – 未登录会话
- 转到 Burp Suite 的代理选项卡,并点击拦截已开启(开启切换)。在登录表单中输入user的用户名和user的密码:
图 4.41 – 代理 | 拦截开启
- 输入凭据后,你应该会看到请求在代理 | 拦截中被拦截。点击前进:
图 4.42 – 点击“前进”按钮,将请求发送到 web 服务器
- 继续点击前进,直到看到 GET /mutillidae/index.php 请求,如图所示。注意我们将要操作的两个 cookie – username 和 uid:
图 4.43 – 注意这两个 cookie 值,用户名和 uid
- 编辑这两个 cookie 值,将username改为admin,将uid改为1。完成后,转发请求:
图 4.44 – 操作 cookie 值以提升权限
- 转发请求后,选择代理 | 拦截已关闭(关闭切换):
图 4.45 – 代理 | 拦截已关闭
- 返回浏览器;注意你现在已以管理员身份登录。你已经将标准用户权限提升为管理员:
图 4.46 – 会话现在显示为管理员会话
它是如何工作的……
通过操作容易猜测的 cookie 值,我们可以将已认证的会话从普通用户提升为管理员。
测试浏览器缓存的弱点
浏览器缓存是为了提升性能和改善终端用户体验。然而,当用户在浏览器中输入敏感数据时,这些数据也可能被缓存到浏览器历史记录中。我们可以通过检查浏览器缓存或直接按下浏览器的后退按钮来查看这些缓存的数据。
准备工作
使用浏览器的后退按钮,判断是否缓存了登录凭据,从而允许未经授权的访问。通过检查 Burp 中的这些步骤,了解漏洞所在。
如何操作……
- 以管理员身份并使用admin密码登录 Mutillidae 应用:
图 4.47 – 以管理员身份登录
- 现在,通过点击顶部菜单中的注销按钮,退出应用程序。
图 4.48 – 注销
- 通过注意到未登录的消息,确认你已退出登录:
图 4.49 – 验证你尚未登录
- 在 Burp 的代理 | HTTP 历史区域也可以查看这些步骤。注意,注销会执行302重定向,以避免在浏览器中缓存 cookie 或凭据:
图 4.50 – 在 Proxy | HTTP 历史记录中查找登出请求
- 在 Firefox 浏览器中,点击返回按钮:
图 4.51 – 使用浏览器的返回按钮
注意,即使你没有登录,你现在已作为admin登录!这是由于浏览器中缓存的凭证以及应用程序中没有设置任何缓存控制保护所致:
图 4.52 – 浏览器缓存了会话,因此即使点击了登出按钮,我们仍然保持登录状态
- 现在,在浏览器中刷新/重新加载页面;你会看到你已成功登出。
工作原理…
当你按下浏览器的返回按钮时,Burp Suite 没有捕获到请求。这是因为返回按钮的操作仅限于浏览器上下文中。没有通过 Burp Suite 向 Web 服务器发送消息来执行此操作。这是一个重要的区别要注意。由于缺乏缓存保护,我们发现了一个漏洞,即登出操作未能销毁客户端的会话。
通过 REST API 测试账户配置过程
账户配置是建立和维护应用程序中用户账户的过程。账户配置功能通常仅限于管理员账户。渗透测试人员必须验证账户配置功能仅对拥有适当身份验证和授权的用户开放。账户配置的常见方式是通过 REST API 调用。很多时候,开发人员可能没有对用于应用程序 UI 部分的 API 调用设置相同的授权检查。
准备工作
使用 OWASP Mutillidae II 应用程序中可用的 REST API 调用,确定是否存在任何未认证的 API 调用,以及这些调用是否能配置或修改用户。
操作方法…
确保你没有登录应用程序。如果你已登录,点击顶部菜单中的登出按钮。现在,按照以下步骤操作:
- 在 Mutillidae 中,浏览到用户查找(SQL)页面,选择OWASP 2013 | A1 注入(SQL) | SQLi – 提取数据 | 用户 信息(SQL):
图 4.53 – 用户查找页面
- 在姓名和密码栏中输入user,然后点击查看账户详情。你应该看到以下截图中显示的结果。这是我们将通过 API 调用测试账户配置功能的账户:
图 4.54 – 用户账户的数据库结果
通过爬虫,Burp Suite 可以找到**/api或/rest**文件夹。这些文件夹是应用程序启用 REST API 的线索。测试者需要确定这些 API 调用可以提供哪些功能,以及这些调用是否需要身份验证。
- 对于 Mutillidae,/webservices/rest/文件夹结构通过 API 调用提供账户配置功能。通过Target | Site map查找这些文件夹:
图 4.55 – API 目录结构
- 若要直接进入 Mutillidae 中的此功能,选择Web Services | REST | SQL Injection | User Account Management:
图 4.56 – 跳转到用户账户管理文档页面
系统将展示一个描述支持的 API 调用及每个调用所需参数的屏幕。我们将此页面称为用户账户管理页面。该页面的 URL 是**/webservices/rest/ws-user-account.php**:
图 4.57 – 用户账户管理 API 文档页面
- 在这个用户账户管理API 文档页面中,注意 GET 调用部分。此页面类似于 Swagger 或其他自解释 API 页面,提供了显示单个用户或所有用户账户信息所需的格式说明:
图 4.58 – 获取账户信息的 API 说明
-
使用用户账户管理API 文档页面中的说明,我们将调用 GET API 来查看用户账户。首先,在Proxy | HTTP history中找到用户账户管理页面的调用。
-
进入Proxy | HTTP history表格,选择你最近一次访问的请求,跳转到用户账户管理页面。在历史记录中查找**/mutillidae/webservices/rest/ws-user-account.php的调用。找到后,右键点击并将此请求发送到Repeater**:
图 4.59 – 将请求发送到用户账户管理页面的 Repeater
- 在 Burp 的Repeater中,在 URL 后添加**?,然后添加一个参数名称/值对username=user**。新 URL 应为**/mutillidae/webservices/rest/ws-user-account.php?username=user**:
图 4.60 – 添加用户名参数
- 点击Send按钮——注意,我们能够获取到账户数据:
图 4.61 – 查看请求结果
- 现在,为了确定作为未认证用户是否可以看到这些数据,移除PHPSESSIONID Cookie 的值并重新发送请求。太神奇了!进行这些操作不需要认证令牌!我们刚刚发现了一个未认证的 API 调用!这是一个重大发现:
图 4.62 – 移除认证令牌;注意结果仍然返回
-
让我们看看还能对这个未认证的 API 端点做些什么。使用在用户账户管理页面提供的 SQL 注入字符串,尝试导出整个用户表。
-
在**username=**后追加以下值:
user'+union+select+concat('The+password+for+',username, '+is+',+password),mysignature+from+accounts+--+
新的 URL 应该如下所示:
/mutillidae/webservices/rest/ws-user-account.php?username=user'
+union+select+concat('The+password+for+',username,'+is+',
+password),mysignature+from+accounts+--+
- 在修改用户名参数后,点击发送按钮。你的请求应该如下所示:
图 4.63 – 在用户名参数中使用 SQL 注入攻击
- 注意,我们导出了数据库中所有的账户信息,包括所有的用户名、密码和签名!我们甚至在没有任何认证令牌的情况下导出了这些数据:
图 4.64 – 用户表的完整导出
它是如何工作的……
发现未认证的 API 端点是一个重要的测试任务,必须执行。这是一个常见问题,因为 API 在各种应用和移动应用中广泛使用。在第十章中,我们将介绍一个 Burp Suite 扩展,帮助我们更轻松地找到未认证的 API 端点。