BurpSuite-秘籍第二版-一-
BurpSuite 秘籍第二版(一)
原文:
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 版本。
随时随地,在任何设备上阅读。你可以从你喜爱的技术书籍中搜索、复制并粘贴代码到你的应用程序中。
特权不止于此,你可以获得独家的折扣、通讯和每日送达的优质免费内容。
按照以下简单步骤来获得好处:
- 扫描二维码或访问下面的链接

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 服务器可能会阻止攻击性载荷(例如,:

图 8.5 – ToolID 参数中的 XSS 负载
- 点击发送,检查返回的 JSON 响应,搜索 PenTest。请注意,我们的负载被原样返回。看起来开发人员在使用这些输入数据之前没有进行任何清理。让我们利用这个漏洞:

图 8.6 – 负载在响应中反射
-
由于我们正在处理 JSON 而不是 HTML,我们需要调整负载以匹配返回的 JSON 结构。我们将欺骗 JSON 认为负载是合法的。我们将原始的 负载修改为 "}} )%3balert(1)%3b//。
-
切换到 Burp Suite 代理 | 拦截 标签。通过点击 拦截器已开启 按钮开启 拦截器。
-
返回 Firefox,选择下拉列表中的另一个工具,并点击查找工具按钮。
-
当代理 | 拦截器暂停请求时,立即在ToolID数字后插入新的负载 "}} )%3balert(1)%3b//:

图 8.7 – 为 JSON 修改的 XSS 负载
-
点击转发按钮。通过切换到拦截器已关闭来关闭拦截器。
-
返回 Firefox 浏览器,查看弹出的警告框显示。你已经成功展示了概念验证(PoC)以证明反射型 XSS 漏洞:

图 8.8 – XSS 漏洞的证据
它是如何工作的...
由于在使用来自客户端的数据之前没有进行充分的输入清理,在这种情况下,渗透测试工具的标识符按原样反射在响应中,允许 XSS 攻击的攻击向量。
测试存储型跨站脚本攻击
存储型跨站脚本攻击发生在恶意 JavaScript 被注入到输入字段、参数或头部后,返回自 web 服务器时,在浏览器中执行,并成为页面的一部分。存储型 XSS 发生在恶意 JavaScript 被存储在数据库中,并在之后用于填充网页的显示内容。渗透测试人员需要测试所有发送到 Web 服务器的客户端值,以确定 XSS 是否可能。
准备工作
使用 OWASP Mutillidae II,我们来确定该应用程序是否能防止存储型跨站脚本攻击。
如何操作...
- 在 OWASP Mutillidae II 菜单中,选择登录,依次导航到 OWASP 2013 | A3 - 跨站脚本攻击(XSS) | 持久型(第一阶) | 添加到 你的博客:

图 8.9 – 导航到存储型 XSS 漏洞教学
- 在文本框中输入一些文字。在点击保存博客条目按钮之前,让我们尝试输入一个有效载荷:

图 8.10 – 保存您的博客条目
- 点击保存博客条目按钮后,您应该立即看到页面上存储的 JavaScript 弹出窗口。

图 8.11 – 存储型 XSS 漏洞证据
- 点击确定按钮以关闭弹出窗口。重新加载页面,您将再次看到警告弹出窗口。这是因为您的恶意脚本已成为页面的一部分。您已成功展示了存储型 XSS 漏洞的 PoC!
工作原理...
存储型或持久型 XSS 漏洞的发生是因为应用程序不仅没有对输入进行清理,而且还将输入存储在数据库中。因此,当页面重新加载并填充数据库数据时,恶意脚本会与数据一起执行。
测试 HTTP 方法篡改
HTTP 请求可以包括除了GET和POST以外的方法。作为渗透测试员,确定 Web 服务器允许哪些其他 HTTP 方法非常重要。支持其他方法可能会泄露敏感信息(例如,TRACE)或允许危险地调用应用程序代码(例如,DELETE)。让我们看看 Burp Suite 如何帮助测试 HTTP 方法篡改。
准备工作
使用 Altoro Mutual (demo.testfire.net),让我们确定应用程序是否有一个POST请求,可以将其修改为GET请求。如果可能,GET请求将会暴露查询字符串中的敏感数据。我们将先进行登录,然后映射应用程序,寻找像资金转移交易这样的有趣内容。
操作方法...
- 导航至
demo.testfire.net,点击登录按钮。

图 8.12 – Altoro Mutual 登陆页面
您已进入登录表单。

图 8.13 – Altoro Mutual 登录页面
- 登录后,使用左侧菜单导航至转账。

图 8.14 – 导航到转账页面
- 在转账页面,选择支票账户并在转账金额字段中输入金额。此时不要进行转账。

图 8.15 – 选择转账账户并输入金额
- 进入代理 | 拦截,并切换拦截为开启:

图 8.16 – 打开代理拦截
- 返回浏览器并点击转账 按钮。

图 8.17 – 点击转账按钮
- 在代理 | 拦截中,你可以通过右键点击并选择更改 请求方法,轻松将动词从POST改为GET:

图 8.18 – 将 POST 改为 GET
- 请注意,现在请求是一个GET请求,且账户号码已在查询字符串中暴露。

图 8.19 – 在 GET 查询字符串中查看敏感数据
-
点击前进按钮,并切换代理 | 拦截 已关闭。
-
请注意,转账仍然成功作为GET请求:

图 8.20 – 转账成功
它是如何工作的...
测试 HTTP 动词篡改包括使用不同的 HTTP 方法向应用程序发送请求并分析接收到的响应。在本实例中,网页开发人员允许在两个账户之间转账时使用POST和GET动词。为什么这会被发现?因为原始的POST请求将敏感数据放在请求的主体中,而GET请求则在查询字符串中暴露数据,这些数据很容易被捕获在服务器的网页日志中,并且在网络中被嗅探到。作为测试人员,你需要在登录序列和应用程序中其他涉及敏感数据的区域进行此类测试。
测试 HTTP 参数污染
HTTP 参数污染(HPP)是一种攻击,其中多个 HTTP 参数以相同的名称发送到 Web 服务器。其目的是确定应用程序是否以意外的方式响应,从而允许漏洞利用。例如,在GET请求中,可以将附加参数添加到查询字符串中,格式为:"&name=value",其中name是应用程序代码中已经知道的重复参数名。同样,也可以通过在POST请求的POST主体数据中复制参数名来执行 HPP 攻击。
准备工作
使用 OWASP Mutillidae II,来判断该应用程序是否允许 HPP 攻击。
如何操作...
- 从 OWASP Mutillidae II 菜单中,选择登录,导航到OWASP 2013 | A1 - 注入(其他) | HTTP 参数污染 | 投票问题:

图 8.21 – 转到 HTTP 参数污染课程
- 从单选按钮中选择一个工具,添加你的首字母,然后点击提交 投票按钮:

图 8.22 – 投票选择工具
- 切换到 Burp Suite Proxy | HTTP history 标签,找到您刚刚在 User Poll 页面上执行的请求。注意参数名为 choice。该参数的值是 nmap。右键单击并将该请求发送到 Repeater:

图 8.23 – 发送到重复器
-
切换到 Burp Suite Repeater,并向查询字符串中添加另一个具有相同名称的参数。我们从 User Poll 列表中选择另一个工具,并将其附加到查询字符串中,例如,&choice=tcpdump。这将添加两个选择项,&choice=nmap(原始)和 &choice=tcpdump。点击 Send 发送请求。
-
检查响应。应用程序代码接受了哪个选择?通过搜索 Your choice was 字符串可以轻松找到这个选择。显然,重复的选择参数值是应用程序代码接受的并计入 User Poll 投票中的那个:

图 8.24 – 验证您的更改是否被服务器接受
它是如何工作的...
应用程序代码在传入函数时未检查具有相同名称的多个参数。结果是,应用程序通常只会对最后一个匹配的参数进行操作。这可能导致异常行为和意外结果。
测试 SQL 注入
SQL 注入攻击涉及攻击者向数据库提供输入,这些输入在没有任何验证或清理的情况下被接收并使用。结果是泄露敏感数据、修改数据,甚至绕过认证机制。
准备工作
使用 OWASP Mutillidae II Login 页面,我们来确定应用程序是否易受 SQL 注入(SQLi)攻击。
如何操作...
- 从 OWASP Mutillidae II 菜单中,选择 Login,路径为 OWASP 2013 | A1-Injection (SQL) | SQLi – 绕过认证 | Login:

图 8.25 – 导航到 SQL 注入认证绕过课程
- 在 Login 屏幕上,在 Username 和 Password 文本框中输入无效凭据。例如,用户名为 ' or 1=1--,没有密码。点击 Login 按钮。

图 8.26 – 使用 SQLi 负载登录
- 切换到 Burp Suite Proxy | HTTP history 标签。找到包含 ' or 1=1--
的 username 参数的请求,并点击 Login 按钮。使用 Inspector 更轻松地查看 SQL 注入负载的内容。

图 8.27 – 使用 Inspector 查看您的 URL 编码负载
- 返回 Firefox 浏览器,注意您现在已作为管理员登录!

图 8.28 – 验证 SQLi 有效载荷是否有效
工作原理...
在不知晓任何凭证的情况下,你可以使用 SQL 注入有效载荷,例如 ' or 1=1--
还有更多...
我们可以重新执行这个操作,并使用来自 wfuzz 的 SQL 注入字典,通过 Burp Suite Intruder 测试 用户名 字段中的多种有效载荷。检查每次攻击的响应,查看结果表中是否成功执行了 SQL 注入,并且你已经登录到应用程序。
构造 SQL 注入有效载荷需要一些关于后端数据库和所需语法的知识。一个非常有用的资源是 pentestmonkey.net/category/cheat-sheet/sql-injection。
测试命令注入
命令注入是指攻击者试图在 HTTP 请求中调用系统命令,通常这些命令是在终端会话中执行的。许多 web 应用程序允许通过 UI 执行系统命令,通常用于故障排除。web 渗透测试人员必须测试该网页是否允许执行本应受到限制的系统命令。
准备工作
对于这个教程,你需要获取适用于 Unix 命令的 SecLists 有效载荷,适用于 Unix 或 Linux 操作系统:
github.com/danielmiessler/SecLists/blob/master/Fuzzing/UnixAttacks.fuzzdb.txt
从 GitHub 下载 SecLists 有效载荷:
github.com/danielmiessler/SecLists
使用 OWASP Mutillidae II DNS 查询页面,我们来确定该应用程序是否容易受到命令注入攻击。
如何操作...
- 在 OWASP Mutillidae II 菜单中,选择 DNS 查询,导航至 OWASP 2013 | A1-注入(其他) | 命令注入 | DNS 查询:

图 8.29 – 导航到命令注入课程
- 在 DNS 查询 页面,输入 IP 地址 127.0.0.1,然后点击 查询 DNS 按钮:

图 8.30 – 输入一个 IP 地址
-
切换到 Burp Suite 代理 | HTTP 历史记录 标签页,找到你刚才执行的请求。右键点击 发送 到 Intruder。
-
在Intruder | Positions标签中,使用Clear $按钮清除所有建议的 payload 标记。在target_host参数中,紧接在127.0.0.1 IP 地址后放置一个管道符号(|)。在管道符号后放置一个X。选中X并点击Add $按钮,将X用 payload 标记包裹起来:

图 8.31 – 在参数末尾添加替代标记,并使用管道符
- 在Intruder | Payloads标签中,点击Load按钮。浏览到你从 GitHub 下载的SecLists-master单词列表的位置。导航到UnixAttacks.fuzzdb.txt单词列表的位置,并使用以下路径填充Payload 设置 [简单列表]框:SecLists-master/Fuzzing/UnixAttacks.fuzzdb.txt:

图 8.32 – 加载单词列表
-
取消勾选Payload 编码框,在Payloads标签页面底部,然后点击Start Attack按钮。
-
允许攻击继续进行,直到达到 payload 50。注意,通过Render标签看到的响应大约在 payload 45附近。我们可以执行如id之类的命令,它将在网页上显示命令的结果:

图 8.33 – 命令注入漏洞的证据
- 我们还可以右键点击结果表中的此请求,并发送到Repeater以再次执行攻击。

图 8.34 – 发送到 Repeater
- 在Repeater中,点击Send,然后在响应中点击Render标签以查看命令注入的结果。

图 8.35 – 重复利用漏洞以查看证据
它是如何工作的...
如果未对用户输入进行定义和验证,并与系统命令的可接受列表进行匹配,就可能导致命令注入漏洞。在此情况下,应用程序代码没有限制通过 UI 访问的系统命令,允许查看并执行应受到限制的操作系统命令。
第九章:攻击客户端
客户端可用的代码会在浏览器中执行,因此需要进行测试,以确定是否存在敏感信息,或是否允许用户输入而没有服务器端验证。我们将学习如何使用 Burp Suite 执行这些测试。
本章将介绍以下配方:
-
测试点击劫持
-
测试基于 DOM 的跨站脚本攻击
-
利用 DOM Invader 测试 DOM XSS
-
测试 JavaScript 执行
-
测试 HTML 注入
-
测试客户端资源篡改
技术要求
要完成本章中的配方,您需要以下内容:
-
OWASP 异常 Web 应用程序
-
OWASP Mutillidae 链接
-
Burp Suite Proxy 社区版或专业版 (
portswigger.net/BurpSuite/)
测试点击劫持
点击劫持 也称为 UI 重定向攻击。这是一种欺骗技术,它通过诱使用户与透明的 iframe 进行交互,从而可能将未经授权的命令或敏感信息发送到攻击者控制的网站。让我们看看如何使用 Burp Clickbandit 测试网站是否容易受到点击劫持攻击。
准备工作
我们将使用 OWASP Mutillidae II 应用程序和 Burp Clickbandit 来确定该应用程序是否能防御点击劫持攻击。
如何操作...
-
导航到 OWASP Mutillidae II 的 首页。
-
切换到 Burp,然后从顶层菜单中选择 Burp Clickbandit:

图 9.1 – Clickbandit 菜单项
- 弹出框会解释该工具。点击 复制 Clickbandit 到 剪贴板 按钮:

图 9.2 – 复制代码到剪贴板
- 返回 Firefox 浏览器和 Mutillidae 的着陆页面。确保您没有登录到应用程序。按 F12 以打开开发者工具。从开发者工具菜单中选择 控制台,然后查看底部的提示:

图 9.3 – F12 开发者工具控制台提示
- 在 控制台 提示框(例如 >>)中,粘贴您复制到剪贴板的 Clickbandit 脚本:

图 9.4 – 粘贴的 Clickbandit 代码
- 粘贴脚本到提示框后,按下 Enter 键。您应该看到 Burp Clickbandit 的 记录模式。点击 开始 按钮开始:

图 9.5 – 启动 Clickbandit 记录模式
-
在应用程序出现后开始点击。点击 Mutillidae 顶部菜单中的可用链接,点击侧边菜单中的可用链接,或浏览到 Mutillidae 内的页面。一旦您点击完毕,按下 Burp Clickbandit 菜单上的完成按钮。
-
你应该注意到,Mutillidae 网页上方透明地出现了大红色方块。每个红色方块都表示可能出现恶意 iframe 的位置。

图 9.6 – 受害者网页框架
随意点击每个红色方块,你会看到下一个红色方块出现,依此类推,直到你看到信息 你已经被点击劫持!:

图 9.7 – 最终确认消息
- 为了将结果保存到文件以便重放(提供给客户作为证据),点击 保存 按钮。这样会将点击劫持 概念验证 (PoC) 保存在一个 HTML 文件中,你可以将其放入渗透测试报告中。
![图 9.8 – 保存到文件]()
图 9.8 – 保存到文件
- 点击 重置 按钮以返回到没有 Clickbandit 代码的正常应用程序:

图 9.9 – 点击重置按钮后
工作原理...
由于 Mutillidae 应用程序没有使用 X-FRAME-OPTIONS 头部设置为 DENY,因此有可能将恶意的 iframe 实例注入到 Mutillidae 网页中。这在钓鱼攻击中的登录页面尤为危险,攻击者诱使受害者将凭据输入到一个由攻击者控制的页面中。你可以增加 Clickbandit 使用的 iframe 实例的不透明度,以增强其可见性。你可以使用 Clickbandit 创建 PoC,展示漏洞如何被利用。通过将 X-FRAME-OPTIONS 头部设置为 DENY 或通过将 Content-Security-Policy 的 frame-ancestors 指令添加到白名单域中,可以保护应用程序免受点击劫持攻击。
测试基于 DOM 的跨站脚本
文档对象模型 (DOM) 是所有 HTML 网页在浏览器中捕获的树状结构表示。开发者使用 DOM 来方便地在浏览器内存储信息。作为一名网页渗透测试员,确定是否存在基于 DOM 的 跨站脚本 (XSS) 漏洞是非常重要的。
准备工作
我们将使用 OWASP Mutillidae II HTML5 网页存储练习来确定应用程序是否易受基于 DOM 的 XSS 攻击。
操作步骤...
- 转到 HTML 5 | HTML5 网页存储 | HTML5 存储:

图 9.10 – HTML5 存储课程
- 请注意通过 HTML5 网页存储 位置存储在 DOM 中的名称/值对。网页存储包括 会话 和 本地 变量。开发者使用这些存储位置方便地在用户的浏览器中存储信息:

图 9.11 – 网页存储条目
- 切换到 Burp Suite 的 Proxy | Intercept 标签。点击Intercept 是开启的按钮来开启拦截:

图 9.12 – 开启拦截
-
通过按 F5 或点击 刷新 按钮,在 Firefox 浏览器中重新加载 HTML 5 Web Storage 页面。
-
切换到 Burp Suite 的 Proxy | Intercept 标签。找到刚才刷新所生成的暂停请求。注意User-Agent 字符串被高亮显示,如下截图所示:

图 9.13 – 注意原始的用户代理值
-
用以下脚本替换前面高亮显示的User-Agent。注意有效载荷中的 XSS 注入(例如,alert()):
<script>try{var m = "";var l = window.localStorage; var s = window.sessionStorage;for(i=0;i<l.length;i++) {var lKey = l.key(i);m += lKey + "=" + l.getItem(lKey) + ";\n";};for(i=0;i<s.length;i++){var lKey = s.key(i);m += lKey + "=" + s.getItem(lKey) + ";\n";};alert(m);}catch(e){alert(e. message);}</script>
下面是有效载荷在 Proxy 拦截器中被拦截时的请求内容:

图 9.14 – 将用户代理更改为有效载荷
-
点击 前进 按钮。然后,通过点击切换按钮,将 拦截 关闭至 拦截已关闭。
-
注意弹出的警告框,显示了 DOM 存储的内容:

图 9.15 – XSS 有效载荷执行的证据
它是如何工作的...
被注入的脚本演示了 XSS 漏洞与 DOM 中存储的敏感信息结合时,攻击者如何窃取敏感数据。将敏感数据存储在网页存储中的危险在于,如果应用程序中的任何地方都可能发生 XSS,那么敏感数据可能会被提取并通过恶意的 JavaScript 有效载荷发送给攻击者。
利用 DOM Invader 测试 DOM XSS
让我们使用 PortSwigger 集成浏览器和名为 DOM Invader 的插件,覆盖客户端的更多攻击面,探测潜在的 DOM XSS 和其他弱点。
准备工作
我们将使用相同的练习、HTML5 存储和 Burp Suite 的 DOM Invader,帮助我们判断网页上是否存在任何易受攻击的目标或源。
如何操作...
- 使用 Burp Suite 浏览器,点击顶部的 DOM Invader 图标。

图 9.16 – Burp Suite 浏览器上的 DOM Invader 图标
- 选择DOM Invader标签,确保设置了DOM Invader 开启。另外,注意分配的 canary 值。这个值是随机的,如果需要,你可以自定义这个值:

图 9.17 – DOM Invader 菜单
- 在 Burp Suite 浏览器中,导航到HTML 5 存储页面:

图 9.18 – HTML 5 存储页面
- 在 Burp Suite 浏览器中按 F12 键打开开发者工具控制台。将选项卡滚动到控制台的最末尾,并选择 DOM Invader。注意:DOM Invader 仅在 Burp Suite 浏览器中可用,因此如果你看不到这个标签,说明你使用的是错误的浏览器:

图 9.19 – F12 开发者工具中的 DOM Invader 标签
- 使用 DOM Invader,点击 Inject forms 按钮。注意你的金丝雀值现在已填充到所有文本框和按钮标签中:

图 9.20 – DOM Invader 注入点中的金丝雀值
- 现在,点击 Add New 按钮,注意现在显示的是金丝雀值而不是 Add New。这是网页上的唯一按钮。

图 9.21 – 注入后
- 点击按钮后,请注意你从 DOM Invader 中获得了三个发现(漏洞),显示在顶部图标上:

图 9.22 – 带有三个发现的 DOM Invader 图标
这些信息显示在 开发者工具 控制台中,通过在 Burp Suite 浏览器中按 F12 键可以访问(你必须使用 Burp Suite 浏览器才能看到)。请寻找 DOM Invader 标签:

图 9.23 – DOM Invader 发现
DOM Invader 发现为我们提供了足够的线索,表明我们需要继续构造一个有效载荷来执行 JavaScript。DOM Invader 识别到的漏洞是 element.innerHTML(1),这帮助我们了解利用 DOM XSS 漏洞的潜力非常高。
它是如何工作的...
该网页中 innerHTML 的存在是一个 DOM XSS HTML 漏洞。innerHTML 属性接收用户输入并立即在浏览器中呈现。使用该属性非常危险,大多数开发者通常会避免使用。
还有更多...
PortSwigger 在此提供了关于 DOM Invader 及其众多功能的背景信息:portswigger.net/burp/documentation/desktop/tools/dom-invader。我们仅仅触及了 DOM Invader 在浏览器中可以执行的多种扫描功能。其他扫描功能包括 postMessage 攻击、DOM 覆写、原型污染等。
测试 JavaScript 执行
JavaScript 注入是 XSS 攻击的一个子类型,特指任意注入 JavaScript。此类漏洞可能影响浏览器中保存的敏感信息,如用户会话 cookies,或者导致页面内容的修改,使得攻击者控制的网站脚本得以执行。
准备开始
我们将使用 OWASP Mutillidae II 密码生成器 练习,来确定该应用是否容易受到 JavaScript XSS 攻击。
如何操作...
- 导航至 OWASP 2013 | A1 - 注入 (其他) | JavaScript 注入 | 密码生成器:

图 9.24 – 密码生成器教程
- 请注意,在点击 生成密码 按钮后,密码会显示出来。同时,还要注意,URL 中提供的用户名值会在网页上 原样 显示:http://192.168.56.101/mutillidae/index.php?page=password-generator.php&username=anonymous。这意味着该页面可能存在潜在的 XSS 漏洞:

图 9.25 – 生成新密码
- 切换到 Burp Suite 代理 | HTTP 历史 标签,找到与 密码生成器 页面相关的 HTTP 消息。在消息编辑器中切换到 响应 标签,并对 catch 字符串进行搜索。注意,返回的 JavaScript 中包含一个 catch 块,错误信息会显示给用户。我们将利用这个位置进行精心设计的 JavaScript 注入攻击:

图 9.26 – 注入点的 Catch 块
-
切换到 Burp Suite 代理 | 拦截 标签。通过点击 拦截已开启 按钮开启 拦截 功能。
-
在 Firefox 浏览器中通过按 F5 或点击 重新加载 按钮重新加载 密码生成器 页面。
-
切换到 Burp Suite 代理 | 拦截 标签。在请求暂停时,注意以下高亮显示的 用户名 参数值:

图 9.27 – 用户名参数
-
将上述高亮的 anonymous 值替换为以下精心设计的 JavaScript 注入脚本:
canary";}catch(e){}alert(1);try{a="
这是在 代理 拦截器中停留的请求中,负载的样子:

图 9.28 – 注入点
-
点击 转发 按钮。现在,通过点击切换按钮关闭 拦截 功能,确保 拦截已关闭。
-
注意弹出的警报。你已经成功演示了 JavaScript 注入 XSS 漏洞的存在!

图 9.29 – JavaScript 执行证据
工作原理...
注入到网页中的 JavaScript 代码与原始 catch 语句的结构匹配。通过创建一个伪造的 canary 名称,并以分号结束语句,创建了一个特别设计的 新 catch 块,其中包含恶意的 JavaScript 负载。
测试 HTML 注入
HTML 注入是将任意 HTML 代码插入到易受攻击的网页中。这类漏洞可能导致敏感信息泄露或修改页面内容,用于社会工程学攻击。
准备工作
我们将使用 OWASP Mutillidae II 的捕获数据页面来确定应用程序是否易受 HTML 注入攻击。
如何操作...
- 导航至OWASP 2013 | A1 - 注入(其他) | HTMLi 通过 Cookie 注入 | 捕获数据页面:

图 9.30 – 捕获数据页面课程
- 请注意攻击前页面的样子:

图 9.31 – 数据捕获页面
切换到 Burp Suite 的代理 | 拦截选项卡,并点击拦截已开启按钮,启用拦截。
- 当请求暂停时,记下最后一个 Cookie 的值,acgroupswitchpersist=nada:

图 9.32 – 开启拦截
-
当请求暂停时,将最后一个 Cookie 的值替换为此 HTML 注入脚本:
<h1>Sorry, please login again</h1><br/>Username<input type="text"><br/>Password<input type="text"><br/><input type="submit" value="Submit"><h1> </h1>
这是在代理拦截器中暂停的请求中的负载样子:

图 9.33 – 更改 Cookie 值为负载
-
点击前进按钮。现在,点击切换按钮关闭拦截,使拦截已关闭。
-
请注意 HTML 现在已被包含在页面中!

图 9.34 – HTML 注入证据
工作原理...
由于缺乏输入验证和输出编码,可能存在 HTML 注入漏洞。利用此漏洞的结果是插入任意 HTML 代码,这可能导致 XSS 攻击或社会工程学攻击,如前面示例中所见。
测试客户端资源操控
如果应用程序基于客户端 URL 信息或资源路径(例如 AJAX 调用、外部 JavaScript 或iframe源)执行操作,结果可能会导致客户端资源操控漏洞。该漏洞涉及攻击者控制的 URL,例如 JavaScript 中的location属性、HTTP 响应中的位置头部,或者控制重定向的POST请求体参数。此漏洞的影响可能导致 XSS 攻击。
准备工作
我们将使用 OWASP Mutillidae II 应用程序来确定是否可以操控任何在客户端暴露的 URL 参数,以及这些值的操控是否会导致应用程序行为异常。
如何操作...
- 导航至OWASP 2013 | A10 - 无效的重定向和转发 | 信用:

图 9.35 – Credits 页面
- 点击 Credits 页面上的 ISSA Kentuckiana 链接:

图 9.36 – 外部链接
- 切换到 Burp Suite 的 Proxy | HTTP history 标签,找到你对 Credits 页面发出的请求。注意到有两个查询字符串参数:page 和 forwardurl。如果我们篡改用户被重定向的 URL,会发生什么情况?

图 9.37 – 调用外部链接
-
切换到 Burp Suite 的 Proxy | Intercept 标签。点击 Intercept on 按钮以开启 Intercept。
-
再次点击 ISSA Kentuckiana 链接。当请求暂停时,注意 forwardurl 参数的当前值:

图 9.38 – 更改原始值
- 将 forwardurl 参数的值替换为
www.owasp.org,而不是原始选择的www.issa-kentuckiana.org:

图 9.39 – 改变为攻击者控制的值
- 点击 Forward 按钮。现在,通过点击切换按钮将 Intercept 关闭,状态变为 Intercept is off。注意我们被重定向到与最初点击的链接不同的站点!

图 9.40 – 重定向证据
它是如何工作的...
应用程序代码决策,例如重定向用户的地方,不应依赖客户端可用的值。这些值可能会被篡改,并修改为将用户重定向到攻击者控制的网站或执行攻击者控制的脚本。
第十章:使用 Burp Suite 宏和扩展
本章涉及两个可以独立讨论的主题,或者也可以结合起来:宏和扩展。Burp Suite 宏使渗透测试人员能够自动化事件,例如登录或读取参数,以应对潜在的错误情况。扩展,也叫插件,扩展了 Burp 的核心功能。
在本章中,我们将讨论以下内容:
-
创建会话处理宏
-
陷入“饼干罐”问题
-
添加优秀的渗透测试插件
-
通过 Add & Track Custom Issues 扩展创建新的问题
-
使用 Active Scan++ 扩展
-
使用 Burp Suite 扩展进行漏洞赏金测试
技术要求
为了完成本章中的操作,你需要以下内容:
-
OWASP 破损的 Web 应用 (BWA)
-
OWASP Mutillidae (http://<Your_VM_Assigned_IP_Address>/mutillidae)
-
GetBoo (http://<Your_VM_Assigned_IP_Address>/getboo)
-
Burp Proxy 社区版或专业版 (
portswigger.net/burp/)
创建会话处理宏
在 Burp Suite 中,项目选项 标签页允许测试人员设置会话处理规则。会话处理规则使测试人员能够指定一组与会话令牌或 跨站请求伪造 (CSRF) 令牌相关的操作,而这些操作会在发送 HTTP 请求时执行。蜘蛛和扫描器有一个默认的会话处理规则。然而,在本例中,我们将创建一个新的会话处理规则,并使用宏帮助我们在使用 Repeater 时从未经身份验证的会话创建一个已验证的会话。
准备工作
使用 OWASP Mutillidae II 应用,我们将创建一个新的 Burp Suite 会话处理规则,并通过相关的宏,在使用 Repeater 时从未经身份验证的会话创建一个已验证的会话。
如何操作...
- 进入 Mutillidae 的登录页面。使用用户名 ed 和密码 pentest 登录应用:

图 10.1 – 使用 ed/pentest 登录
- 通过点击 Logout 按钮立即退出应用,并确保应用确认你已成功注销:

图 10.2 – 注销
- 切换到 Burp Suite 的 Proxy | HTTP history 标签页。查找你刚才发送的注销请求,以及随后的未经身份验证的 GET 请求。选择未经身份验证的请求,也就是第二个 GET 请求。右键点击并将该请求发送到 Repeater,如下所示:

图 10.3 – 发送 GET 请求到 Repeater
- 切换到 Burp Suite 重复器,然后点击发送按钮。在响应的渲染标签页中,确保你收到未登录消息。我们将使用此场景构建一个会话处理规则,将未经身份验证的会话变成经过身份验证的会话,如下所示:

图 10.4 – 重复器
- 点击 Burp Suite 右上角的设置齿轮图标:

图 10.5 – 全局设置齿轮图标
- 然后,选择会话区域,点击会话处理规则部分下的添加按钮,如下所示:

图 10.6 – 添加新的会话处理规则
- 点击添加按钮后,会出现一个弹出框。为你的新规则命名,如LogInSessionRule,在规则动作下,选择运行宏,如下所示:

图 10.7 – 规则名称和动作
- 另一个弹出框出现了,这是会话处理动作编辑器对话框。在第一部分,点击选择宏下的添加按钮,如下所示:

图 10.8 – 添加新宏
- 点击添加按钮后,宏编辑器会弹出,同时弹出另一个宏录制器窗口,如下所示:

图 10.9 – 宏录制器
- 在宏录制器窗口中,找到你作为ed登录的POST请求,以及接下来的GET请求。在宏录制器窗口中高亮这两个请求,然后点击确定,如下所示:

图 10.10 – 选中的动作
- 在之前的对话框中高亮的两个请求现在出现在宏编辑器窗口中。为宏提供描述,如LogInMacro,如下所示:

图 10.11 – 为你的宏命名
- 点击配置项按钮:

图 10.12 – 配置你的宏
你需要验证用户名和密码的值是否正确。完成后,点击确定,如下所示:

图 10.13 – 登录参数设置
- 点击确定关闭宏编辑器窗口。你应该能在会话处理动作编辑器窗口中看到新创建的宏。点击确定关闭此对话框,如下所示:

图 10.14 – 关闭会话处理动作编辑器窗口
- 关闭会话处理操作编辑器窗口后,你将返回到会话处理规则编辑器窗口,此时你将看到规则操作部分已填充了你的宏名称。点击此窗口的范围标签,以定义哪个工具将使用此规则:

图 10.15 – 确定范围
- 在会话处理规则编辑器窗口的范围标签页中,取消选中其他框,只保留Repeater框选中。在URL 范围下,点击包含所有 URL单选按钮。点击确定关闭此编辑器,如下所示:

图 10.16 – 设置范围
- 现在你应该能够在会话处理规则窗口中看到新的会话处理规则,如下所示:

图 10.17 – 启用你的新规则
- 返回到之前未登录应用程序的Repeater标签页。点击发送按钮,看到你现在已作为ed登录!这意味着你的会话处理规则和相关宏起作用了:

图 10.18 – 会话处理规则和相关宏的结果
它是如何工作的...
在这个示例中,我们看到如何通过重放登录过程将一个未经身份验证的会话转换为经过身份验证的会话。创建宏使得手动步骤可以被脚本化,并分配给 Burp Suite 中的各个工具。
Burp Suite 允许测试人员配置会话处理规则,以应对工具套件可能遇到的各种条件。规则提供了在满足这些条件时需要采取的额外操作。在这个示例中,我们通过创建一个新的会话处理规则(称为宏)来解决未经身份验证的会话问题。为了演示目的,我们将该规则的范围限制为Repeater。
被困在饼干罐里
在针对应用程序进行测试时,Burp Suite 在代理和爬行过程中会捕获所有的 cookies。Burp Suite 将这些 cookies 存储在一个名为饼干罐的缓存中。该饼干罐在默认的会话处理规则中使用,并且可以在 Burp Suite 的一系列工具中共享,如Proxy、Intruder 和Repeater。在饼干罐内部,有一个历史请求表,详细列出了每个 cookie 的域和路径。可以编辑或删除饼干罐中的 cookies。
准备开始
我们将打开 Burp Suite 的饼干罐并查看其中的内容。然后,使用 OWASP GetBoo 应用程序,我们将识别新添加到 Burp Suite 饼干罐中的 cookies。
如何操作...
- 点击 Burp Suite 右上角的设置齿轮图标:

图 10.19 – 全局设置齿轮图标
然后,选择Sessions区域并进入Cookie jar部分:

图 10.20 – Cookie 罐
- 在Cookie 罐部分,点击打开 Cookie 罐按钮,如下所示:

图 10.21 – 打开 Cookie 罐
- 新的弹出框出现,显示在Proxy中捕获的所有 Cookie。注意,每个 Cookie 都有Domain、Path、Name和Value的详细信息:

图 10.22 – 每个 Cookie 的详细信息
- 在列表中选择一个 Cookie,并点击编辑 Cookie按钮。例如,我们可以将PHPSESSID Cookie 的值从随机的加密字符串修改为thisIsMyCookie,然后点击确定,如下所示:

图 10.23 – 编辑 PHPSESSID Cookie 值
- 现在值已更改,如下所示:

图 10.24 – 将 Cookie 设置为新值
- Burp Suite Cookie 罐的默认范围是Proxy。然而,您可以将范围扩展到包括其他工具。点击Repeater旁边的复选框,如下所示:

图 10.25 – 设置范围
- 现在,如果您创建一个新的会话处理规则并使用默认的 Burp Suite Cookie 罐,您将看到该 Cookie 的新值在请求中被使用。我们可以通过启用我们的LoginSessionRule会话处理规则来观察其实际效果:

图 10.26 – 启用 LoginSessionRule
- 现在,向Repeater发送未经身份验证的请求并点击发送。注意,您的 Cookie 值是thisIsMyCookie。这个技巧对于会话劫持攻击非常有用,当您窃取受害者的 Cookie 并需要确保 Cookie 值不会恢复为您的会话 Cookie 时:

图 10.27 – 规则和 Cookie 罐更改的结果
它是如何工作的...
Burp Suite Cookie 罐由会话处理规则用于处理 Cookie,当对目标应用程序执行自动化请求时。在这个实例中,我们研究了 Cookie 罐,了解了它的内容,甚至修改了一个捕获的 Cookie 的值。任何使用默认 Burp Suite Cookie 罐的后续会话处理规则都会在请求中看到修改后的值。
添加优秀的渗透测试插件
作为 Web 应用程序测试人员,你会发现一些有用的工具可以添加到你的工具库中,使得评估工作更加高效。Burp Suite 社区提供了许多出色的扩展。在本例中,我们将添加其中的几个,并解释它们如何提升评估效果。Get All Params(GAP)和 Software Vulnerability Scanner 是我们将添加到 Burp Suite 并与被动扫描器一起使用的两个插件。
注意
这两个插件都需要 Burp Suite 专业版。
准备工作
使用 OWASP Mutillidae II 应用程序,我们将添加两个有用的扩展,帮助我们在目标系统中发现更多漏洞。
操作步骤...
-
第一个扩展,GAP-Burp-Extension,可以在以下 GitHub 仓库找到:
github.com/xnl-h4ck3r/GAP-Burp-Extension。在 Linux 上安装 Git 或在 Windows 上安装 Git(gitforwindows.org/)。然后,使用 git clonegithub.com/xnl-h4ck3r/GAP-Burp-Extension.git命令,将仓库下载到本地系统。 -
下载完仓库后,进入 GAP-Burp-Extension 目录。记下 GAP.py 文件的位置。这个文件将加载到 Burp Suite 中以使用扩展:

图 10.28 – 运行 GAP 的 Python 脚本
- 请注意,在使用 GAP 扩展之前,必须先安装 Jython。要安装 Jython,请前往 扩展 | 扩展设置 图标并点击该图标:

图 10.29 – 扩展设置
- 前往 Jython 网站 (
www.jython.org/) 并下载独立版 Jython JAR 文件:

图 10.30 – 下载 Jython
- 在 Python 环境 部分设置独立版 Jython JAR 文件的位置:

图 10.31 – 配置 Jython
- 配置完成后,通过点击窗口右上角的 X 标志关闭 扩展设置 弹出窗口:

图 10.32 – 关闭设置
配置完成后,前往 Burp Suite | 扩展 标签,选择 已安装 标签。点击 添加 并将 扩展类型 的值更改为 Python。浏览到本地系统中 GAP-Burp-Extension 目录内的 GAP.py 文件所在位置。你可能还需要执行一个 Python pip 命令,在本地系统中安装 GAP 的依赖,命令如下:java -jar jython-standalone-2.7.3.jar -m pip install -r requirements.txt(来源:github.com/xnl-h4ck3r/GAP-Burp-Extension):

图 10.33 – 安装扩展
- 确保扩展已启用,方法是查看 Burp Suite 的Extensions区域中其名称旁边的复选框是否已勾选:

图 10.34 – 启用扩展
- 扩展加载并启用后,请注意,在 Burp Suite 工具菜单的顶部有一个新的GAP标签:

图 10.35 – 新的 GAP 标签
- 让我们在 Mutillidae 目标上运行 GAP。进入Target | Site map,右键单击应用程序的根目录,然后选择Extensions | GAP:

图 10.36 – 对目标调用 GAP 扩展
- 现在,选择 Burp Suite 工具顶部的GAP标签。注意 GAP 找到的潜在参数列表。我们的ToolID标识符出现在其中,正是我们之前用于利用的标识符!另外,注意到 GAP 为您找到的所有链接。这些是您可以用来拓宽漏洞寻找范围的新攻击向量:

图 10.37 – 使用 GAP 找到的结果
- 对于第二个扩展,切换到 Burp Suite 的Extensions标签。进入BApp Store子标签,找到Software Vulnerability Scanner插件:

图 10.38 – 软件漏洞扫描器扩展
- 点击右侧的Install按钮并选择扩展名称:

图 10.39 – 安装按钮
- 安装完两个插件后,进入Extensions标签,然后是Burp Suite extensions部分。确保两个插件都已启用,并且复选框内有勾选标记。还可以注意到Software Vulnerability Scanner扩展有一个新标签,如下所示:

图 10.40 – 新标签
- 进入Software Vulnerability Scanner标签,注意默认扫描规则以及提供API Token类型以加速扫描速度的选项:

图 10.41 – 软件漏洞扫描器标签内部
- 返回到Target | Site map,将 Mutillidae 主页作为我们的目标。通过右键点击并选择Passively scan this branch,进行轻量级、低侵入性的被动扫描,如下所示:

图 10.42 – 扫描目标
- 请注意Software Vulnerability Scanner产生的额外发现。Vulners插件发现了许多漏洞软件问题:

图 10.43 – 寻找扩展发现
查看第一个发现的详细信息,注意提供的与已知漏洞相关的各种链接:

图 10.44 – 显示可用漏洞的公告
工作原理...
Burp Suite 的功能可以通过 PortSwigger API 扩展,创建自定义扩展,也称为插件。在这个例子中,我们安装了两个插件,帮助识别包含已知漏洞的应用程序中的旧版本软件。
通过添加与跟踪自定义问题扩展创建新问题
尽管 Burp Suite 提供了许多常见的 Web 应用程序安全漏洞的列表,但有时你会发现一个问题并需要创建一个自定义扫描发现。这可以通过 添加与跟踪自定义问题 扩展完成。
注意
此插件需要 Burp Suite Professional 版。
准备就绪
使用 OWASP Mutillidae II 应用程序,我们将添加 添加与跟踪自定义问题 扩展,创建揭示漏洞的步骤,然后使用该扩展创建一个自定义问题。
如何操作...
- 切换到 Burp Suite 扩展 标签页。进入 BApp Store 子标签,找到标记为 添加与跟踪自定义问题 的插件。点击 安装 按钮:

图 10.45 – 添加与跟踪自定义问题扩展
- 确保扩展已加载并启用,在 扩展 | 已安装 | Burp 扩展 部分:

图 10.46 – 加载扩展
-
返回 Firefox 浏览器并浏览到 Mutillidae 的主页。
-
切换到 Burp Suite 代理 | HTTP 历史记录 标签页,找到你刚才浏览到主页时发出的请求。点击 响应 标签。注意查看冗长的 服务器 头信息,指出了 web 服务器类型和版本,以及使用的操作系统和编程语言。这些信息可以被攻击者用来指纹识别技术栈,并识别可被利用的漏洞:

图 10.47 – 创建问题
- 由于这是一个漏洞,我们需要手动创建一个新问题来捕获它并用于报告。在查看 响应 窗口时,右键点击并选择 扩展 | 添加与跟踪自定义问题 | 添加与跟踪自定义问题,如以下所示:

图 10.48 – 创建自定义问题
- 将弹出对话框。在 New Issue 选项卡中,我们可以创建一个名为 Information Leakage in Server Response 的新问题名称。将严重性更改为 Medium。请注意,扩展已经为我们复制了请求和响应在底部面板中。您可以继续在其他文本区域添加更多文字,比如问题详细信息、背景和修复方法。完成后,请点击底部的 Add & Track Custom Issue 按钮:

图 10.49 – 设置名称和严重性
- 完成后,切换回 Target | Site map,并选择 Mutillidae 的根目录。你应该能在 Issues 窗口中看到新创建的扫描问题,如下所示:

图 10.50 – 查看您添加的自定义问题
- Add & Track Custom Issues 扩展提供了一个新选项卡,允许您向内部数据库添加问题。这是一个增值功能,因此不需要在此选项卡中添加问题即可使用该工具。但是,如果您希望创建自己的自定义问题列表,则可选择此选项:

图 10.51 – 问题数据库
工作原理...
如果 Burp Suite 核心问题列表中没有某个问题,测试人员可以使用 Add & Track Custom Issues 扩展自行创建。在这个示例中,我们为服务器响应中的信息泄露创建了一个问题。
参见
想要查看 Burp 识别的所有问题定义清单,请访问 portswigger.net/kb/issues。
使用 Active Scan++ 扩展
一些扩展能帮助发现带有特定有效载荷(如 XML)的漏洞,或帮助找到隐藏的问题,比如缓存污染和 DNS 重绑定。在这个示例中,我们将添加一个名为 Active Scan++ 的主动扫描器扩展,它能帮助识别这些更专业的漏洞。
注意
此插件需要 Burp Suite 专业版。
准备工作
使用 OWASP Mutillidae II 应用程序,我们将添加 Active Scan++ 扩展,并对目标进行主动扫描。
如何操作...
- 切换到 Burp Suite 的 Extensions | BApp Store 选项卡,并选择 Active Scan++ 扩展。点击 Install 按钮安装该扩展,如下所示:

图 10.52 – Active Scan++ 扩展
-
返回 Firefox 浏览器,并浏览至 Mutillidae 主页。
-
切换到 Burp Suite 的 Target 选项卡,然后选择 Site map 子选项卡,在 mutillidae 文件夹上右键单击,并选择 Actively scan this branch,如下所示:

图 10.53 – 扫描目标
- 在主动扫描器完成后,浏览到问题窗口。记录新安装的扩展发现的任何额外问题。你可以通过查找此问题由 Burp 扩展生成:Active Scan++消息来分辨哪些问题是该扩展发现的,如下所示:

图 10.54 – 扩展中的问题
工作原理...
Burp Suite 的功能可以通过使用扩展来扩展,超越核心功能。在本教程中,我们安装了一个插件,将主动扫描器功能扩展,以帮助识别额外的问题,例如本教程中看到的任意头部注入。
使用 Burp Suite 扩展进行漏洞赏金猎取
作为漏洞赏金猎人,你将找到一些便捷的工具,帮助更轻松地识别可能的漏洞。虽然有很多工具,但在本教程中,我们将重点介绍Burp Bounty, Scan Check Builder和Auth Analyzer。
注意
Burp Bounty, Scan Check Builder需要使用 Burp Suite 专业版。
准备工作
针对漏洞赏金猎取,推荐的两个扩展可以在BApp Store子标签中找到。我们将在 Burp Suite 实例中下载并安装它们。接着,我们将演示如何使用每个扩展来发现可能的漏洞,以便获取赏金!
如何操作...
- 在 Burp Suite 的扩展 | BApp Store标签中,选择Burp Bounty, Scan Check Builder并点击安装按钮。然后,选择Auth Analyzer并点击安装按钮:

图 10.55 – 本教程中涉及的两个扩展
- 切换到扩展 | 已安装标签,确保两个扩展都已安装并启用,在Burp 扩展部分中:

图 10.56 – 扩展已安装并启用
- 注意,现有一个名为Burp Bounty Free的新工具标签。点击该标签,然后点击配置文件子标签。可以看到有多个配置文件可供选择,适用于不同类型的扫描器以及请求和响应。现在,我们将使用默认设置:

图 10.57 – Burp Bounty 免费标签
- 返回目标 | 站点地图,右键点击,选择主动扫描此分支。Burp Bounty将使用主动扫描和被动扫描(除非你暂停了它们)来寻找潜在的漏洞:

图 10.58 – 扫描目标
- 在问题面板中,查看每个扩展找到的漏洞前是否有BurpBounty关键词。该扩展提供了多个区域,供你深入挖掘潜在的弱点:

图 10.59 – 扫描结果
- 现在,让我们关注 Auth Analyzer 扩展。Auth Analyzer 帮助发现未授权的 API 端点,以及水平和垂直权限提升。注意,有一个新的工具标签,标注为 Auth Analyzer:

图 10.60 – Auth Analyzer 标签
- 返回 Mutillidae 登录页面,并以 admin 身份登录,密码为 admin。找到你的登录 POST 请求,右键点击,然后选择 扩展 | Auth Analyzer | 自动设置参数 | 创建 新会话:

图 10.61 – 向 Auth Analyzer 发送管理员请求
- 现在,注销 admin 用户。使用 ed 身份和密码 pentest 登录应用程序。右键点击第二次登录的 POST 请求,然后选择 扩展 | Auth Analyzer | 重复 请求 (1):

图 10.62 – 向 Auth Analyzer 发送常规用户请求
- 切换到 Auth Analyzer 标签,启用分析器。你应该看到一个绿色圆点而不是红色圆点,并且会显示 分析器 运行中 标签:

图 10.63 – 启用 Auth Analyzer
- 启用 Auth Analyzer 后,注意到两个登录之间的 差异 被确定了。点击 显示差异 按钮,系统将为你高亮显示差异,以便你更容易查看:

图 10.64 – 查看请求之间的差异
-
你可以使用此扩展先以更高权限的用户身份登录。然后,映射应用程序的功能。完成映射后,点击 注销 按钮。然后,再次登录,但这次以常规用户身份登录,执行映射,并使用 Auth Analyzer 来识别应用程序中任何常规用户可以访问的管理员功能区域。
-
此外,Auth Analyzer 还可以用于移除请求中的 cookies 和访问令牌。这将使你能够更快速地测试未授权的 API 端点。向 Auth Analyzer 发送测试请求后,识别你希望移除的 cookie:

图 10.65 – 移除 cookie 功能
- 然后,向网页或 API 端点发送请求,查看 Auth Analyzer 是否显示在移除 cookie 后有任何差异。以下是移除 PHPSESSID cookie 后的示例。注意,第二次请求中没有 cookie。当使用此功能时,你可以快速判断该功能是否正确使用了授权检查,或者是否存在 bug:

图 10.66 – 看出两个请求之间的差异
它是如何工作的…
为漏洞奖励寻找漏洞可能会耗费时间。Burp Bounty, Scan Check Builder 和 Auth Analyzer 扩展都可以帮助加速发现目标应用程序中的漏洞。
第十一章:实现高级话题攻击
本章涵盖了中高级话题,如 XML 外部实体(XXE)注入,JSON Web Token(JWT)攻击,服务器端请求伪造(SSRF),跨源资源共享(CORS)问题,以及 Java 反序列化攻击,同时还包括如何在 Burp Suite 中测试 GraphQL。我们将学习如何使用 Burp Suite 及其扩展来简化这些测试。
本章将介绍以下实验:
-
执行 XXE 攻击
-
处理 JWT
-
使用 Burp Suite Collaborator 确定 SSRF
-
测试 CORS
-
执行 Java 反序列化攻击
-
使用 Burp Suite 破解 GraphQL
技术要求
完成本章的实验,你需要以下内容:
-
一个 PortSwigger 账户(
portswigger.net/) -
PortSwigger Web Security Academy Labs (https://portswigger.net/web-security/all-labs) 访问,需要一个 PortSwigger 账户
-
Burp Suite 代理社区版或专业版(
portswigger.net/burp/)
执行 XXE 攻击
XXE 是一种针对解析 XML 的应用程序的漏洞。攻击者可以通过任意命令操控 XML 输入,并将这些命令作为外部实体引用嵌入 XML 结构中。然后,XML 会被一个配置不当的解析器执行,从而让攻击者获得所请求的资源。
准备工作
登录到你的 PortSwigger 账户。我们将使用一个 PortSwigger 实验室 – 实验室:利用外部实体进行 XXE 攻击以检索文件(portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files)– 来利用我们目标应用中的 XML 解析器漏洞。
如何进行...
- 登录,进入 实验室:利用外部实体进行 XXE 攻击以检索文件,点击 访问实验室 按钮开始实例。

图 11.1 – 实验课
- 加载实验室实例后,使用 Burp Suite 浏览器捕获你的流量。点击站点上的内容,并通过点击 查看 详情 按钮查看某个产品的详情。

图 11.2 – 查看详情按钮
- 在后续的详情页面中,点击描述下方的 检查 库存 按钮。

图 11.3 – 检查库存按钮
- 切换到 Burp Suite 代理 | HTTP 历史 标签,查找你刚刚提交的 POST 请求,右键点击并将请求发送到 Repeater:

图 11.4 – 发送到 Repeater
-
在 Repeater 中,在 XML 声明和根元素 stockCheck 之间添加 DOCTYPE 声明:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
同时,将 productId 元素中的数字替换为 &xxe;:

图 11.5 – XXE 注入点
- 点击 发送 按钮。请注意,响应会检索并显示本地 /etc/passwd 文件的内容:

图 11.6 – 攻击结果
工作原理...
在本食谱中,不安全的 XML 解析器接收到包含服务器上 /etc/passwd 文件的 XML 请求。由于解析器配置较弱,未对 XML 请求进行验证,因此攻击者可以自由访问该资源。
使用 JWT
随着越来越多的网站提供客户端 API 访问,JWT(JSON Web Token)已广泛用于身份验证。这些令牌包含与用户在目标网站上被授予访问权限的资源相关联的身份和声明信息。Web 渗透测试人员需要读取这些令牌并评估它们的安全性。幸运的是,Burp Suite 提供了一些便捷的插件,使得处理 JWT 变得更加容易。在本食谱中,我们将学习如何使用这些插件。
准备工作
登录到您的 PortSwigger 账户。我们将使用 Lab: JWT 身份验证绕过通过签名验证漏洞(portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-flawed-signature-verification)和 JWT Editor 扩展来利用我们目标应用中的签名漏洞。
如何操作...
- 切换到 Burp Suite Extensions | BApp Store 并安装 JWT Editor 插件:

图 11.7 – JWT Editor 扩展
- 安装扩展后,您会看到一个新的标签页,标题为 JWT Editor Keys:

图 11.8 – 新标签
- 进入 Lab: JWT 身份验证绕过通过未验证的签名,然后点击 访问实验室 按钮开始您的实例:

图 11.9 – 实验课程
- 加载实验室实例后,进入 Proxy | Intercept | Open browser 使用 Burp Suite 浏览器来捕获您的流量。

图 11.10 – 打开 Burp Suite 浏览器
- 使用提供的凭据登录应用程序:wiener/peter。

图 11.11 – 使用提供的凭据登录
- 切换到 Burp Suite Proxy | HTTP 历史 标签页。找到带有 URL /my-account 的 GET 请求。右键点击并选择 发送到 Repeater 选项。

图 11.12 – 发送到 Repeater
- 切换到 Repeater 标签页,您会看到一个新标签,标题为 JSON Web Token:

图 11.13 – Repeater 中的扩展功能
- 点击 JSON Web Token 选项卡,显示一个与
jwt.io非常相似的调试工具。此插件允许你读取声明内容并操控加密算法进行各种暴力破解测试。在此攻击中,我们将移除令牌中的签名并发送 JWT,以查看应用程序是接受还是拒绝请求。
要执行此攻击,点击攻击按钮并选择“none” 签名算法。

图 11.14 – 无算法攻击
- 注意 签名 文本框现在是空白的,签名在最后一个点后丢失,头部中的 alg 被设置为 none:

图 11.15 – 签名已被移除
- 在 Payload 文本框中,将 wiener 改为 administrator:

图 11.16 – 提升主题至管理员
- 切换到 Raw 选项卡并点击 发送 按钮,将请求发送到应用程序。注意,应用程序接受请求,你已成功登录管理员账户。

图 11.17 – 攻击证据
- 将 GET 请求从 /my-account 更改为 /admin/delete?username=carlos 来解决谜题:

图 11.18 – 最终攻击以解决问题
- 发送请求并在浏览器中查看祝贺横幅:

图 11.19 – 祝贺横幅
它是如何工作的...
JWT 编辑器 扩展帮助测试人员以更方便的方式处理 JWT 令牌,通过在 Burp Suite UI 中提供调试工具。请查看 PortSwigger Web 安全学院中的其他 JWT 实验,以获得更多使用此扩展的经验。
使用 Burp Suite Collaborator 确定 SSRF
SSRF 是一种漏洞,允许攻击者强制应用程序代表攻击者发出未经授权的请求。这些请求可以像 DNS 查询那样简单,或者像从攻击者控制的服务器发出的命令那样疯狂。
在本教程中,我们将使用 Burp Suite Collaborator 检查可用于 SSRF 请求的开放端口,然后我们将使用 Burp Intruder 来确定应用程序是否会通过 SSRF 漏洞向公共 Burp Suite Collaborator 服务器执行 DNS 查询。
准备工作
登录到你的 PortSwigger 账户。使用 PortSwigger 实验:盲 SSRF 与离带检测 (portswigger.net/web-security/ssrf/blind/lab-out-of-band-detection),我们将看到如何使用 Burp Suite Collaborator 来识别我们目标应用中的 SSRF 漏洞。
如何执行...
- 切换到 Burp Suite 的 Collaborator 标签。点击 Get started 按钮:

图 11.20 – 启动 Collaborator
- 注意,现在你可以将 Collaborator 有效负载复制到剪贴板,并且会出现一个表格,显示任何捕获到的调用。

图 11.21 – 协作者表格
- 登录,进入 Lab: Blind SSRF with out-of-band detection,然后通过点击 Access the lab 来启动实例:

图 11.22 – 实验课程
-
加载完实验室实例后,使用 Burp Suite 浏览器捕获你的流量。点击站点上的各个地方。
-
切换到 Proxy | HTTP history 标签,找到你在实例中发出的任何包含 Referer 头的请求。右键点击并将该请求发送到 Repeater:

图 11.23 – 发送到 Repeater
- 在 Repeater 中,突出显示 Referer 头的值,保留 https:// 协议。右键点击并选择 Insert Collaborator payload。此操作将用协作者实例替换 Referer 的当前值。

图 11.24 – 插入 Collaborator 有效负载
子域名是随机生成的,因此你的协作者值会与以下截图中显示的不同。

图 11.25 – Referer 头
- 在 Repeater 中,点击 Send 按钮。响应看起来是正常的。由于这是盲 SSRF,我们需要查看是否有后端系统向我们的 Collaborator 服务器实例发出了请求。

图 11.26 – 响应
- 切换到 Burp Suite 的 Collaborator 客户端,点击 Poll now 按钮,查看是否有 SSRF 攻击成功。如果有任何请求泄露到网络外部,这些请求将出现在这个表格中,并显示使用的特定协议。如果表格中出现了任何请求,你需要将该 SSRF 漏洞作为发现报告。正如这里所显示的结果,应用程序代表攻击者提供的有效负载发出了多个 DNS 查询。这意味着显示的源 IP 地址是目标应用程序后端的服务器。

图 11.27 – 投票显示交互
- 注意浏览器中的祝贺横幅。

图 11.28 – 祝贺横幅
它是如何工作的...
网络泄漏和过于宽松的应用程序参数可能允许攻击者通过各种协议代表攻击者进行未经授权的调用。在本教程中,应用程序允许 DNS 查询泄漏到本地机器外部,并连接到互联网。
另见
关于 SSRF 攻击的更多信息,请查看 PortSwigger 博客中的文章:portswigger.net/blog/cracking-the-lens-targeting-https-hidden-attack-surface。
测试 CORS
实现 HTML5 跨源资源共享(CORS)的应用程序意味着该应用程序将与位于不同源的其他域共享浏览器信息。根据设计,浏览器保护措施防止外部脚本访问浏览器中的信息。这种保护被称为 同源策略(SOP)。然而,CORS 是绕过 SOP 的一种宽松方式。如果应用程序想要与完全不同的域共享浏览器信息,它可以通过正确配置 CORS 头来实现。
Web 渗透测试人员必须确保处理 AJAX 调用的应用程序(例如 HTML5)没有配置错误的 CORS 头。让我们看看 Burp Suite 如何帮助我们识别这些配置错误。
准备工作
登录到你的 PortSwigger 账户。使用 Lab: CORS 漏洞与基本的源反射(portswigger.net/web-security/cors/lab-basic-origin-reflection-attack),我们将看到如何在目标应用程序中识别 CORS 漏洞。
如何操作...
- 进入 Lab: CORS 漏洞与基本的源反射,点击 访问实验 按钮来启动你的实例。

图 11.29 – 实验课
- 在加载完实验环境实例后,使用 Burp Suite 浏览器来捕获你的流量。使用提供的凭证登录应用程序:wiener/peter。

图 11.30 – 点击“我的账户”链接
使用提供的凭证登录应用程序。

图 11.31 – 使用提供的凭证登录
- 切换到 Burp Suite Proxy | HTTP 历史记录 标签页,查找登录后发出的 GET /accountDetails 请求。注意响应中有一个与 CORS 相关的头部,允许共享客户端秘密。

图 11.32 – 响应中的 CORS 头
将请求发送到 Repeater:

图 11.33 – 发送到 Repeater
-
通过向来自https://example.com位置的请求添加 Origin 头,来进行跨源调用:
Origin: https://example.com
以下是截图所示:

图 11.34 – 添加 Origin 头部和站点值
- 在Repeater中,点击Send并注意到一个新的与 CORS 相关的头部出现在Response中。现在Response中有两个 CORS 头部,并且Origin的值反映在Access-Control-Allow-Origin中,允许信息共享:

图 11.35 – 查看响应中反射的内容
- 点击Go to exploit server按钮:

图 11.36 – 前往漏洞服务器
- 我们需要创建一个概念验证(PoC),展示如何利用这个 CORS 漏洞来显示其影响。从 PoC 的Body部分移除Hello, world!消息:

图 11.37 – PoC 的 Body 部分在漏洞服务器中
- 将Body文本区域替换为以下有效载荷,并将
替换为你的实验室实例的值,并在前面加上https://:

图 11.38 – 替换为你的实验室 ID
- 点击Store,然后点击底部的Deliver to Victim:

图 11.39 – 存储并交付给受害者的按钮
- 点击Access log以检索受害者的 API 密钥:

图 11.40 – 点击访问日志按钮
- 浏览日志,直到找到一个不同的 IP 地址和你受害者的 API 密钥。

图 11.41 – 查看受害者 API 密钥的访问日志
- 将窃取的 API 密钥的值放入Submit solution框中:

图 11.42 – 点击提交解决方案按钮
- 请注意,你的值与此处显示的不同。

图 11.43 – 提交 API 密钥作为解决方案
- 注意浏览器中的恭喜横幅。

图 11.44 – 恭喜横幅
它是如何工作的...
在 AJAX 请求中,大多数情况下需要调用一个不在同一域名中的外部 URL。为了允许外部域接收来自用户浏览器会话的 DOM 信息,必须存在 CORS 头部,包括Access-Control-Allow-Origin: <跨域的名称>。
另见
有关 CORS 头部配置错误的更多信息,请参见此 PortSwigger 博客文章:portswigger.net/blog/exploiting-cors-misconfigurations-for-bitcoins-and-bounties。
执行 Java 反序列化攻击
序列化 是多种编程语言提供的一种机制,它允许将对象的状态保存为二进制格式。它用于提高速度和混淆。当对象从二进制格式转换回对象时,称为反序列化。如果用户输入的数据用于对象内,并且该对象之后被序列化,则可能会创建一个攻击向量,导致任意代码注入和潜在的远程代码执行。我们将研究一个 Burp Suite 扩展,它可以帮助 Web 渗透测试人员评估应用程序中的 Java 反序列化漏洞。
准备就绪
登录到您的 PortSwigger 账户。使用 实验室:利用 Apache Commons 进行 Java 反序列化(portswigger.net/web-security/deserialization/exploiting/lab-deserialization-exploiting-java-deserialization-with-apache-commons)和手工制作的序列化代码片段,我们将演示如何使用 Java 反序列化扫描器 来协助进行 Java 反序列化攻击。
您需要使用旧版 Java,如 JDK 7,并结合第三方 JAR 文件 ysoserial 来完成此操作。
这是 Java SE 7 的档案下载地址:www.oracle.com/java/technologies/javase/javase7-archive-downloads.html:
-
选择适合您环境的下载。例如,对于 Windows x64,您需要下载 jdk-7u80-windows-x64.exe 文件。
-
下载后,双击并按照提示进行安装。
注意
完成该操作后,请从您的系统中卸载此版本的 Java,因为它是一个非常不安全的版本。
- 记住 JDK 7 在本地系统中的位置。
这是 ysoserial JAR 文件下载地址: https://github.com/frohoff/ysoserial/releases/tag/v0.0.6:
-
选择 ysoserial-all.jar 文件进行下载。
-
记住 ysoserial-all.jar 文件在本地系统中的位置。
如何操作...
- 切换到 Burp Suite 扩展 | BApp 商店 并安装 Java 反序列化 扫描器 插件:

图 11.45 – 添加 Java 反序列化扫描器扩展
- 转到 实验室:利用 Apache Commons 进行 Java 反序列化,并点击 访问实验室 按钮以启动您的实例:

图 11.46 – 实验室课程
- 加载完实验室实例后,使用 Burp Suite 浏览器捕获您的流量。使用凭证 wiener/peter 登录应用程序。

图 11.47 – 点击我的账户以登录
使用提供的凭证登录应用程序。

图 11.48 – 使用提供的凭证登录
- 切换到 Burp Suite 的代理|HTTP 历史记录标签,寻找登录后的请求。注意会话 cookie 使用的是 Java 序列化。

图 11.49 – 注意序列化的 cookie 值
- 右键点击,选择扩展并将请求发送到Java 反序列化扫描器|发送请求到 DS – 手动测试**标签。

图 11.50 – 发送请求到扩展
- 注意,一个新的标签反序列化扫描器已可用,且我们的请求出现在手动测试标签中。突出显示序列化值并点击设置插入点按钮。注意,序列化值周围的替换标记看起来像美元符号。

图 11.51 – 设置插入点
设置插入点后,查看底部面板,将使用 Base64 编码选项从左下角面板移动到右侧面板,方法是点击添加按钮。另外,将使用 URL 编码选项从左侧面板添加到右侧面板。

图 11.52 – 添加 Base64 编码和 URL 编码
- 右键点击并选择发送到利用标签,将请求发送到利用标签:

图 11.53 – 发送请求到利用标签
- 为了让扩展正常工作,我们需要在配置标签中配置 Java 和ysoserial JAR 文件的路径(注意,路径值会因你的本地系统而有所不同):

图 11.54 – 配置 Java 和 ysoserial 在反序列化扫描器扩展中的设置
- 切换到反序列化扫描器|利用标签,确保底部仍然有添加的 Base64 编码按钮以及 URL 编码按钮。这两个编码应位于右下角面板。

图 11.55 – 在利用标签中,确保两个编码都在右侧面板
- 将CommonsCollections4 'rm /home/carlos/morale.txt'命令添加到java -jar ysoserial文本框中:

图 11.56 – 设置小工具和命令
- 现在你已经准备好构建有效载荷。点击底部的攻击按钮生成有效载荷。

图 11.57 – 攻击模式和有效载荷已创建
- 将修改后的请求发送到Repeater:

图 11.58 – 发送到 Repeater
点击发送按钮解决实验:

图 11.59 – 响应为 500,并带有异常
更仔细地查看在 500 响应中返回的堆栈跟踪。注意到有一个 Java 实例化错误。此消息是我们利用漏洞的证据。

图 11.60 – 500 响应中的实例化错误详细信息
- 注意浏览器中的恭喜横幅:

图 11.61 – 恭喜横幅
如何工作...
在应用程序代码直接接收用户输入并未对这些输入进行清理的情况下,攻击者可以提供任意命令。然后,该输入被序列化并在应用程序所在的操作系统上运行,从而为远程代码执行创造了攻击向量。
使用 Burp Suite 进行 GraphQL 攻击
GraphQL 是一种非常常用的 API 查询语言。使用 REST API 和 GraphQL 之间的主要区别在于调用的结构。REST API 调用需要多次请求才能完成任务,而 GraphQL 通过一次请求包含整个架构结构。GraphQL 解析器确定架构中需要查找或修改的组件。在本教程中,我们将学习如何利用名为 GraphQL Raider 的 Burp Suite 扩展来读取、修改和攻击 GraphQL 架构。
准备工作
GraphQL Raider 扩展可以在BApp Store中找到。我们将在我们的 Burp Suite 实例中下载并安装此扩展。然后,我们将学习如何在 GraphQL 端点上使用此扩展。
如何操作...
- 在 Burp Suite 的 扩展 | BApp Store 中,选择 GraphQL Raider 并点击安装按钮。

图 11.62 – GraphQL Raider 扩展
-
我们将使用包含在线 Spacex 数据的免费 GraphQL 端点。在代理 | 拦截中,点击打开浏览器按钮以打开 Burp Suite 浏览器。
-
浏览到以下网址:
spacex-production.up.railway.app/。

图 11.63 – 在线 GraphQL 应用
- 点击 Burp Suite 浏览器中的ExampleQuery按钮,执行示例查询:

图 11.64 – 运行 ExampleQuery
在 Burp Suite 的 代理 | HTTP 历史记录表中查找请求和响应。

图 11.65 – 在 Burp Suite 中查看 ExampleQuery
- 右键点击请求并发送到Repeater。

图 11.66 – 发送到 Repeater
- 在 Repeater 中,查找 GraphQL 标签,或者在 Pretty、Raw 和 Hex 标签后面找到一个向下指的箭头。注意,扩展提供了更清晰的查询,配有变量和 Injection Points 标签。

图 11.67 – 在 Repeater 中使用 GraphQL 扩展
-
在 Repeater | GraphQL 标签页中,将 ExampleQuery 替换为以下 IntrospectionQuery,以查看整个架构:
query IntrospectionQuery {__schema{queryType{name},mutationType{name},types{kind,name,description,fields( includeDeprecated:true){name,description,args{name,description,type{kind,name,ofType{kind,name,ofType{ kind,name,ofType{,kind,name,ofType{kind,name,ofType{ kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},defaultValue},type{ kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{ kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}}, isDeprecated,deprecationReason},inputFields{ name,description,type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType {kind,name, ofType{kind,name,ofType{kind,name,ofType {kind,name}}}}}}}},defaultValue},interfaces{kind,name,ofType{kind,name,ofType { kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}}, enumValues(includeDeprecated:true){name,description,isDeprecated,deprecationReason,},possibleTypes{kind,name,ofType{ kind,name,ofType{kind,name,ofType{ kind,name,ofType {kind,name,ofType{kind,name,ofType{kind,name,ofType{ kind,name}}}}}}}}},directives{name,description,locations,args{name,description,type{ kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{ kind,name,ofType{kind,name,ofType {kind,name}}}}}}}},defaultValue}}}} -
在点击 Send 之前,返回到 Repeater 中的 Raw 标签页,并将 ExampleQuery 替换为 IntrospectionQuery 作为 operationName。请注意,如果不进行此更改,查询将不会成功。

图 11.68 – 将 operationName 更改为“IntrospectionQuery”
- 点击 Send,现在你可以看到整个架构:

图 11.69 – 查看 introspection 查询和结果
它是如何工作的...
使用 GraphQL 扩展可以让你在 Burp Suite 中构建查询和变更,以测试针对支持 GraphQL 的目标应用程序的漏洞。与标准的 HTTP Pretty 或 Raw 请求视图相比,扩展提供了更清晰的请求视图。
还有更多...
GraphQL 是一个广泛的主题,有许多教程和支持文档。我们建议你从这里开始你的研究:graphql.org/。



浙公网安备 33010602011771号