BurpSuite-秘籍(全)

BurpSuite 秘籍(全)

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

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Burp Suite 是一个基于 Java 的平台,用于测试 Web 应用程序的安全性,并已被专业企业测试人员广泛采用。

Burp Suite Cookbook 包含了解决确定和探索 Web 应用程序中的漏洞挑战的配方。您将学习如何使用各种测试用例来发现复杂环境中的安全漏洞。在为您的环境配置 Burp 之后,您将使用 Burp 工具,如 Spider、Scanner、Intruder、Repeater 和 Decoder 等,来解决渗透测试人员面临的特定问题。您还将探索使用 Burp 的各种模式,并使用 Burp CLI 在 Web 上执行操作。最后,您将学习针对特定测试场景的配方,并使用最佳实践来解决它们。

通过本书,您将能够使用 Burp 来保护 Web 应用程序。

本书适合对象

如果您是安全专业人员、Web 渗透测试人员或软件开发人员,希望采用 Burp Suite 进行应用程序安全,那么本书适合您。

本书涵盖内容

第一章,“开始使用 Burp Suite”,提供了必要的设置说明,以便继续阅读本书的内容。

第二章,“了解 Burp Suite 工具”,从建立目标范围开始,并提供了 Burp Suite 中最常用工具的概述。

第三章,“使用 Burp 进行配置、爬行、扫描和报告”,帮助测试人员校准 Burp 设置,以减少对目标应用程序的侵害。

第四章,“评估身份验证方案”,涵盖了身份验证的基础知识,包括解释验证人员或对象声明的真实性。

第五章,“评估授权检查”,帮助您了解授权的基础知识,包括解释应用程序如何使用角色来确定用户功能。

第六章,“评估会话管理机制”,深入探讨了会话管理的基础知识,包括解释应用程序如何跟踪用户在网站上的活动。

第七章,“评估业务逻辑”,涵盖了业务逻辑测试的基础知识,包括对该领域中一些常见测试的解释。

第八章,“评估输入验证检查”,深入探讨了数据验证测试的基础知识,包括对该领域中一些常见测试的解释。

第九章,“攻击客户端”,帮助您了解客户端测试是如何关注在客户端上执行代码的,通常是在 Web 浏览器或浏览器插件中本地执行。学习如何使用 Burp 测试客户端上的代码执行,以确定是否存在跨站脚本(XSS)。

第十章,“使用 Burp 宏和扩展”,教会您如何使用 Burp 宏来使渗透测试人员自动化事件,如登录或响应参数读取,以克服潜在的错误情况。我们还将了解扩展作为 Burp 的附加功能。

第十一章,“实施高级主题攻击”,简要解释了 XXE 作为一个针对解析 XML 的应用程序的漏洞类别,以及 SSRF 作为一种允许攻击者代表自己强制应用程序发出未经授权请求的漏洞类别。

充分利用本书

每章的 技术要求 部分中更新了所有要求。

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。以下是一个例子:“允许攻击继续,直到达到有效载荷 50。”

代码块设置如下:

 <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> 

任何命令行输入或输出均按以下方式编写:

 user'+union+select+concat('The+password+for+',username,'+is+',+pass
word),mysignature+from+accounts+--+ 

粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种形式出现在文本中。以下是一个例子:“从下拉列表中选择一个工具,然后单击查找工具按钮。”

警告或重要说明会出现在这样的形式中。

提示和技巧会出现在这样的形式中。

章节

在本书中,您会经常看到几个标题(准备工作如何做它是如何工作的还有更多另请参阅)。

要清晰地说明如何完成食谱,请按以下部分使用:

准备工作

本节告诉您在食谱中可以期待什么,并描述如何设置任何软件或食谱所需的任何初步设置。

如何做...

本节包含遵循食谱所需的步骤。

它是如何工作的...

本节通常包括对前一节中发生的事情的详细解释。

还有更多...

本节包括有关食谱的其他信息,以使您对食谱更加了解。

另请参阅

本节提供有关食谱的其他有用信息的链接。

第一章:开始使用 Burp Suite

在本章中,我们将涵盖以下内容:

  • 下载 Burp(社区,专业版)

  • 设置 Web 应用程序渗透测试实验室

  • 在命令行或可执行文件中启动 Burp

  • 使用 Burp 监听 HTTP 流量

介绍

本章提供了设置说明,以便通过本书的材料进行学习。从下载 Burp 开始,详细内容包括两个主要的 Burp 版本及其特点。

要使用 Burp 套件,渗透测试人员需要一个目标应用程序。本章包括有关下载和安装虚拟机VM)中包含的 OWASP 应用程序的说明。这些应用程序将在整本书中作为目标易受攻击的 Web 应用程序使用。

本章还包括配置 Web 浏览器以使用Burp 代理监听器。此监听器用于捕获 Burp 和目标 Web 应用程序之间的 HTTP 流量。监听器的默认设置包括一个Internet ProtocolIP)地址,127.0.0.1,和端口号8080

最后,本章介绍了启动 Burp 的选项。这包括如何在命令行中启动 Burp,还有一个可选的无头模式,并使用可执行文件。

下载 Burp(社区,专业版)

学习本书中包含的技术的第一步是下载 Burp 套件。下载页面在这里可用(portswigger.net/burp/)。您需要决定要从以下哪个版本的 Burp 套件中下载:

  • 专业版

  • 社区

  • 企业版(未涵盖)

现在称为社区的东西曾被标记为免费版。您可能在互联网上看到两者的引用,但它们是一样的。在撰写本文时,专业版的价格为 399 美元。

为了帮助您做出决定,让我们来比较一下这两个版本。社区版提供了本书中使用的许多功能,但并非全部。例如,社区版不包括任何扫描功能。此外,使用入侵者功能时,社区版包含一些强制线程限制。社区版中没有内置的有效负载,但您可以加载自定义的有效负载。最后,一些需要专业版的 Burp 扩展显然在社区版中无法使用。

专业版具有包括被动和主动扫描器在内的所有功能。没有强制限制。PortSwigger(即编写和维护 Burp 套件的公司名称)提供了几个用于模糊测试和暴力破解的内置有效负载。专业版还可以使用与扫描器相关的 API 调用的 Burp 扩展。

在本书中,我们将使用专业版,这意味着社区版中的许多功能都可用。但是,当本书中使用专业版特有的功能时,将会有一个特殊的图标来指示。使用的图标如下:

准备就绪

为了开始我们的冒险,前往portswigger.net/burp并下载您希望使用的 Burp 套件版本。该页面提供了一个滑块,如下所示,突出了专业版和社区版的功能,让您可以进行比较:

许多读者可能会选择社区版以在购买之前熟悉该产品。

如果您选择购买或试用专业版,您将需要填写表格或付款,并随后会收到确认电子邮件。创建账户后,您可以登录并从我们账户中提供的链接进行下载。

软件工具要求

要完成这个步骤,您将需要以下内容:

如何做...

在决定所需的版本后,您有两种安装选项,包括可执行文件或普通的 JAR 文件。可执行文件仅适用于 Windows,并提供 32 位或 64 位版本。普通的 JAR 文件适用于 Windows、macOS 和 Linux。

Windows 可执行文件是独立的,会在程序列表中创建图标。但是,普通的 JAR 文件需要您的平台预先安装 Java(www.java.com/en/download/)。您可以选择当前版本的 Java(JRE 或 JDK),所以可以随意选择最新版本:

建立一个网络应用渗透实验室

Broken Web ApplicationBWA)是一个 OWASP 项目,提供了一个自包含的虚拟机,其中包含各种已知漏洞的应用程序。该虚拟机中的应用程序使学生能够学习有关网络应用程序安全性,练习和观察网络攻击,并利用诸如 Burp 之类的渗透工具。

为了按照本书中显示的示例进行操作,我们将利用 OWASP 的 BWA 虚拟机。在撰写本文时,OWASP BWA 虚拟机可以从sourceforge.net/projects/owaspbwa/files/下载。

准备工作

我们将下载 OWASP BWA 虚拟机以及支持工具来创建我们的网络应用渗透实验室。

软件工具要求

要完成这个示例,您需要以下内容:

如何做...

对于这个示例,您需要下载 OWASP BWA 虚拟机,并通过以下步骤进行安装:

  1. 点击前面提供的 OWASP BWA VM 的最新版本下载链接,并解压文件OWASP_Broken_Web_Apps_VM_1.2.7z

  2. 您将看到以下几个文件的列表:

  1. 所有显示的文件扩展名都表明该虚拟机可以导入到 Oracle VirtualBox 或 VMware Player/Workstation 中。为了设置本书中的网络应用渗透实验室,我们将使用 Oracle VirtualBox。

  2. 记下OWASP Broken Web Apps-cl1.vmdk文件。打开 VirtualBox 管理器(即 Oracle VM VirtualBox 程序)。

  3. 在 VirtualBox 管理器屏幕上,从顶部菜单中选择 Machine | New,然后为机器命名OWASP BWA

  4. 将类型设置为 Linux,版本设置为 Ubuntu(64 位),然后点击下一步,如下所示:

  1. 下一个屏幕允许您调整 RAM 或按建议保持不变。点击下一步。

  2. 在下一个屏幕上,选择使用现有的虚拟硬盘文件。

  3. 使用右侧的文件夹图标选择从提取的列表中的OWASP Broken Web Apps-cl1.vmdk文件,然后点击创建,如下所示:

  1. 您的虚拟机现在已加载到 VirtualBox 管理器中。让我们进行一些小的调整。突出显示OWASP BWA条目,然后从顶部菜单中选择设置。

  2. 在左侧窗格中选择网络部分,然后更改为仅主机适配器。点击确定。

  1. 现在让我们启动虚拟机。右键单击,然后选择启动|正常启动。

  1. 等待 Linux 系统完全启动,这可能需要几分钟。启动过程完成后,您应该看到以下屏幕。但是,显示的 IP 地址将对您的机器有所不同:

  1. 此屏幕上显示的信息标识了您可以访问运行在虚拟机上的易受攻击的 Web 应用程序的 URL。例如,在上一张屏幕截图中,URL 是http://192.168.56.101/。您将收到一个用于管理虚拟机的提示,但此时无需登录。

  2. 在您的主机系统上打开 Firefox 浏览器,而不是在虚拟机中。使用主机机器上的 Firefox 浏览器,输入提供的 URL(例如http://192.168.56.101/),其中 IP 地址特定于您的机器。

  3. 在浏览器中,您将看到一个包含指向易受攻击的 Web 应用程序链接的索引页面。这些应用程序将在本书中用作目标:

工作原理

利用 OWASP 创建的定制虚拟机,我们可以快速设置一个包含有意义地易受攻击的应用程序的 Web 应用程序渗透测试实验室,我们可以在本书中的练习中将其用作合法目标。

在命令行或作为可执行文件启动 Burp

对于非 Windows 用户或选择普通 JAR 文件选项的 Windows 用户,每次运行 Burp 时都需要在命令行上启动。因此,您需要一个特定的 Java 命令来执行此操作。

在某些情况下,例如自动化脚本,您可能希望在命令行中调用 Burp 作为 shell 脚本中的一项。此外,您可能希望在没有图形用户界面(GUI)的情况下运行 Burp,即所谓的无头模式。本节描述了如何执行这些任务。

操作步骤如下...

我们将回顾启动 Burp Suite 产品所需的命令和操作。

  1. 在 Windows 中启动 Burp,从下载的.exe文件运行安装程序后,双击桌面上的图标或从程序列表中选择它:

使用普通的 JAR 文件时,可执行文件java后面跟着-jar选项,然后是下载的 JAR 文件的名称。

  1. 在命令行上启动 Burp(最小化)并使用普通的 JAR 文件(必须先安装 Java):

如果您希望更多地控制堆大小设置(即为程序分配的内存量),可以修改java命令。

  1. java可执行文件后面跟着-jar,然后是内存分配。在这种情况下,分配了 2GB(即2g)用于随机存取内存(RAM),然后是 JAR 文件的名称。如果出现无法分配那么多内存的错误,请将分配量降低到 1024MB(即1024m)。

  2. 在命令行上启动 Burp(优化)并使用普通的 JAR 文件(必须先安装 Java):

  1. 可以在命令行上启动 Burp 并以无头模式运行。无头模式意味着在没有 GUI 的情况下运行 Burp。

出于本书的目的,我们不会以无头模式运行 Burp,因为我们是通过 GUI 学习的。但是,您将来可能需要这些信息,这就是为什么它在这里呈现的原因。

  1. 在命令行上启动 Burp 以无头模式运行,并使用普通的 JAR 文件(必须先安装 Java):

请注意,在-jar选项之后并在 JAR 文件的名称之前,立即放置参数-Djava.awt.headless=true

  1. 如果成功,您应该看到以下内容:

按下Ctrl + CCtrl + Z停止该进程。

  1. 可以为无头模式命令提供一个配置文件,用于自定义代理侦听器所在的端口号和 IP 地址。

请参阅 PortSwigger 的支持页面,了解有关此主题的更多信息:support.portswigger.net/customer/portal/questions/16805563-burp-command-line

  1. 在描述的每个启动场景中,您应该会看到一个启动屏幕。启动屏幕标签将与您决定下载的版本匹配,无论是专业版还是社区版。

  2. 您可能会收到更新版本的提示;如果愿意,可以随意进行更新。不断添加新功能到 Burp 中,以帮助您发现漏洞,因此升级应用程序是一个好主意。如果适用,选择立即更新。

  3. 接下来,您将看到一个对话框,询问有关项目文件和配置:

  1. 如果您使用的是社区版,您只能创建一个临时项目。如果您使用的是专业版,请在适合您查找的位置创建一个新项目并将其保存在磁盘上。然后单击“下一步”。

  2. 随后的启动屏幕会询问您想要使用的配置。在这一点上,我们还没有任何配置,所以选择使用 Burp 默认值。随着您阅读本书的进展,您可能希望保存配置设置,并在将来从此启动屏幕加载它们,如下所示:

  1. 最后,我们准备好单击“启动 Burp”。

工作原理...

使用普通的 JAR 文件或 Windows 可执行文件,您可以启动 Burp 以启动代理监听器来捕获 HTTP 流量。Burp 提供临时或永久的项目文件,以保存套件中执行的活动。

使用 Burp 监听 HTTP 流量

Burp 被描述为一个拦截代理。这意味着 Burp 位于用户的 Web 浏览器和应用程序的 Web 服务器之间,并拦截或捕获它们之间流动的所有流量。这种行为通常被称为代理服务

渗透测试人员使用拦截代理来捕获流动在 Web 浏览器和 Web 应用程序之间的流量,以进行分析和操作。例如,测试人员可以暂停任何 HTTP 请求,从而允许在将请求发送到 Web 服务器之前篡改参数。

拦截代理,如 Burp,允许测试人员拦截 HTTP 请求和 HTTP 响应。这使测试人员能够观察 Web 应用程序在不同条件下的行为。正如我们将看到的,有时行为与原始开发人员的预期不符。

为了看到 Burp 套件的实际操作,我们需要配置我们的 Firefox 浏览器的网络设置,指向我们运行的 Burp 实例。这使 Burp 能够捕获浏览器和目标 Web 应用程序之间流动的所有 HTTP 流量。

准备就绪

我们将配置 Firefox 浏览器,允许 Burp 监听浏览器和 OWASP BWA VM 之间流动的所有 HTTP 流量。这将允许 Burp 中的代理服务捕获用于测试目的的流量。

PortSwigger 网站上提供了有关此主题的说明(support.portswigger.net/customer/portal/articles/1783066-configuring-firefox-to-work-with-burp),我们也将在下面的步骤中逐步介绍该过程。

操作步骤...

以下是您可以通过的步骤,使用 Burp 监听所有 HTTP 流量:

  1. 打开 Firefox 浏览器并转到选项。

  2. 在“常规”选项卡中,向下滚动到“网络代理”部分,然后单击“设置”。

  3. 在“连接设置”中,选择“手动代理配置”,并输入 IP 地址127.0.0.1和端口8080。选择“为所有协议使用此代理服务器”复选框:

  4. 确保“不使用代理”文本框为空,如下图所示,然后单击“确定”:

  1. 在 OWASP BWA VM 在后台运行并使用 Firefox 浏览到特定于您的机器的 URL(即在 VirtualBox 中 Linux VM 上显示的 IP 地址)时,单击重新加载按钮(圆圈中的箭头)以查看在 Burp 中捕获的流量。

  2. 如果您没有看到任何流量,请检查代理拦截是否阻止了请求。如果标记为“拦截”的按钮处于按下状态,如下面的屏幕截图所示,则再次单击该按钮以禁用拦截。这样做后,流量应该自由地流入 Burp,如下所示:

在下面的 Proxy | 拦截按钮被禁用:

  1. 如果一切正常,您将在目标|站点地图选项卡上看到类似于以下屏幕截图所示的流量。当然,您的 IP 地址将不同,并且您的站点地图中可能会显示更多项目。恭喜!您现在已经让 Burp 监听您浏览器的所有流量了!

工作原理...

Burp 代理服务正在监听127.0.0.1端口8080。这些设置中的任何一个都可以更改为监听替代 IP 地址或端口号。但是,为了学习的目的,我们将使用默认设置。

第二章:了解 Burp Suite 工具

在本章中,我们将介绍以下内容:

  • 设置目标站点地图

  • 了解消息编辑器

  • 使用重复器进行重复

  • 使用解码器进行解码

  • 使用入侵者进行入侵

介绍

本章概述了 Burp Suite 中最常用的工具。该章节首先在目标站点地图中建立目标范围。然后,介绍消息编辑器。接下来,将使用OWASP Mutillidae II进行一些实际操作,以熟悉代理、重复器、解码器和入侵者。

软件工具要求

要完成本章的实际操作,您需要以下内容:

设置目标站点地图

现在我们的浏览器、Burp 和 OWASP BWA 虚拟机之间有流量流动,我们可以开始设置我们测试的范围。对于本教程,我们将使用 OWASP BWA VM 中提供的 OWASP Mutillidae II 链接(http://<Your_VM_Assigned_IP_Address>/mutillidae/)作为我们的目标应用程序。

更仔细地查看目标选项卡,您会注意到有两个可用的子选项卡:站点地图和范围。从浏览器、Burp 和 Web 服务器之间的初始代理设置开始,您现在应该在目标|站点地图选项卡中看到一些 URL、文件夹和文件。您可能会发现信息量很大,但为我们的项目设置范围将有助于更好地集中我们的注意力。

准备工作

使用目标|站点地图和目标|范围选项卡,我们将为 mutillidae(http://<Your_VM_Assigned_IP_Address>/mutillidae/)分配 URL 作为范围。

如何做...

执行以下步骤设置目标站点地图:

  1. 搜索文件夹mutillidae,右键单击“添加到范围”。注意目标|范围子选项卡的简要高亮显示,如下所示:

  1. 将文件夹mutillidae添加到您的范围后,您可能会看到一个代理历史记录对话框,如下所示。您可以通过单击“是”来避免收集超出范围的消息。或者,您可以选择继续使代理 HTTP 历史表收集通过 Burp 传递的任何消息,即使这些消息超出了您已识别的范围。对于我们的目的,我们将选择

  1. 切换到目标|范围选项卡,您现在应该在包含范围表中看到 OWASP Mutillidae II 的完整 URL,如下所示:

它是如何工作的...

消息编辑器显示通过代理侦听器流经的任何 HTTP 消息的详细信息。设置代理以捕获 HTTP 流量后,如在目标|站点地图和 Burp 代理|HTTP 历史选项卡中所见,您可以选择任何单个消息以显示消息编辑器。每个编辑器都包含消息的请求和响应方面,只要消息通过 Burp 正确代理。

了解消息编辑器

在 Burp Suite 中几乎每个显示 HTTP 消息的工具和选项卡中,您都会看到一个标识请求和响应的编辑器。这通常被称为消息编辑器。消息编辑器允许查看和编辑具有特殊功能的 HTTP 请求和响应。

消息编辑器中有多个子选项卡。请求消息的子选项卡至少包括以下内容:

  • 原始

  • 标头

  • 十六进制

响应消息的子选项卡包括以下内容:

  • 原始

  • 标头

  • 十六进制

  • HTML(有时)

  • 渲染(有时)

原始选项卡以原始 HTTP 形式显示消息。标头选项卡以表格格式显示 HTTP 标头参数。这些参数是可编辑的,并且可以在工具(如代理和重复器)的表格中添加、删除或修改列。

对于包含参数或 cookie 的请求,参数选项卡是存在的。参数是可编辑的,并且可以在工具(如代理和 Repeater)中的表格中添加、删除或修改列。

最后,还有十六进制选项卡,以十六进制格式呈现消息;实质上是一个十六进制编辑器。您可以在工具(如代理和 Repeater)中编辑单个字节,但这些值必须以两位十六进制形式给出,从 00 到 FF。

准备工作

让我们探索 Burp 中捕获的每个请求和响应的消息编辑器中可用的多个选项卡。

操作步骤...

确保您的浏览器、Burp 和 OWASP BWA 虚拟机之间有流量流动。

  1. 查看目标 | 站点地图选项卡,注意消息编辑器部分:

  1. 查看请求时,请注意可用的子选项卡至少包括原始、标头和十六进制。然而,在包含参数或 cookie 的请求的情况下,参数子选项卡也是可用的:

  1. 消息的另一侧是响应选项卡,包括原始标头十六进制子选项卡,有时还包括HTML渲染。这些是提供给 HTTP 响应的各种格式。如果内容是 HTML,那么选项卡将出现。同样,渲染选项卡使 HTML 显示为在浏览器中呈现的样子,但不执行任何 JavaScript:

使用 Repeater 重复

Repeater 允许对请求进行轻微更改或调整,并显示在左侧窗口中。Go按钮允许重新发出请求,并在右侧窗口中显示响应。

与您的 HTTP 请求相关的详细信息包括标准的消息编辑器详细信息,如原始参数(对于带有参数或 cookie 的请求),标头十六进制

与 HTTP 响应相关的详细信息包括标准的消息编辑器详细信息,包括原始标头十六进制,有时还包括HTML渲染

在每个面板的底部都有一个搜索文本框,允许测试人员快速找到消息中存在的值。

准备工作

Repeater 允许您手动修改并重新发出单个 HTTP 请求,分析您收到的响应。

操作步骤...

  1. 目标 | 站点地图或从代理 | HTTP 历史选项卡(如下截图所示)中,右键单击消息,然后选择发送到 Repeater

  1. 切换到Repeater选项卡。注意HTTP 请求已准备好供测试人员调整参数,然后通过Go按钮将请求发送到应用程序。

注意每个面板底部的搜索框:

我们将在本书中经常使用 Repeater。本章只是对 Repeater 的介绍,以及了解其目的。

使用解码器进行解码

Burp 解码器是一个工具,允许测试人员将原始数据转换为编码数据,或者将编码数据转换回纯文本。解码器支持包括 URL 编码、HTML 编码、Base64 编码、二进制代码、哈希数据等在内的多种格式。解码器还包括内置的十六进制编辑器。

准备工作

随着网络渗透测试的进行,测试人员可能会遇到编码值。Burp 通过允许测试人员将编码值发送到解码器并尝试各种可用的解码功能来简化解码过程。

操作步骤...

让我们尝试解码在 OWASP Mutillidae II 应用程序中找到的会话令牌 PHPSESSID 的值。当用户最初浏览到 URL(http://<Your_VM_Assigned_IP_Address>/mutillidae/)时,该用户将被分配一个 PHPSESSID cookie。PHPSESSID 值似乎被加密,然后包裹在 base 64 编码中。使用解码器,我们可以解开该值。

  1. 浏览到http://<Your_VM_Assigned_IP_Address>/mutillidae/应用程序。

  2. 代理 | HTTP 历史选项卡中找到您刚刚从浏览器生成的 HTTP 请求(如下一张截图所示)。突出显示 PHPSESSID 值,而不是参数名称,右键单击,并选择发送到解码器

  1. 解码器选项卡中,在解码为...下拉菜单中,选择Base 64。注意结果在Hex编辑器中查看并且已加密:

在这个示例中,我们无法进一步进行。我们可以确认值确实被包裹在 Base 64 中。然而,解包的值是加密的。本示例的目的是向您展示如何使用解码器来操作编码的值。

使用 Burp Intruder 进行攻击

Burp Intruder 允许测试人员对 HTTP 消息的特定部分进行暴力破解或模糊测试,使用定制的负载。

为了正确设置 Intruder 中的定制攻击,测试人员需要使用Intruder的四个子选项卡中提供的设置:

准备工作

测试人员可能希望在消息中模糊测试或暴力破解参数值。Burp Intruder 通过提供各种入侵者攻击样式、负载和选项来简化这个过程。

操作步骤...

  1. 浏览到 Mutillidae 的登录界面,并尝试登录应用程序。例如,输入用户名admin和密码adminpass

  2. 代理 | HTTP 历史选项卡中找到登录尝试。您的请求编号(即左侧的#标志)将与下面显示的不同。选择捕获您尝试登录的消息。

  3. 当登录尝试消息在HTTP 历史表中被突出显示时,右键单击请求选项卡,并选择发送到 Intruder

目标

Intruder 的目标选项卡定义了您的目标 Web 应用程序。这些设置由 Burp 预先为您填充:

位置

位置选项卡标识出负载 | 位置部分中的负载标记的位置。对于我们的目的,从右侧菜单中点击清除§(即负载标记)。使用鼠标手动选择密码字段。现在点击右侧菜单中的添加§按钮。您应该看到负载标记包裹在密码字段周围,如下所示:

负载

位置选项卡之后是负载选项卡。负载选项卡标识出您希望插入到上一个选项卡中标识的位置的单词列表值或数字。负载选项卡中有几个部分,包括负载集负载选项负载处理负载编码

负载集

负载集允许设置负载的数量和类型。对于我们的目的,我们将使用 Sniper 的默认设置,允许我们使用一个负载类型简单列表的负载:

负载选项

负载选项部分,测试人员可以配置自定义负载或从文件中加载预配置的负载。

为了我们的目的,我们将向我们的负载添加一个值。在文本框中输入admin,然后单击添加按钮来创建我们的自定义负载:

负载处理

负载处理在配置特殊规则用于替换负载标记位置时非常有用。对于这个示例,我们不需要任何特殊的负载处理规则:

负载编码

负载编码是在将请求发送到 Web 服务器之前应用于负载值的。许多 Web 服务器可能会阻止攻击性的负载(例如<script>标签),因此编码功能是绕过任何黑名单阻止的手段。

出于本示例的目的,保持默认框被选中:

选项

最后,Intruder | 选项选项卡提供了攻击表的自定义设置,特别是与捕获的响应相关的特定错误消息。Intruder | 选项选项卡中有几个部分,包括请求头请求引擎攻击结果Grep-MatchGrep-ExtractGrep - Payloads重定向

请求头

请求头提供了在 Intruder 运行攻击时特定于头部参数的配置。为了这个食谱的目的,保持默认复选框选中:

请求引擎

请求引擎应该被修改,如果测试人员希望在运行 Intruder 时在网络上减少噪音。例如,测试人员可以使用可变的时间间隔来限制攻击请求,使它们对网络设备看起来更随机。这也是降低 Intruder 对目标应用程序运行的线程数的位置。

为了这个食谱的目的,保持默认设置不变:

攻击结果

开始攻击后,Intruder 创建了一个攻击表。攻击结果部分提供了一些关于在表中捕获的内容的设置。

为了这个食谱的目的,保持默认设置不变:

Grep - Match

Grep - Match是一个非常有用的功能,当启用时,会在攻击表结果中创建额外的列,以快速识别错误、异常,甚至是响应中的自定义字符串。

为了这个食谱的目的,保持默认设置不变:

Grep - Extract

Grep - Extract,当启用时,是在攻击表中添加一个列的另一个选项,其标签是在响应中找到的特定字符串。这个选项不同于Grep - Match,因为 Grep - Extract 的值是从实际的 HTTP 响应中取得的,而不是任意字符串。

为了这个食谱的目的,保持默认设置不变:

Grep - Payloads

Grep - Payloads提供了测试人员在攻击表中添加列的能力,其中响应包含负载的反射。

为了这个食谱的目的,保持默认设置不变:

重定向

重定向指示 Intruder 永远不要、有条件地或总是跟随重定向。这个功能非常有用,特别是在暴力破解登录时,因为 302 重定向通常表示进入的迹象。

为了这个食谱的目的,保持默认设置不变:

开始攻击按钮

最后,我们准备开始 Intruder。在负载选项选项卡上,单击开始攻击按钮开始:

攻击开始后,将出现一个攻击结果表。这允许测试人员使用负载标记位置内的负载来审查所有请求。它还允许我们审查所有响应和显示状态错误超时长度注释的列。

为了这个食谱的目的,我们注意到在password参数的 admin 负载产生了状态码302,这是一个重定向。这意味着我们成功登录了 Mutillidae 应用程序:

在攻击表中查看响应 | 渲染,可以让我们看到 Web 应用程序如何响应我们的负载。正如你所看到的,我们成功地以管理员身份登录了:

第三章:使用 Burp 进行配置、爬行、扫描和报告

在本章中,我们将介绍以下示例:

  • 建立 HTTPS 信任

  • 设置项目选项

  • 设置用户选项

  • 使用爬虫进行爬行

  • 使用扫描器进行扫描

  • 报告问题

介绍

本章帮助测试人员校准 Burp 设置,使其对目标应用程序的影响减少。爬虫和扫描器选项中的调整可以帮助解决此问题。同样,当测试人员试图到达目标时,可能会遇到有趣的网络情况。因此,本章还包括了针对运行在 HTTPS 上的站点或仅可通过 SOCKS 代理或端口转发访问的站点的测试的几条建议。这些设置在项目和用户选项中都可以找到。最后,Burp 提供了生成问题报告的功能。

软件工具要求

为了完成本章的示例,您需要以下内容:

建立 HTTPS 信任

由于大多数网站实施超文本传输安全协议HTTPS),了解如何使 Burp 能够与这些站点通信是有益的。HTTPS 是在超文本传输协议HTTP)上运行的加密隧道。

HTTPS 的目的是加密客户端浏览器和 Web 应用程序之间的流量,以防止窃听。但是,作为测试人员,我们希望允许 Burp 进行窃听,因为这是使用拦截代理的目的。Burp 提供了一个由证书颁发机构CA)签名的根证书。该证书可用于在 Burp 和目标 Web 应用程序之间建立信任。

默认情况下,Burp 的代理在与运行在 HTTPS 上的目标建立加密握手时可以生成每个目标的 CA 证书。这解决了隧道的 Burp 到 Web 应用程序部分。我们还需要解决浏览器到 Burp 部分。

为了在客户端浏览器、Burp 和目标应用程序之间创建完整的 HTTPS 隧道连接,客户端需要在浏览器中信任 PortSwigger 证书作为受信任的权威。

准备工作

在需要对运行在 HTTPS 上的网站进行渗透测试的情况下,测试人员必须将 PortSwigger CA 证书导入其浏览器,作为受信任的权威。

如何做...

确保 Burp 已启动并运行,然后执行以下步骤:

  1. 打开 Firefox 浏览器到burp URL。您必须按照显示的 URL 精确输入才能到达此页面。您应该在浏览器中看到以下屏幕。请注意右侧标有 CA 证书的链接。单击该链接以下载 PortSwigger CA 证书:

  1. 系统会提示您下载 PortSwigger CA 证书的对话框。该文件标记为cacert.der。将文件下载到硬盘上的某个位置。

  2. 在 Firefox 中,打开 Firefox 菜单。单击选项。

  3. 在左侧单击隐私和安全,滚动到证书部分。单击“查看证书...”按钮:

  1. 选择权限选项卡。单击导入,选择之前保存的 Burp CA 证书文件,然后单击打开:

  1. 在弹出的对话框中,选中“信任此 CA 以识别网站”复选框,然后单击确定。在证书管理器对话框上也单击确定:

关闭所有对话框并重新启动 Firefox。如果安装成功,您现在应该能够通过 Burp 代理访问浏览器中的任何 HTTPS URL,而无需任何安全警告。

设置项目选项

项目选项允许测试人员保存或设置特定于项目或范围目标的配置。在项目选项卡下有多个子选项卡可用,包括连接、HTTP、SSL、会话和其他。在评估特定目标时,许多这些选项对于渗透测试人员是必需的,这就是为什么它们在这里被介绍的原因。

如何操作...

在本书中,我们不会使用许多这些功能,但了解它们的存在并理解它们的目的仍然很重要:

连接选项卡

在连接选项卡下,测试人员有以下选项:

  • 平台认证:在测试人员希望项目选项与针对目标应用程序使用的身份验证类型覆盖用户选项中的任何身份验证设置时,提供了一个覆盖按钮。

单击复写用户选项的复选框后,测试人员将看到一个表格,其中包含针对目标应用程序的身份验证选项(例如基本、NTLMv2、NTLMv1 和摘要)。目标主机通常设置为通配符*,以防测试人员有必要使用此选项:

  • 上游代理服务器:在测试人员希望项目选项与针对目标应用程序使用的上游代理服务器配置覆盖用户选项中包含的任何代理设置时,提供了一个覆盖按钮。

单击复写用户选项的复选框后,测试人员将看到一个表格,其中包含针对该项目的上游代理选项。单击“添加”按钮会显示一个名为“添加上游代理规则”的弹出框。此规则特定于目标应用程序的环境。如果目标应用程序的环境是由需要与应用程序登录不同一组凭据的 Web 代理前端,则此功能非常有用:

  • SOCKS 代理:在测试人员希望项目选项与针对目标应用程序使用的 SOCKS 代理配置覆盖用户选项中的任何 SOCKS 代理设置时,提供了一个覆盖按钮。

单击复写用户选项的复选框后,测试人员将看到一个表单,用于配置特定于该项目的 SOCKS 代理。在某些情况下,Web 应用程序必须通过使用套接字连接和身份验证的附加协议进行访问,通常称为 SOCKS:

  • 超时:它允许设置不同网络场景的超时设置,例如无法解析域名:

  • 主机名解析:它允许类似于本地计算机上主机文件的条目来覆盖域名系统DNS)解析:

  • 超出范围的请求:它提供了关于超出范围的请求的规则给 Burp。通常情况下,最常用的是使用套件范围[在目标选项卡中定义]的默认设置:

HTTP 选项卡

在 HTTP 选项卡下,测试人员有以下选项:

  • 重定向:它提供了 Burp 在配置重定向时遵循的规则。通常情况下,这里使用默认设置:

  • 流式响应:它提供了与无限流响应相关的配置。通常情况下,这里使用默认设置:

  • 状态 100 响应:它提供了 Burp 处理 HTTP 状态码 100 响应的设置。通常情况下,这里使用默认设置:

SSL 选项卡

在 SSL 选项卡下,测试人员有以下选项:

  • SSL 协商:当 Burp 通过 SSL 与目标应用程序通信时,此选项提供了使用预配置的 SSL 密码或指定不同密码的能力:

如果测试人员希望自定义密码,他们将单击“使用自定义协议和密码”单选按钮。出现一个表格,允许选择 Burp 在与目标应用程序通信中可以使用的协议和密码:

  • 客户端 SSL 证书:它提供了一个覆盖按钮,以便测试人员必须针对目标应用程序使用客户端证书。此选项将取代用户选项中配置的任何客户端证书。

单击复写用户选项的复选框后,测试人员将看到一个表格,用于配置特定于该项目的客户端证书。您必须拥有客户端证书的私钥才能成功导入到 Burp 中:

  • 服务器 SSL 证书:它提供了服务器端证书的列表。测试人员可以双击任何这些行项目以查看每个证书的详细信息:

会话选项卡

本书将涵盖第十章中会话选项卡中包含的所有功能,使用 Burp 宏和扩展程序。这里提供了会话选项卡中每个部分的审查,以确保完整性。

在会话选项卡下,测试人员有以下选项:

  • 会话处理规则:它提供了在评估 Web 应用程序时配置自定义会话处理规则的能力:

  • Cookie Jar:它提供了 Burp 代理(默认情况下)捕获的 cookie、域、路径和名称/值对的列表:

  • :它提供了测试人员编写先前执行的任务以自动化与目标应用程序交互的能力:

杂项选项卡

在杂项选项卡下,测试人员有以下选项:

  • 计划任务:它提供了在特定时间安排活动的能力:

单击“添加”按钮后,弹出窗口显示可用于调度的活动类型:

  • Burp Collaborator 服务器:它提供了使用目标应用程序外部服务的能力,以发现目标应用程序中的漏洞。本书将在第十一章中涵盖与 Burp Collaborator 相关的配方,实施高级主题攻击。这里提供了该部分的审查,以确保完整性:

  • 日志记录:它提供了记录所有请求和响应或基于特定工具筛选日志的能力。如果选择,用户将被提示输入文件名和位置,以保存日志文件在本地机器上:

设置用户选项

用户选项允许测试人员保存或设置特定于启动时 Burp 的配置。用户选项选项卡下有多个子选项卡可用,包括连接、SSL、显示和杂项。在本书的配方中,我们不会使用任何用户选项。但是,这里提供了信息以确保完整性。

如何做到这一点...

使用 Burp 用户选项,让我们根据您的渗透测试需求最佳地配置 Burp UI。连接选项卡下的每个项目已经在本章的项目选项部分中涵盖,因此,我们将直接从 SSL 选项卡开始。

SSL 选项卡

在 SSL 选项卡下,测试人员有以下选项:

  • Java SSL 选项:它提供了配置 Burp 用于 SSL 连接的 Java 安全库的能力。默认值最常用:

  • 客户端 SSL 证书:此部分已在本章的项目选项部分中涵盖。

显示选项卡

在显示选项卡下,测试人员有以下选项:

  • 用户界面:它提供了修改 Burp UI 本身的默认字体和大小的能力:

  • HTTP 消息显示:它提供了修改消息编辑器中显示的所有 HTTP 消息的默认字体和大小的能力:

  • 字符集:它提供了更改 Burp 确定使用的字符集的能力,以使用特定集或显示原始字节:

  • HTML 渲染:它控制可在 HTTP 响应上的 Render 选项卡中找到的 HTML 页面的显示方式:

其他选项卡

在其他选项卡下,测试人员有以下选项:

  • 快捷键:它允许用户为常用命令配置快捷键:

  • 自动项目备份[仅磁盘项目]:它提供了确定多久备份项目文件的备份副本的能力。默认情况下,使用 Burp Professional 时,备份设置为每 30 分钟发生一次:

  • 临时文件位置:它提供了在运行 Burp 时更改临时文件存储位置的能力:

  • 代理拦截:它提供了在初始启动 Burp 时始终启用或始终禁用代理拦截的能力:

  • 代理历史记录:它提供了在目标范围更改时自定义提示超出范围项目的能力:

  • 性能反馈:它为 PortSwigger 提供了关于 Burp 性能的匿名数据:

使用 Spider 进行爬行

Spidering 是映射或爬行 Web 应用程序的另一个术语。这种映射练习对于发现目标应用程序中存在的链接、文件夹和文件是必要的。

除了爬行,Burp Spider 还可以以自动方式提交表单。爬行应该在扫描之前进行,因为渗透测试人员希望在寻找漏洞之前识别所有可能的路径和功能。

Burp 提供了持续的爬行能力。这意味着随着渗透测试人员发现新内容,Spider 将自动在后台运行,寻找要添加到目标|站点地图中的表单、文件和文件夹。

Burp Suite 的 Spider 模块中有两个选项卡可用。这些选项卡包括控制选项,我们将在本食谱的准备就绪部分中学习。

准备就绪

使用在 OWASP BWA VM 中找到的 OWASP Mutillidae II 应用程序,我们将配置并使用 Burp Spider 来爬行该应用程序。

控制选项卡

在控制选项卡下,测试人员有以下选项:

  • Spider 状态:它提供了打开或关闭(暂停)爬虫功能的能力。它还允许我们监视排队的 Spider 请求以及传输的字节数等。该部分允许通过单击“清除队列”按钮来清除任何排队的表单:

  • Spider 范围:它提供了根据目标|站点地图选项卡或自定义范围设置 Spider 范围的能力:

如果单击“使用自定义范围”单选按钮,则会出现两个表,允许测试人员定义要包括和排除范围的 URL:

选项卡

在选项卡下,测试人员有以下选项:

  • 爬虫设置:它提供了调节 Spider 将跟随的链接深度的能力;还可以识别要在网站上为 Spider 提供的基本 Web 内容,例如robots.txt文件:

  • 被动爬行:在后台爬行新发现的内容,默认情况下已打开:

  • 表单提交:它提供了确定 Spider 与表单交互方式的能力。有几个选项可用,包括忽略、寻求指导、使用在提供的表中找到的默认值提交,或者使用任意值(例如,555-555-0199@example.com):

  • 应用登录:它提供了确定 Spider 如何与登录表单交互的能力。有几个选项可用,包括忽略、寻求指导、提交为标准表单提交,或使用文本框中提供的凭据:

  • Spider 引擎:它提供了编辑使用的线程数以及由于网络故障而进行的重试尝试设置的能力。要谨慎使用线程数,因为太多的线程请求可能会使应用程序受阻并影响其性能:

  • 请求头:它提供了修改 Burp Spider 发出的 HTTP 请求外观的能力。例如,测试人员可以修改用户代理以使 Spider 看起来像一个手机:

如何操作...

  1. 确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已经配置在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中。

  2. 从 OWASP BWA 登陆页面,点击链接到 OWASP Mutillidae II 应用程序:

  1. 转到 Burp Spider 选项卡,然后转到 Options 子选项卡,向下滚动到 Application Login 部分。选择自动提交这些凭据的单选按钮。在用户名文本框中输入单词 admin;在密码文本框中输入单词 admin

  1. 返回到目标 | 网站地图,并确保通过右键单击 mutillidae 文件夹并选择添加到范围来添加 mutillidae 文件夹到范围中:

  1. 可选地,你可以通过点击 Filter: Hiding out of scope and not found items; hiding CSS, image and general binary content; hiding 4xx responses; hiding empty folders 来清理 Site map,只显示范围内的项目:

  1. 点击 Filter: …. 后,你会看到一个下拉菜单出现。在这个下拉菜单中,勾选“仅显示范围内项目”框。现在,点击下拉菜单之外的任何地方,让过滤器再次消失:

  1. 现在你应该有一个干净的网站地图。右键单击 mutillidae 文件夹,然后选择 Spider this branch。

如果提示允许超出范围的项目,请点击是。

  1. 你应该立即看到 Spider 选项卡变成橙色:

  1. 转到 Spider | Control 选项卡,查看请求数量、传输的字节数以及队列中的表单:

让 Spider 完成运行。

  1. 注意,Spider 使用你在选项卡中提供的凭据登录到了应用程序。在 Target | Site map 中,寻找 /mutillidae/index.php/ 文件夹结构:

  1. 搜索包含 password=admin&login-php-submit-button=Login&username=admin 的信封图标:

这证明了 Spider 使用了你在 Spider | Options | Application Login 部分提供的信息。

使用扫描器进行扫描

扫描器功能仅在 Burp 专业版中可用。

Burp Scanner 是一个自动搜索应用程序运行时内部弱点的工具。扫描器尝试根据应用程序的行为来发现安全漏洞。

扫描器将识别可能导致发现安全漏洞的指标。Burp Scanner 非常可靠,但是在报告之前,渗透测试人员有责任验证任何发现。

Burp Scanner 有两种扫描模式可用:

  • 被动扫描器:分析通过代理监听器传递的流量。这就是为什么正确配置目标范围非常重要,这样你就不会扫描更多不必要的内容。

  • 主动扫描器:发送许多经过修改的请求。这些请求修改旨在触发可能指示应用程序存在漏洞的行为(portswigger.net/kb/issues)。主动扫描器专注于可能存在于应用程序客户端和服务器端的基于输入的错误。

扫描任务应在蜘蛛完成后进行。之前,我们学习了蜘蛛在发现新内容时继续爬行。同样,被动扫描在应用程序爬行时继续识别漏洞。

在选项选项卡下,测试人员有以下选项:问题活动、扫描队列、实时扫描、问题定义和选项:

  • 问题活动:以表格形式显示所有扫描器发现的问题;包括被动和主动扫描器问题:

通过在表中选择问题,将显示消息详细信息,包括与发现相关的特定建议以及与请求和响应相关的消息编辑器详细信息:

  • 扫描队列:显示正在运行的主动扫描器的状态;提供每个运行线程的完成百分比,以及发送的请求数、测试的插入点、开始时间、结束时间、目标主机和攻击的 URL。

扫描仪可以通过右键单击并选择暂停扫描仪来暂停扫描; 同样,扫描仪也可以通过右键单击并选择恢复扫描仪来恢复。等待扫描队列中的项目也可以被取消:

  • 实时主动扫描:它允许自定义主动扫描器何时执行扫描活动:

  • 实时被动扫描:它允许自定义被动扫描器何时执行扫描活动。默认情况下,被动扫描器始终处于开启状态并扫描所有内容:

  • 问题定义:显示 Burp 扫描器(主动和被动)已知的所有漏洞的定义。列表可以通过扩展器进行扩展,但是,使用 Burp 核心,这是详尽的列表,包括标题、描述文本、修复措施措辞、参考和严重级别:

  • 选项:提供了几个部分,包括攻击插入点、主动扫描引擎、攻击扫描优化和静态代码分析。

  • 攻击插入点:它允许自定义 Burp 插入点; 插入点是请求不同位置内的有效负载的占位符。这类似于第二章中讨论的入侵者有效负载标记概念,了解 Burp 套件工具

建议在进行评估时添加 URL-to-body、Body-to-URL、cookie-to-URL、URL-to-cookie、body-to-cookie 和 cookie-to-body 插入点。这允许 Burp 对任何给定请求中几乎所有可用的参数进行模糊处理。

    • 主动扫描引擎:它提供了配置线程数(例如,并发请求限制)的能力,扫描器将针对目标应用程序运行。这个线程计数,加上插入点的排列组合,可能会在网络上产生噪音和可能的 DOS 攻击,这取决于目标应用程序的稳定性。请谨慎使用,并考虑降低并发请求限制。线程的限制也可以在此配置部分中找到:

    • 攻击扫描优化:它提供了三种扫描速度和扫描准确性的设置。
  • 可用的扫描速度设置包括正常、快速和彻底。快速会发出更少的请求并检查问题的派生。彻底会发出更多的请求并检查问题的派生。正常是另外两个选择之间的中等设置。扫描速度的建议是彻底。

  • 可用的扫描准确性设置包括正常、最小化假阴性和最小化假阳性。扫描准确性与扫描器在报告问题之前需要的证据量有关。扫描准确性的建议是正常的:

    • 静态代码分析:它提供对二进制代码进行静态分析的能力。默认情况下,此检查是在主动扫描中执行的:

  • 扫描问题:它提供了设置要测试的漏洞以及要使用哪个扫描器(即被动或主动)的能力。默认情况下,所有漏洞检查都是启用的:

准备工作

使用 OWASP BWA VM 中的 OWASP Mutillidae II 应用程序,我们将开始我们的扫描过程,并使用扫描队列选项卡监视我们的进度。

操作步骤...

确保 Burp 和 OWASP BWA VM 正在运行,同时在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置了 Burp。

从 OWASP BWA 登录页面,点击链接到 OWASP Mutillidae II 应用程序:

  1. 从目标 | 站点地图选项卡中,右键单击mutillidae文件夹并选择被动扫描此分支。被动扫描器将寻找漏洞,这些漏洞将出现在问题窗口中:

  1. 从目标 | 站点地图选项卡中,右键单击mutillidae文件夹并选择主动扫描此分支:

  1. 在启动主动扫描器时,将弹出一个对话框,提示删除重复项、没有参数的项、具有媒体响应的项或特定文件类型的项。这个弹出框是主动扫描向导。对于本教程,请使用默认设置并点击“下一步”:

  1. 验证所有显示的路径是否需要进行扫描。任何不需要的文件类型或路径都可以使用“删除”按钮进行移除。完成后,点击“确定”:

您可能会收到关于超出范围的项目的提示。如果是这样,请点击“是”以包括这些项目。扫描器将开始工作。

  1. 通过查看扫描器队列选项卡来检查扫描器的状态:

  1. 扫描器发现问题后,它们会显示在目标选项卡的问题面板中。由于这个面板是专业版才有的,因为它补充了扫描器的功能:

报告问题

报告功能仅在 Burp Professional 版中提供。

在 Burp Professional 中,当扫描器发现漏洞时,它将被添加到 UI 右侧的目标选项卡上找到的问题列表中。问题以颜色编码表示严重程度和置信水平。带有红色感叹号的问题意味着严重程度很高,置信水平是确定的。例如,这里显示的 SQL 注入问题包含这两个属性。

具有较低严重程度或置信水平的项目将是低级、信息性的,颜色为黄色、灰色或黑色。这些项目需要手动渗透测试,以验证漏洞是否存在。例如,响应中返回的输入是扫描器识别的潜在漏洞,如下面的屏幕截图所示。这可能是跨站脚本XSS)的攻击向量,也可能是误报。这取决于渗透测试人员及其经验水平来验证此类问题:

  • 严重程度级别:可用的严重程度级别包括高、中、低、信息和误报。任何标记为误报的发现将不会出现在生成的报告中。误报是必须由渗透测试人员手动设置的严重程度级别。

  • 置信水平:可用的置信水平包括确定、肯定和暂定。

准备工作

扫描过程完成后,我们需要验证我们的发现,相应地调整严重程度,并生成报告。

操作步骤...

  1. 对于本教程,请在“问题”标题下选择“未设置 HttpOnly 标志的 Cookie”:

  1. 查看消息的响应选项卡以验证发现。我们可以清楚地看到PHPSESSID cookie 没有设置HttpOnly标志。因此,我们可以将严重程度从低改为高,将置信水平从确定改为肯定:

  1. 右键单击问题,并通过选择“设置严重程度 | 高”将严重程度更改为高:

  1. 右键单击问题,并通过选择设置置信度 | 确定将严重性更改为确定:

  1. 对于这个示例,选择包括在报告中的具有最高置信度和严重级别的问题。在这里选择(高亮显示+ Shift键)所显示的项目后,右键单击并选择报告所选问题:

点击报告所选问题后,弹出框会提示我们报告的格式。这个弹出框是 Burp Scanner 报告向导。

  1. 对于这个示例,允许 HTML 的默认设置。点击下一步。

  2. 该屏幕提示输入报告中要包括的详细信息类型。对于这个示例,允许默认设置。点击下一步。

  3. 该屏幕提示报告中消息应该如何显示。对于这个示例,允许默认设置。点击下一步。

  4. 该屏幕提示应该在报告中包括哪些类型的问题。对于这个示例,允许默认设置。点击下一步。

  5. 该屏幕提示输入报告保存的位置。对于这个示例,点击选择文件…,选择一个位置,并提供一个文件名,后面跟着.html扩展名;允许所有其他默认设置。点击下一步:

  1. 该屏幕反映了报告生成的完成。点击关闭并浏览到文件的保存位置。

  2. 双击文件名将报告加载到浏览器中:

恭喜!您已经创建了您的第一个 Burp 报告!

第四章:评估身份验证方案

在本章中,我们将涵盖以下示例:

  • 测试帐户枚举和可猜测的帐户

  • 测试弱锁定机制

  • 测试绕过身份验证方案

  • 测试浏览器缓存弱点

  • 通过 REST API 测试帐户配置过程

介绍

本章涵盖了对身份验证方案的基本渗透测试。身份验证是验证个人或对象声明是否真实的行为。Web 渗透测试人员必须进行关键评估,以确定目标应用程序的身份验证方案的强度。此类测试包括发动攻击,以确定帐户枚举和可猜测的帐户的存在,弱锁定机制的存在,应用程序方案是否可以被绕过,应用程序是否包含浏览器缓存弱点,以及是否可以通过 REST API 调用进行身份验证来配置帐户。您将学习如何使用 Burp 执行此类测试。

软件工具要求

要完成本章的示例,您需要以下内容:

测试帐户枚举和可猜测的帐户

通过与身份验证机制进行交互,测试人员可能会发现可以收集一组有效的用户名。一旦识别出有效帐户,就可能有可能对密码进行暴力破解。本示例解释了如何使用 Burp Intruder 来收集有效用户名列表。

做好准备

针对目标应用程序执行用户名枚举。

如何做...

确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中进行配置。

  1. 从 OWASP BWA 登陆页面,单击 GetBoo 应用程序的链接:

  1. 单击登录按钮,在登录屏幕上,尝试使用帐户用户名admin和密码aaaaa登录:

  1. 注意返回的消息是密码无效。根据这个信息,我们知道 admin 是一个有效的帐户。让我们使用 Burp 入侵者来查找更多帐户。

  2. 在 Burp 的代理|HTTP 历史选项卡中,找到登录失败的消息。查看响应|原始选项卡,找到相同的过于冗长的错误消息,密码无效

  1. 切换回请求|原始选项卡,右键单击将此请求发送到入侵者

  1. 转到 Burp 的入侵者选项卡,将入侵者|目标选项卡设置保持不变。继续到入侵者|位置选项卡。注意 Burp 如何在找到的每个参数值周围放置有效载荷标记。但是,我们只需要在密码值周围放置有效载荷标记。单击清除按钮以删除 Burp 放置的有效载荷标记:

  1. 然后,使用光标突出显示 admin 的名称值,并单击添加§按钮:

  1. 继续到入侵者|有效载荷选项卡。许多测试人员使用单词列表来枚举有效载荷标记占位符中常用的用户名。对于这个示例,我们将输入一些常见的用户名,以创建自定义有效载荷列表。

  2. 有效载荷选项[简单列表]部分,键入字符串user,然后单击添加按钮:

  1. 在有效载荷列表框中添加一些字符串,如johntomdemo,最后是admin

  1. 转到入侵者|选项选项卡,向下滚动到Grep - 匹配部分。单击复选框标记结果与这些表达式匹配的响应项。单击清除按钮以删除当前列表中的项目:

  1. 单击以确认您希望清除列表。

  2. 在文本框中输入字符串密码无效,然后单击Add按钮。您的Grep - Match部分应如下截图所示:

  1. 单击Options页面顶部的Start attack按钮。弹出对话框显示定义的有效负载,以及我们在Grep - Match部分下添加的新列。这个弹出窗口是攻击结果表。

  2. 攻击结果表显示每个请求的给定有效负载导致状态代码为200,其中两个有效负载johntom在响应中没有产生密码无效的消息。相反,这两个有效负载返回了用户不存在的消息:

  1. 这次攻击的结果表明,基于过于冗长的错误消息密码无效,存在用户名枚举漏洞,这证实了用户帐户存在于系统中:

这意味着我们能够确认系统中已经存在用户userdemoadmin的帐户。

测试弱锁定机制

应用程序应该设置锁定机制以减轻暴力登录攻击。通常,应用程序在三到五次尝试之间设置阈值。许多应用程序在允许重新尝试之前会锁定一段时间。

渗透测试人员必须测试登录保护的所有方面,包括挑战问题和响应(如果存在)。

做好准备

确定应用程序是否存在适当的锁定机制。如果不存在,尝试针对登录页面的凭据进行暴力破解,以实现对应用程序的未经授权访问。使用 OWASP Mutillidae II 应用程序,尝试使用有效用户名但无效密码登录五次。

如何操作...

确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中进行配置。

  1. 从 OWASP BWA 登陆页面,单击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,转到 OWASP Mutillidae II 的登录屏幕。从顶部菜单中,单击登录

  3. 在登录屏幕上,尝试使用用户名admin和错误密码aaaaaa登录五次。请注意,在这五次尝试期间,应用程序没有做出任何不同的反应。应用程序没有更改显示的错误消息,管理员帐户也没有被锁定。这意味着登录可能容易受到暴力破解密码猜测攻击的影响:

让我们继续测试,以暴力破解登录页面并未经授权地访问应用程序。

  1. 转到Proxy | HTTP history选项卡,并查找登录失败的尝试。右键单击五个请求中的一个,并将其发送到Intruder

  1. 转到 Burp 的Intruder选项卡,并将Intruder | Target选项卡设置保持不变。继续到Intruder | Positions选项卡,并注意 Burp 如何在找到的每个参数值周围放置有效负载标记。但是,我们只需要在密码的值周围放置有效负载标记。单击Clear §按钮以删除 Burp 放置的有效负载标记:

  1. 然后,突出显示aaaaaa的密码值,然后单击Add §按钮。

  2. 继续到Intruder | Payloads选项卡。许多测试人员使用单词列表来暴力破解有效负载标记占位符中常用的密码。对于这个示例,我们将输入一些常用密码来创建我们自己的独特有效负载列表。

  3. Payload Options [Simple list]部分,输入字符串admin123,然后单击Add按钮:

  1. 在有效负载列表框中添加一些字符串,例如adminpasswelcome1,最后是admin

  1. 转到Intruder | Options选项卡,向下滚动到Grep – Extract部分:

  1. 点击复选框Extract the following items from responses,然后点击Add按钮。一个弹出框会显示,显示你使用admin/aaaaaa请求进行的登录尝试的响应。

  2. 在底部的搜索框中搜索Not Logged In这几个单词。找到匹配后,你必须正确地突出显示Not Logged In这几个单词,以正确地分配 grep 匹配:

  1. 如果你没有正确地突出显示单词,在点击确定后,你会在Grep – Extract框内看到[INVALID]。如果发生这种情况,点击删除按钮删除条目,然后再次点击添加按钮,执行搜索,突出显示单词。

  2. 如果你正确地突出显示了单词,你应该在Grep – Extract框中看到以下内容:

  1. 现在,在Options页面的右上角点击Start attack按钮。

  2. 弹出的攻击结果表格会显示请求和你定义的有效负载放置到有效负载标记位置中。注意到产生的攻击表格显示了一个名为ReflectedXSSExecution的额外列。这一列是之前设置的Grep – Extract Option的结果。

  3. 从这个攻击表格中,查看额外的列,测试人员可以轻松地确定哪个请求号成功地暴力破解了登录界面。在这种情况下,Request 4,使用用户名admin和密码admin成功地登录了应用程序:

  1. 在攻击表格中选择Request 4,查看Response | Render选项卡。你应该在右上角看到消息Logged In Admin: admin (g0t r00t?)

  1. 点击攻击表格右上角的X关闭攻击表格。

你成功地暴力破解了系统上一个有效账户的密码,因为应用程序的锁定机制较弱。

测试绕过身份验证方案

应用程序可能存在缺陷,允许绕过已经存在的身份验证措施进行未经授权的访问。绕过技术包括直接页面请求(即强制浏览)、参数修改会话 ID 预测SQL 注入

为了本教程的目的,我们将使用参数修改。

准备工作

添加和编辑参数,使未经身份验证的请求与先前捕获的经过身份验证的请求匹配。重放修改后的未经身份验证的请求,以绕过登录机制获取对应用程序的访问权限。

操作步骤

  1. 打开 Firefox 浏览器,使用顶部菜单左侧的Home按钮,打开 OWASP Mutillidae II 的主页。确保你没有登录该应用程序。如果你已经登录,从菜单中选择Logout

  1. 在 Burp 中,转到Proxy | HTTP history选项卡,并选择刚刚进行的未经身份验证的主页浏览请求。右键单击,然后选择Send to Repeater

  1. 使用相同的请求和位置,再次右键单击,然后选择Send to Comparer(请求):

  1. 返回浏览器的主页,然后点击登录/注册按钮。在登录页面,使用用户名admin和密码admin进行登录。点击登录

  2. 登录后,继续注销。确保你按下注销按钮并从管理员账户注销。

  3. 在 Burp 中,转到Proxy | HTTP history选项卡,并选择刚刚进行的请求,以admin身份登录。选择POST 302重定向后立即进行的GET请求。右键单击,然后选择Send to Repeater(请求):

  1. 使用相同的请求和位置,再次右键单击并选择Send to Comparer(请求):

  1. 转到 Burp 的Comparer选项卡。注意您发送的两个请求都被突出显示。按下右下角的Words按钮,同时比较这两个请求:

  1. 一个对话框弹出显示两个请求,使用颜色编码的高亮显示来吸引您的注意。注意Referer标头中的更改以及放置在管理员帐户 cookie 中的附加名称/值对。使用右侧的X关闭弹出框:

  1. 返回到Repeater,其中包含您作为未经身份验证的用户执行的第一个GET请求。在执行此攻击之前,请确保您已完全注销应用程序。

  2. 您可以通过单击与您未经身份验证请求相关的Repeater中的Go按钮来验证您已注销:

  1. 现在切换到Repeater选项卡,其中包含您作为经过身份验证的用户admin执行的第二个GET请求。从经过身份验证的请求中复制Referer标头和Cookie的值。这是用于绕过身份验证的参数修改攻击:

  1. 从经过身份验证的GET请求中复制突出显示的标头(Referer 和 Cookie)。您将把这些值粘贴到未经身份验证的GET请求中。

  2. 通过突出显示并右键单击,然后选择粘贴,在未经身份验证的GET请求中替换相同的标头。

  3. 右键单击并选择粘贴在您作为未经身份验证的用户执行的第一个GET请求的Repeater | Raw选项卡中。

  4. 单击Go按钮发送您修改后的GET请求。请记住,这是您作为未经身份验证的用户执行的第一个GET请求。

  5. 验证您现在在Response | Render选项卡中以管理员身份登录。我们能够通过执行参数操作绕过身份验证机制(即登录页面):

工作原理

通过将 cookie 中找到的令牌和经过身份验证的请求的 referer 值重新播放到未经身份验证的请求中,我们能够绕过身份验证方案并未经授权地访问应用程序。

测试浏览器缓存的弱点

浏览器缓存可提供改进的性能和更好的最终用户体验。但是,当用户在浏览器中输入敏感数据时,这些数据也可能被缓存在浏览器历史记录中。通过检查浏览器的缓存或简单地按下浏览器的返回按钮,可以查看这些缓存数据。

准备就绪

使用浏览器的返回按钮,确定登录凭据是否被缓存,从而允许未经授权的访问。在 Burp 中检查这些步骤,以了解漏洞。

如何操作...

  1. admin身份使用密码admin登录 Mutillidae 应用程序。

  2. 现在通过单击顶部菜单中的注销按钮注销应用程序。

  3. 通过注意未登录消息来验证您已注销。

  4. 在 Burp 的Proxy | History中查看这些步骤作为消息。请注意,注销会执行302重定向,以防止在浏览器中缓存 cookie 或凭据:

  1. 从 Firefox 浏览器,单击返回按钮,注意即使您没有登录,您现在已经以管理员身份登录!这是因为浏览器中存储的缓存凭据以及应用程序中未设置任何缓存控制保护。

  2. 现在在浏览器中刷新/重新加载页面,您会看到您再次被注销。

  3. Proxy | HTTP history选项卡中检查这些步骤。通过浏览器执行的步骤与Proxy | HTTP history表中捕获的消息进行对比:

  • 以下截图中的请求 1 是未经身份验证的

  • 请求 35 是成功登录(302)为admin

  • 请求 37 是admin帐户的注销

  • 请求 38 和 39 是刷新或重新加载浏览器页面,再次将我们注销

  1. 当您按浏览器的返回按钮时,不会捕获任何请求。这是因为返回按钮操作包含在浏览器中。没有通过 Burp 发送消息到 Web 服务器执行此操作。这是一个重要的区别需要注意。尽管如此,我们发现了与弱浏览器缓存保护相关的漏洞。在这种情况下,渗透测试人员将拍摄已登录缓存页面的截图,然后点击返回按钮后看到:

通过 REST API 测试帐户配置过程

帐户配置是在应用程序中建立和维护用户帐户的过程。配置功能通常仅限于管理员帐户。渗透测试人员必须验证用户提供适当的身份识别和授权来完成帐户配置功能。帐户配置的常见方式是通过表述性状态转移REST)API 调用。许多时候,开发人员可能不会为应用程序的 UI 部分使用的 API 调用设置相同的授权检查。

准备工作

使用 OWASP Mutillidae II 应用程序中提供的 REST API 调用,确定未经身份验证的 API 调用是否可以配置或修改用户。

如何做…

确保您没有登录到应用程序中。如果登录了,请从顶部菜单中单击Logout按钮。

  1. 在 Mutillidae 中,浏览到User Lookup (SQL) Page,然后选择OWASP 2013 | A1 Injection (SQL) | SQLi – Extract Data | User Info (SQL)

  1. Name中键入user,在Password中键入user,然后单击View Account Details。您应该看到下一个截图中显示的结果。这是我们将使用 REST 调用测试配置功能的帐户:

通过 Spidering,Burp 可以找到/api/rest文件夹。这些文件夹是应用程序启用 REST API 的线索。测试人员需要确定通过这些 API 调用可以使用哪些功能。

  1. 对于 Mutillidae,/webservices/rest/文件夹结构通过 REST API 调用提供帐户配置。

  2. 要直接转到 Mutillidae 中的此结构,选择Web Services | REST | SQL Injection | User Account Management

您将看到一个屏幕,描述了支持的 REST 调用以及每个调用所需的参数:

  1. 让我们尝试调用其中一个 REST 调用。转到Proxy | HTTP history表,并选择您从菜单中发送的最新请求,以进入User Account Management页面。右键单击并将此请求发送到Repeater

  1. 在 Burp 的Repeater中,将?添加到 URL 后面,然后加上参数名/值对username=user。新的 URL 应该如下所示:
/mutillidae/webservices/rest/ws-user-account.php?username=user

  1. 单击Go按钮,注意我们能够以未经身份验证的用户身份检索数据!执行此类操作无需身份验证令牌:

  1. 让我们看看还能做什么。使用User Account Management页面上给出的 SQL 注入字符串,让我们尝试转储整个用户表。

  2. 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+--+
  1. 在更改username参数后,单击Go按钮。您的请求应如下所示:

  1. 请注意,我们已经转储了数据库中的所有帐户,显示了所有用户名、密码和签名:

  1. 掌握了这些信息后,返回到Proxy | HTTP History,选择您发送到User Account Management页面的请求,右键单击,并发送到Repeater

  2. Repeater中,修改GET动词,并在RequestRaw选项卡中用DELETE替换它:

  1. 转到Params选项卡,点击添加按钮,然后添加两个Body类型参数:首先,用户名设置为user,其次,密码设置为user,然后点击Go按钮:

  1. 请注意,我们已经删除了该账户!我们能够检索信息,甚至在不显示 API 密钥或身份验证令牌的情况下修改(删除)数据库中的行!

注意:如果您希望重新创建用户账户,请重复上述步骤,将delete替换为put。签名是可选的。点击Go按钮。用户账户将被重新创建。

第五章:评估授权检查

在本章中,我们将介绍以下配方:

  • 测试目录遍历

  • 测试本地文件包含LFI

  • 测试远程文件包含RFI

  • 测试特权升级

  • 测试不安全的直接对象引用

介绍

本章介绍了授权的基础知识,包括应用程序如何使用角色来确定用户功能的解释。Web 渗透测试涉及关键评估,以确定应用程序验证分配给特定角色的功能的程度,我们将学习如何使用 Burp 执行这些测试。

软件要求

要完成本章中的配方,您将需要以下内容:

测试目录遍历

目录遍历攻击是试图发现或强制浏览未经授权的网页,通常为应用程序的管理员设计。如果应用程序未正确配置 Web 文档根目录,并且未包括对访问的每个页面进行适当授权检查,则可能存在目录遍历漏洞。在特定情况下,这种弱点可能导致系统命令注入攻击或攻击者执行任意代码的能力。

准备就绪

使用 OWASP Mutillidae II 作为我们的目标应用程序,让我们确定它是否包含任何目录遍历漏洞。

如何做...

确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中进行配置。

  1. 从 OWASP BWA 登陆页面,单击链接到 OWASP Mutillidae II 应用程序。

  2. 在 OWASP Mutillidae II 的登录屏幕上打开 Firefox 浏览器。从顶部菜单中,单击登录

  3. 找到刚刚在Proxy | HTTP history表中执行的请求。查找对login.php页面的调用。突出显示消息,将光标移动到Request选项卡的Raw选项卡中,右键单击,然后单击Send to Intruder

  1. 切换到Intruder | Positions选项卡,并单击右侧的Clear $按钮清除所有 Burp 定义的有效负载标记。

  2. 突出显示存储在page参数(login.php)中的值,并使用Add §按钮在其周围放置一个有效负载标记:

  1. 继续到Intruder | Payloads选项卡,并从wfuzz存储库中选择以下字典:admin-panels.txt。从 GitHub 存储库中的位置遵循此文件夹结构:wfuzz/wordlist/general/admin-panels.txt

  2. Intruder | Payloads选项卡的Payload Options [Simple list]部分中单击Load按钮,将弹出一个窗口,提示您选择您的字典的位置。

  3. 浏览到您从 GitHub 下载了wfuzz存储库的位置。继续搜索wfuzz文件夹结构(wfuzz/wordlist/general/),直到找到admin-panels.txt文件,然后通过单击打开选择文件:

  1. 滚动到底部,取消选中(默认情况下,它已选中)URL 编码这些字符选项:

  1. 现在您已经准备好开始攻击。单击Intruder | Positions页面右上角的Start attack按钮:

攻击结果表将出现。允许攻击完成。admin-panels.txt字典中有 137 个有效负载。按照Length列从升序到降序排序,以查看哪些有效负载命中了网页。

  1. 注意响应长度较大的有效负载。看起来很有希望!也许我们已经偶然发现了一些可能包含指纹信息或未经授权访问的管理页面:

  1. 选择长度最大的列表中的第一个页面administrator.php。从攻击结果表中,查看Response | Render选项卡,并注意页面显示了 PHP 版本和系统信息:

工作原理...

甚至在未登录的情况下,我们就能够强制浏览到 Web 应用程序中未映射的区域。术语未映射意味着应用程序本身没有直接链接到这个秘密配置页面。但是,使用 Burp Intruder 和包含常见已知管理文件名的字典,我们能够使用目录遍历攻击发现该页面。

测试本地文件包含(LFI)

Web 服务器通过配置设置控制对特权文件和资源的访问。特权文件包括只能由系统管理员访问的文件。例如,在类 UNIX 平台上是/etc/passwd文件,或者在 Windows 系统上是boot.ini文件。

LFI攻击是试图使用目录遍历攻击访问特权文件的尝试。LFI 攻击包括不同的样式,包括点点斜杠攻击../),目录暴力破解目录攀升回溯

准备工作

使用 OWASP Mutillidae II 作为我们的目标应用程序,让我们确定它是否包含任何 LFI 漏洞。

如何操作...

确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已配置在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中。

  1. 从 OWASP BWA 登陆页面,点击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,转到 OWASP Mutillidae II 的登录界面。从顶部菜单,点击Login

  3. Proxy | HTTP history表中找到您刚刚执行的请求。查找对login.php页面的调用。突出显示消息,将光标移动到Request选项卡的Raw选项卡中,右键单击,然后Send to Intruder

  4. 切换到Intruder | Positions选项卡,并点击右侧的Clear §按钮清除所有 Burp 定义的有效负载标记。

  5. 突出显示当前存储在page参数(login.php)中的值,并使用右侧的Add  §按钮在其周围放置有效负载标记。

  6. 继续到Intruder | Payloads选项卡。从wfuzz存储库中选择以下字典:Traversal.txt**. **从 GitHub 存储库中的文件夹结构如下:wfuzz/wordlist/injections/Traversal.txt

  7. 点击Intruder | Payloads选项卡中Payload Options [Simple list]部分的Load按钮。将显示一个弹出窗口,提示您输入字典的位置。

  8. 浏览到您从 GitHub 下载wfuzz存储库的位置。继续搜索wfuzz文件夹结构,直到找到admin-panels.txt文件。选择文件,然后点击Open

  1. 滚动到底部,取消选中(默认情况下是选中的)URL-encode these characters选项。

  2. 您现在已经准备好开始攻击。点击Intruder | Positions页面右上角的Start attack按钮。

  3. 攻击结果表将出现。允许攻击完成。按照Length列从升序到降序排序,以查看哪些有效负载命中了网页。注意长度较大的有效负载;也许我们已经未经授权地访问了系统配置文件!

  1. 在列表中选择请求#2。从攻击结果表中,查看响应 | 渲染选项卡,并注意页面显示了系统中的主机文件!

  1. 继续向下滚动攻击结果表中的请求列表。查看请求#6,然后查看响应 | 渲染选项卡,并注意页面显示了系统中的/etc/passwd文件!

它是如何工作的...

由于文件权限受到不良保护和应用程序授权检查不足,攻击者能够读取系统中包含敏感信息的特权本地文件。

测试远程文件包含(RFI)

远程文件包含RFI)是一种试图访问外部 URL 和远程文件的攻击。由于参数操纵和缺乏服务器端检查,攻击是可能的。这些疏忽允许参数更改将用户重定向到未列入白名单或未经适当数据验证的位置。

做好准备

使用 OWASP Mutillidae II 作为我们的目标应用程序,让我们确定它是否包含任何 RFI 漏洞。

如何做...

确保 Burp 和 OWASP BWA VM 正在运行,并且已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置了 Burp。

  1. 从 OWASP BWA 登陆页面,点击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,转到 OWASP Mutillidae II 的登录界面。从顶部菜单中,点击登录

  3. 代理 | HTTP 历史表中找到您刚刚执行的请求。寻找对login.php页面的调用:

  1. 记下确定要加载的页面的page参数:

让我们看看是否可以通过提供应用程序外部的 URL 来利用此参数。出于演示目的,我们将在 OWASP BWA VM 中使用我们控制的 URL。但是,在野外,这个 URL 将由攻击者控制。

  1. 切换到代理 | 拦截选项卡,并按下拦截已打开按钮。

  2. 返回到 Firefox 浏览器,并重新加载登录页面。请求被暂停,并包含在代理 | 拦截选项卡中:

  1. 现在让我们将login.phppage参数值操纵为应用程序外部的 URL。让我们使用登录页面到GetBoo应用程序。您的 URL 将特定于您机器的 IP 地址,因此请相应调整。新的 URL 将是http://<your_IP_address>/getboo/

  2. login.php的值替换为http://<your_IP_address>/getboo/,然后点击Forward按钮:

  1. 现在再次按下拦截已打开按钮,以切换拦截按钮为关闭(拦截已关闭)

  2. 返回到 Firefox 浏览器,并注意加载的页面是 Mutillidae 应用程序上的GetBoo索引页面!

它是如何工作的...

page参数没有包括适当的数据验证,以确保提供给它的值被列入白名单或包含在可接受值的规定列表中。通过利用这种弱点,我们能够指定这个参数的值,这是不应该被允许的。

测试特权升级

应用程序中的开发人员代码必须包括对分配角色的授权检查,以确保授权用户无法将其角色提升到更高的特权。这种特权升级攻击是通过修改分配角色的值并用另一个值替换来发生的。如果攻击成功,用户将未经授权地访问通常限制为管理员或更强大帐户的资源或功能。

做好准备

使用 OWASP Mutillidae II 作为我们的目标应用程序,让我们以普通用户 John 的身份登录,并确定我们是否可以将我们的角色提升为管理员。

如何做...

确保 Burp 和 OWASP BWA VM 正在运行,并且已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置了 Burp。

  1. 从 OWASP BWA 登陆页面,点击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器到 OWASP Mutillidae II 的登录界面。从顶部菜单中,点击登录

  3. 在登录界面,使用以下凭据登录—用户名:john和密码:monkey

  4. 切换到 Burp 的代理 | HTTP 历史选项卡。通过以john登录,找到您刚刚进行的POST和随后的GET请求:

  1. 查看列表中的GET请求;注意Cookie:行上显示的 cookie 名称/值对。

最感兴趣的名称/值对包括username=johnuid=3。如果我们尝试将这些值操纵到不同的角色会发生什么?

  1. 让我们尝试操纵存储在 cookie 中的usernameuid参数到不同的角色。我们将使用 Burp 的代理 | 拦截来帮助我们执行此攻击。

  2. 切换到代理 | 拦截选项卡,然后按下拦截已打开按钮。返回到 Firefox 浏览器并重新加载登录页面。

  3. 代理 | 拦截选项卡中暂停请求。在暂停时,将分配给用户名的值从john更改为admin。同时,将分配给uid的值从3更改为1

  1. 点击转发按钮,然后再次按下拦截已打开以切换拦截按钮为关闭(拦截已关闭)

  2. 返回到 Firefox 浏览器,注意我们现在以管理员身份登录!我们能够从普通用户升级到管理员,因为开发人员没有对分配的角色执行任何授权检查:

它是如何工作的...

在这个示例中显示的特权升级攻击中存在几个应用程序问题。与帐户配置(即角色分配)相关的任何操作都应该只允许管理员执行。如果没有适当的检查,用户可以尝试升级他们的配置角色。在这个示例中展示的另一个问题是顺序用户 ID 号(例如,uid=3)。由于这个数字很容易被猜到,并且因为大多数应用程序都从管理员帐户开始,将数字从3更改为1似乎是与管理员帐户相关的一个可能的猜测。

测试不安全的直接对象引用(IDOR)

基于用户提供的输入允许未经授权直接访问文件或资源的系统被称为不安全的直接对象引用IDOR)。这种漏洞允许绕过对这些文件或资源放置的授权检查。IDOR 是由于在应用程序代码中未经检查的用户提供的输入来检索对象而未执行授权检查的结果。

准备工作

使用 OWASP Mutillidae II 作为我们的目标应用程序,让我们操纵phpfile参数的值,以确定我们是否可以调用系统上的直接对象引用,例如/etc/passwd文件。

如何做到这一点...

  1. 从 Mutillidae 菜单中,选择OWASP 2013 | A4 – 不安全的直接对象引用 | 源代码查看器

  1. 源代码查看器页面,使用下拉框中选择的默认文件(upload-file.php),点击查看文件按钮以查看文件内容显示在按钮下方:

  1. 切换到 Burp 的代理 | HTTP 历史选项卡。找到您刚刚在查看upload-file.php文件时所做的POST请求。注意带有要显示的文件值的phpfile参数。如果我们将此参数的值更改为其他内容会发生什么?

  1. 让我们通过操纵提供给phpfile参数的值来执行 IDOR 攻击,以引用系统上的文件。例如,让我们尝试通过 Burp 的代理 | 拦截功能将upload-file.php的值更改为../../../../etc/passwd

  2. 要执行此攻击,请按照以下步骤进行。

  3. 切换到代理 | 拦截选项卡,并按下拦截已开启按钮。

  4. 返回到 Firefox 浏览器并重新加载登录页面。请求被暂停,并包含在代理 | 拦截选项卡中。

    1. 由于请求被暂停,将phpfile参数分配的值更改为../../../../etc/passwd

  1. 点击转发按钮。现在再次按下拦截已开启按钮,将拦截按钮切换为关闭(拦截已关闭)

  2. 返回到 Firefox 浏览器。注意我们现在可以看到/etc/passwd文件的内容!

工作原理...

由于应用程序代码中对phpfile参数缺乏适当的授权检查,我们能够查看系统上的特权文件。开发人员和系统管理员在揭示敏感文件和资源之前提供访问控制和检查。当这些访问控制缺失时,可能存在 IDOR 漏洞。

第六章:评估会话管理机制

在本章中,我们将涵盖以下示例:

  • 使用 Sequencer 测试会话令牌强度

  • 测试 cookie 属性

  • 测试会话固定

  • 测试暴露的会话变量

  • 测试跨站请求伪造

介绍

本章涵盖了用于绕过和评估会话管理方案的技术。应用程序使用会话管理方案来跟踪用户活动,通常是通过会话令牌。会话管理的 Web 评估还涉及确定所使用的会话令牌的强度以及这些令牌是否得到了适当的保护。我们将学习如何使用 Burp 执行这些测试。

软件工具要求

要完成本章的示例,您需要以下内容:

使用 Sequencer 测试会话令牌强度

为了跟踪应用程序内页面到页面的用户活动,开发人员为每个用户创建和分配唯一的会话令牌值。大多数会话令牌机制包括会话 ID、隐藏表单字段或 cookie。Cookie 被放置在用户的浏览器中,位于客户端。

这些会话令牌应该由渗透测试人员检查,以确保它们的唯一性、随机性和密码强度,以防止信息泄露。

如果会话令牌值很容易被猜到或在登录后保持不变,攻击者可以将预先已知的令牌值应用(或固定)到用户身上。这被称为会话固定攻击。一般来说,攻击的目的是收集用户帐户中的敏感数据,因为攻击者知道会话令牌。

准备工作

我们将检查 OWASP Mutillidae II 中使用的会话令牌,以确保它们以安全和不可预测的方式创建。能够预测和伪造弱会话令牌的攻击者可以执行会话固定攻击。

如何做…

确保 Burp 和 OWASP BWA VM 正在运行,并且已经在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置了 Burp。

  1. OWASP BWA Landing页面,点击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,访问 OWASP Mutillidae II 的主页(URL:http://<your_VM_assigned_IP_address>/mutillidae/)。确保您正在启动一个新的 Mutillidae 应用程序会话,而不是已经登录:

  1. 切换到代理 | HTTP 历史记录选项卡,并选择显示您最初浏览 Mutillidae 主页的请求。

  2. 查找GET请求和包含Set-Cookie:分配的相关响应。每当看到这个分配时,您可以确保您获得了一个新创建的会话 cookie。具体来说,我们对PHPSESSID cookie 值感兴趣:

  1. 突出显示PHPSESSID cookie 的值,右键单击,并选择发送到 Sequencer:

Sequencer 是 Burp 中用于确定会话令牌内部创建的随机性或质量的工具。

  1. PHPSESSID参数的值发送到 Sequencer 后,您将看到该值加载在“选择实时捕获请求”表中。

  2. 在按下“开始实时捕获”按钮之前,向下滚动到响应中的令牌位置部分。在 Cookie 下拉列表中,选择PHPSESSID=<捕获的会话令牌值>

  1. 由于我们已经选择了正确的 cookie 值,我们可以开始实时捕获过程。单击开始实时捕获按钮,Burp 将发送多个请求,从每个响应中提取 PHPSESSID cookie。在每次捕获后,Sequencer 对每个令牌的随机性水平进行统计分析。

  2. 允许捕获收集和分析至少 200 个令牌,但如果您愿意,可以让其运行更长时间:

  1. 一旦您至少有 200 个样本,点击立即分析按钮。每当您准备停止捕获过程时,按停止按钮并确认是:

  1. 分析完成后,Sequencer 的输出提供了一个总体结果。在这种情况下,PHPSESSID 会话令牌的随机性质量非常好。有效熵的数量估计为 112 位。从 Web 渗透测试人员的角度来看,这些会话令牌非常强大,因此在这里没有漏洞可报告。但是,尽管没有漏洞存在,对会话令牌进行此类检查是一个良好的做法:

它是如何工作的...

要更好地理解 Sequencer 背后的数学和假设,请参阅 Portswigger 关于该主题的文档:portswigger.net/burp/documentation/desktop/tools/sequencer/tests

测试 cookie 属性

重要的特定于用户的信息,例如会话令牌,通常存储在客户端浏览器的 cookie 中。由于它们的重要性,cookie 需要受到恶意攻击的保护。这种保护通常以两个标志的形式出现——安全HttpOnly

安全标志告诉浏览器,只有在协议加密时(例如 HTTPS,TLS)才将 cookie 发送到 Web 服务器。该标志保护 cookie 免受在未加密通道上的窃听。

HttpOnly 标志指示浏览器不允许通过 JavaScript 访问或操纵 cookie。该标志保护 cookie 免受跨站点脚本攻击。

做好准备

检查 OWASP Mutillidae II 应用程序中使用的 cookie,以确保保护标志的存在。由于 Mutillidae 应用程序在未加密的通道上运行(例如 HTTP),我们只能检查是否存在 HttpOnly 标志。因此,安全标志不在此处范围之内。

操作步骤...

确保 Burp 和 OWASP BWA VM 正在运行,并且 Burp 已配置在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中。

  1. OWASP BWA 着陆页面,点击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,访问 OWASP Mutillidae II 的主页(URL:http://<your_VM_assigned_IP_address>/mutillidae/)。确保您开始了一个新的会话,并且没有登录到 Mutillidae 应用程序:

  1. 切换到代理| HTTP 历史选项卡,并选择显示您最初浏览 Mutillidae 主页的请求。查找GET请求及其相关的包含Set-Cookie:分配的响应。每当看到这个分配时,您可以确保您获得了一个新创建的会话 cookie。具体来说,我们对PHPSESSID cookie 值感兴趣。

  2. 检查Set-Cookie:分配行的末尾。注意两行都没有 HttpOnly 标志。这意味着 PHPSESSID 和 showhints cookie 值没有受到 JavaScript 操纵的保护。这是一个安全发现,您应该在报告中包括:

它是如何工作的...

如果两个 cookie 都设置了 HttpOnly 标志,那么标志将出现在 Set-Cookie 分配行的末尾。当存在时,该标志将紧随着结束 cookie 的路径范围的分号,后面是字符串 HttpOnly。Secure标志的显示也类似:

Set-Cookie: PHPSESSID=<session token value>;path=/;Secure;HttpOnly;

测试会话固定

会话令牌被分配给用户以进行跟踪。这意味着在未经身份验证时浏览应用程序时,用户会被分配一个唯一的会话 ID,通常存储在 cookie 中。应用程序开发人员应该在用户登录网站后创建一个新的会话令牌。如果这个会话令牌没有改变,应用程序可能容易受到会话固定攻击的影响。确定这个令牌是否从未经身份验证状态到经过身份验证状态改变的值是 Web 渗透测试人员的责任。

当应用程序开发人员不使未经身份验证的会话令牌失效时,会话固定就存在。这使得用户可以在身份验证后继续使用相同的会话令牌。这种情况允许具有窃取会话令牌的攻击者冒充用户。

准备工作

使用 OWASP Mutillidae II 应用程序和 Burp 的 Proxy HTTP 历史和 Comparer,我们将检查未经身份验证的 PHPSESSID 会话令牌值。然后,我们将登录应用程序,并将未经身份验证的值与经过身份验证的值进行比较,以确定会话固定漏洞的存在。

操作步骤

  1. 导航到登录界面(从顶部菜单中点击登录/注册),但暂时不要登录。

  2. 切换到 Burp 的Proxy HTTP 历史选项卡,并查找显示您浏览到登录界面时的GET请求。记下放置在 cookie 中的PHPSESSID参数的值:

  1. 右键单击PHPSESSID参数并将请求发送到 Comparer:

  1. 返回登录界面(从顶部菜单中点击登录/注册),这次使用用户名ed和密码pentest登录。

  2. 登录后,切换到 Burp 的Proxy HTTP 历史选项卡。查找显示您的登录的POST请求(例如,302 HTTP 状态代码),以及紧随POST之后的即时GET请求。注意登录后分配的PHPSESSID。右键单击并将此请求发送到 Comparer。

  3. 切换到 Burp 的 Comparer。适当的请求应该已经为您突出显示。点击右下角的 Words 按钮:

弹出窗口显示了两个请求之间的差异的详细比较。注意PHPSESSID的值在未经身份验证的会话(左侧)和经过身份验证的会话(右侧)之间没有变化。这意味着应用程序存在会话固定漏洞:

工作原理…

在这个示例中,我们检查了未经身份验证用户分配的PHPSESSID值,即使在身份验证后仍保持不变。这是一个安全漏洞,允许进行会话固定攻击。

测试暴露的会话变量

诸如令牌、cookie 或隐藏表单字段之类的会话变量被应用程序开发人员用于在客户端和服务器之间发送数据。由于这些变量在客户端暴露,攻击者可以操纵它们,试图获取未经授权的数据或捕获敏感信息。

Burp 的 Proxy 选项提供了一个功能,可以增强所谓的隐藏表单字段的可见性。这个功能允许 Web 应用程序渗透测试人员确定这些变量中保存的数据的敏感级别。同样,渗透测试人员可以确定操纵这些值是否会导致应用程序行为不同。

准备工作

使用 OWASP Mutillidae II 应用程序和 Burp 的 Proxy 的 Unhide hidden form fields 功能,我们将确定隐藏表单字段值的操纵是否会导致获取未经授权的数据访问。

操作步骤

  1. 切换到 Burp 的Proxy选项卡,向下滚动到响应修改部分,并选中 Unhide hidden form fields 和 Prominently highlight unhidden fields 的复选框:

  1. 导航到User Info页面。OWASP 2013 | A1 – Injection (SQL) | SQLi – Extract Data | User Info (SQL):

  1. 注意现在页面上明显显示的隐藏表单字段:

  1. 让我们尝试操纵所显示的值,将user-info.php更改为admin.php,并查看应用程序的反应。在隐藏字段[page]文本框中将user-info.php修改为admin.php

  1. 在进行更改后按下Enter键。现在您应该看到一个新页面加载,显示PHP 服务器配置信息:

工作原理...

正如本教程中所看到的,隐藏表单字段并没有什么隐秘。作为渗透测试人员,我们应该检查和操纵这些值,以确定是否无意中暴露了敏感信息,或者我们是否可以改变应用程序的行为,使其与我们的角色和身份验证状态所期望的不同。在本教程中,我们甚至没有登录到应用程序中。我们操纵了标记为page的隐藏表单字段,以访问包含指纹信息的页面。这样的信息访问应该受到未经身份验证的用户的保护。

测试跨站请求伪造

跨站请求伪造CSRF)是一种利用经过身份验证的用户会话来允许攻击者强制用户代表其执行不需要的操作的攻击。这种攻击的初始诱饵可能是钓鱼邮件或通过受害者网站上发现的跨站脚本漏洞执行的恶意链接。CSRF 利用可能导致数据泄露,甚至完全妥协 Web 应用程序。

准备工作

使用 OWASP Mutillidae II 应用程序注册表单,确定在同一浏览器(不同标签页)中是否可能发生 CSRF 攻击,同时已经有一个经过身份验证的用户登录到应用程序中。

如何做...

为了对本教程进行基准测试,首先基线化账户表中当前的记录数量,并执行 SQL 注入来查看:

  1. 导航到用户信息页面:OWASP 2013 | A1 – Injection (SQL) | SQLi – Extract Data | User Info (SQL)。

  2. 在用户名提示处,输入一个 SQL 注入有效负载来转储整个账户表内容。有效负载是' or 1=1-- (单引号或 1 等于 1 破折号空格)。然后点击查看账户详情按钮。

  3. 请记住在两个破折号后包括空格,因为这是一个 MySQL 数据库;否则,有效负载将无法工作:

  1. 当操作正确时,会显示一个消息,指出数据库中找到了 24 条用户记录。消息后显示的数据显示了所有 24 个账户的用户名、密码和签名字符串。这里只显示了两个账户的详细信息作为示例:

我们确认数据库的账户表中目前存在 24 条记录。

  1. 现在,返回到登录页面(从顶部菜单中点击登录/注册),并选择“请在此注册”链接。

  2. 点击“请在此注册”链接后,会出现一个注册表格。

  3. 填写表格以创建一个测试账户。将用户名输入为tester,密码输入为tester,签名输入为This is a tester account

  1. 点击创建账户按钮后,您应该收到一个绿色横幅,确认账户已创建:

  1. 返回到用户信息页面:OWASP 2013| A1 – Injection (SQL) | SQLi – Extract Data | User Info (SQL)

  2. 再次执行 SQL 注入攻击,并验证您现在可以在账户表中看到 25 行,而不是之前的 24 行:

  1. 切换到 Burp 的代理 HTTP 历史记录标签,并查看创建测试账户的POST请求。

  2. 研究这个POST请求显示了POST操作(register.php)和执行操作所需的主体数据,即用户名密码确认密码我的签名。还要注意没有使用 CSRF 令牌。CSRF 令牌被放置在 Web 表单中,以防止我们即将执行的攻击。让我们继续。

  3. 右键单击POST请求,然后单击发送到 Repeater:

  1. 如果您使用 Burp Professional,请右键单击选择 Engagement 工具|生成 CSRF PoC:

  1. 单击此功能后,将生成一个弹出框,其中包含在注册页面上使用的相同表单,但没有任何 CSRF 令牌保护:

  1. 如果您使用 Burp Community,可以通过查看注册页面的源代码轻松重新创建CSRF PoC表单:

  1. 在查看页面源代码时,向下滚动到<form>标签部分。为简洁起见,下面重新创建了表单。将attacker作为用户名、密码和签名的值。复制以下 HTML 代码并将其保存在名为csrf.html的文件中:
<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.56.101/mutillidae/index.php?page=register.php" method="POST">
      <input type="hidden" name="csrf-token" value="" />
      <input type="hidden" name="username" value="attacker" />
      <input type="hidden" name="password" value="attacker" />
      <input type="hidden" name="confirm_password" value="attacker" 
/>      <input type="hidden" name="my_signature" value="attacker account" />
      <input type="hidden" name="register-php-submit-button" value="Create Account" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>
  1. 现在,返回到登录屏幕(从顶部菜单中单击登录/注册),并使用用户名ed和密码pentest登录应用程序。

  2. 打开您的计算机上保存了csrf.html文件的位置。将文件拖到已经通过身份验证的 ed 的浏览器中。在您将文件拖到此浏览器后,csrf.html将出现为同一浏览器中的单独标签:

  1. 出于演示目的,有一个提交请求按钮。但是,在实际情况中,JavaScript 函数会自动执行创建攻击者帐户的操作。单击提交请求按钮:

您应该收到一个确认消息,即攻击者帐户已创建:

  1. 切换到 Burp 的 Proxy | HTTP history 选项卡,并找到恶意执行的用于在 ed 的经过身份验证的会话上创建攻击者帐户的POST

  1. 返回到用户信息页面:OWASP 2013 | A1 – Injection (SQL) | SQLi – Extract Data | User Info (SQL),然后再次执行 SQL 注入攻击。现在,您将看到帐户表中的行数从之前的 25 行增加到 26 行:

它是如何工作的...

CSRF 攻击需要一个经过身份验证的用户会话,以便代表攻击者在应用程序中秘密执行操作。在这种情况下,攻击者利用 ed 的会话重新运行注册表单,为攻击者创建一个帐户。如果ed是管理员,这可能会允许提升帐户角色。

第七章:评估业务逻辑

在本章中,我们将涵盖以下内容:

  • 测试业务逻辑数据验证

  • 无限制的文件上传 - 绕过弱验证

  • 执行进程时间攻击

  • 测试工作流的规避

  • 上传恶意文件 - 多语言

介绍

本章介绍了业务逻辑测试的基础知识,包括对该领域中一些常见测试的解释。Web 渗透测试涉及对业务逻辑的关键评估,以确定应用程序设计在执行完整性检查方面的表现如何,特别是在连续的应用程序功能步骤中,我们将学习如何使用 Burp 执行此类测试。

软件工具要求

要完成本章的练习,您将需要以下内容:

  • OWASP Broken Web Applications (VM)

  • OWASP Mutillidae 链接

  • Burp Proxy Community 或 Professional (portswigger.net/burp/)

测试业务逻辑数据验证

业务逻辑数据验证错误是由于缺乏服务器端检查,特别是在一系列事件中,如购物车结账。如果存在设计缺陷,如线程问题,这些缺陷可能允许攻击者在购买之前修改或更改其购物车内容或价格,以降低支付的价格。

准备工作

使用OWASP WebGoat应用程序和 Burp,我们将利用业务逻辑设计缺陷,以非常便宜的价格购买许多大额商品。

如何操作...

  1. 确保owaspbwa虚拟机正在运行。从虚拟机的初始登陆页面选择 OWASP WebGoat 应用程序。登陆页面将配置为与您的机器特定的 IP 地址:

  1. 点击 OWASP WebGoat 链接后,将提示您输入一些登录凭据。使用以下凭据:用户名:guest密码:guest

  2. 认证后,点击开始 WebGoat按钮以访问应用程序练习:

  1. 从左侧菜单中点击并发性 | 购物车并发性缺陷

练习解释了购物车设计中存在线程问题,将允许我们以较低的价格购买商品。让我们利用这个设计缺陷!

  1. 1添加到数量框中的Sony - Vaio with Intel Centrino项目。点击更新购物车按钮:

  1. 切换到 Burp Proxy | HTTP 历史选项卡。找到购物车请求,右键单击,点击发送到 Repeater:

  1. 在 Burp 的 Repeater 选项卡中,将QTY3参数从1更改为10

  1. 留在 Burp Repeater 中,在请求窗格中,右键单击并选择在浏览器中请求 | 在当前浏览器会话中

  1. 弹出窗口显示修改后的请求。点击复制按钮:

  1. 在包含购物车的同一 Firefox 浏览器中,打开一个新标签,并粘贴上一步中复制到剪贴板中的 URL:

  1. 按下Enter键,查看修改后的数量为10的请求重新提交:

  1. 切换到包含您购物车的原始标签(原始数量为1的购物车)。点击购买按钮:

  1. 在下一个屏幕上,在点击确认按钮之前,切换到第二个标签,并再次更新购物车,但这次使用我们的新数量10,然后点击更新购物车:

  1. 返回第一个标签,并点击确认按钮:

注意我们能够以一个商品的价格购买 10 台 Sony Vaio 笔记本电脑!

工作原理...

线程安全问题可能会产生意外结果。对于许多语言,开发人员对如何将变量和方法声明为线程安全的了解至关重要。未被隔离的线程,例如本教程中显示的购物车内容,可能导致用户获得意外的产品折扣。

无限制文件上传-绕过弱验证

许多应用程序允许上传文件以各种原因。服务器端的业务逻辑必须包括检查可接受的文件;这被称为白名单。如果此类检查薄弱或仅涉及文件属性的一个方面(例如,仅限于文件扩展名),攻击者可以利用这些弱点并上传可能在服务器上可执行的意外文件类型。

做好准备

使用Damn Vulnerable Web ApplicationDVWA)应用程序和 Burp,我们将利用文件上传页面中的业务逻辑设计缺陷。

如何做...

  1. 确保 owaspbwa VM 正在运行。从 VM 的初始登陆页面选择 DVWA。登陆页面将配置为与您的计算机特定的 IP 地址。

  2. 在登录页面,使用以下凭据:用户名:user;密码:user

  3. 从左侧菜单中选择 DVWA 安全选项。将默认设置从低更改为中,然后单击提交:

  1. 从左侧菜单中选择“上传”页面:

  1. 注意页面指示用户只能上传图像。如果我们尝试上传除 JPG 图像以外的其他类型的文件,我们将在左上角收到错误消息:

  1. 在本地计算机上创建任何类型的文件,除了 JPG。例如,创建一个名为malicious_spreadsheet.xlsx的 Microsoft Excel 文件。出于本教程的目的,它不需要任何内容。

  2. 切换到 Burp 的代理|拦截选项卡。使用“拦截器”按钮打开拦截器。

  3. 返回到 Firefox,并使用浏览按钮在系统上找到malicious_spreadsheet.xlsx文件,然后单击上传按钮:

  1. 在 Burp 的代理|拦截器中暂停请求,将Content-typeapplication/vnd.openxmlformats-officedocument.spreadsheet.sheet更改为image/jpeg
  • 这是原始版本:

    • 这是修改后的版本:

  1. 单击前进按钮。现在通过单击拦截器上的切换按钮将拦截器关闭。

  2. 注意文件上传成功!我们能够绕过弱数据验证检查并上传除图像以外的文件:

它是如何工作的...

由于服务器端检查薄弱,我们能够轻松规避仅限于图像的限制并上传我们选择的文件类型。应用程序代码仅检查与image/jpeg匹配的内容类型,这很容易通过 Burp 等拦截代理进行修改。开发人员需要同时在应用程序代码中将内容类型和文件扩展名列入白名单,以防止此类利用发生。

执行过程时间攻击

通过监视应用程序完成任务所需的时间,攻击者可以收集或推断有关应用程序编码的信息。例如,使用有效凭据的登录过程比使用无效凭据的登录过程更快地收到响应。响应时间的延迟泄漏了与系统进程相关的信息。攻击者可以使用响应时间执行帐户枚举,并根据响应时间确定有效用户名。

做好准备

对于此教程,您将需要来自wfuzzcommon_pass.txt单词列表:

使用 OWASP Mutillidae II,我们将确定应用程序是否基于强制登录的响应时间提供信息泄漏。

如何做...

确保 Burp 正在运行,并确保 owaspbwa VM 正在运行,并且已经在用于查看 owaspbwa 应用程序的 Firefox 浏览器中配置了 Burp。

  1. 从 owaspbwa 登陆页面,单击链接到 OWASP Mutillidae II 应用程序。

  2. 打开 Firefox 浏览器,转到 OWASP Mutillidae II 的主页(URL:http://<your_VM_assigned_IP_address>/mutillidae/)。

  3. 转到登录页面,使用用户名ed和密码pentest登录。

  4. 切换到 Burp 的代理|HTTP 历史选项卡,找到刚刚执行的登录,右键单击,并选择发送到入侵者:

  1. 转到入侵者|位置选项卡,并清除所有有效负载标记,使用右侧的清除§按钮:

  1. 选择密码字段,并单击“添加§”按钮以在该字段周围添加有效负载标记:

  1. 还要删除PHPSESSID令牌。删除此令牌中的值(等号后面的内容),并将其留空。这一步非常重要,因为如果您不小心在请求中留下此令牌,您将无法看到时间差异,因为应用程序会认为您已经登录:

  1. 转到入侵者|有效负载选项卡。在有效负载选项[简单列表]中,我们将使用来自wfuzzwordlist添加一些无效值,其中包含常见密码:wfuzz | wordlists | other | common_pass.txt

  1. 滚动到底部,取消“有效负载编码”的复选框:

  1. 单击“开始攻击”按钮。将显示一个攻击结果表。让攻击完成。从攻击结果表中,选择列并选中“接收响应”。选中“完成响应”以将这些列添加到攻击结果表中:

  1. 分析提供的结果。虽然并非在每个响应中都明显,但请注意当使用无效密码(如administrator)时的延迟。接收响应时间为156,但完成响应时间为166。然而,有效密码pentest(仅302)会立即收到响应:50(接收),和50(完成):

工作原理...

在处理错误消息或无效编码路径时,可能会发生信息泄露,这比有效的编码路径花费更长的时间。开发人员必须确保业务逻辑不会向攻击者透露这些线索。

测试工作流的规避

必须由 Web 应用程序渗透测试人员测试购物车到支付网关的交互,以确保工作流程不能按顺序执行。除非在服务器端首先验证了购物车内容,否则不应进行付款。如果缺少此检查,攻击者可以在实际购买之前更改价格、数量或两者。

准备就绪

使用 OWASP WebGoat 应用程序和 Burp,我们将利用业务逻辑设计缺陷,在购买之前没有服务器端验证。

如何做...

  1. 确保 owaspbwa VM 正在运行。从 VM 的初始登陆页面选择 OWASP WebGoat 应用程序。登陆页面将配置为特定于您的计算机的 IP 地址。

  2. 单击 OWASP WebGoat 链接后,将提示您输入登录凭据。使用以下凭据:用户名:guest;密码:guest

  3. 认证后,单击“开始 WebGoat”按钮以访问应用程序练习。

  4. 单击左侧菜单中的 AJAX 安全性|不安全的客户端存储。您将看到一个购物车:

  1. 切换到 Burp 的代理|HTTP 历史选项卡,单击“过滤”按钮,并确保您的“按 MIME 类型过滤”部分包括“脚本”。如果未选中“脚本”,请务必现在选中它:

  1. 返回到 Firefox 浏览器,使用 WebGoat 并为“惠普 - 带英特尔 Centrino 的 Pavilion 笔记本”项目指定数量为2

  1. 切换回 Burp 的代理|HTTP 历史选项卡,并注意与您对数量所做的更改相关的 JavaScript(*.js)文件。注意一个名为clientSideValiation.js的脚本。确保状态码为200而不是304(未修改)。只有200状态码才会显示脚本的源代码:

  1. 选择clientSideValidation.js文件,并在响应选项卡中查看其源代码。

  2. 请注意,优惠码在 JavaScript 文件中是硬编码的。但是,如果按照它们的字面意思使用,它们将不起作用:

  1. 继续查看源代码,并注意在 JavaScript 文件中找到了一个decrypt函数。我们可以通过这个函数测试其中一个优惠码。让我们在 Firefox 浏览器中尝试这个测试:

  1. 在浏览器中打开开发者工具(F12),转到控制台选项卡。在控制台中粘贴(查找>>提示)以下命令:
decrypt('emph');
  1. 您可以使用此命令对数组中声明的任何优惠码调用decrypt函数:

  1. 按下Enter键后,您将看到优惠码被解密为单词GOLD

  1. 在“输入您的优惠码”框中输入单词GOLD。注意金额现在要少得多。接下来,点击“购买”按钮:

  1. 我们收到有关第 1 阶段完成的确认。现在让我们试着免费购买:

  1. 切换到 Burp 的代理 | 拦截选项卡,并使用拦截器打开按钮打开拦截器。

  2. 返回到 Firefox 并按下购买按钮。在请求暂停时,将$1,599.99 的金额修改为$0.00。查找GRANDTOT参数以帮助您找到要更改的总金额:

  1. 点击转发按钮。现在通过单击拦截器关闭切换按钮来关闭拦截器。

  2. 您应该收到一个成功的消息。请注意,现在收取的总费用为$0.00:

工作原理...

由于在收取信用卡之前,未对优惠码和总金额进行服务器端检查,因此我们能够规避分配的价格并自行设置价格。

上传恶意文件 - 多语言

多语言是一个使用多种语言的术语。如果我们将这个概念引入黑客行为,它意味着通过使用不同的语言作为执行点来创建跨站脚本XSS)攻击向量。例如,攻击者可以构造有效的图像并嵌入 JavaScript。 JavaScript 有效负载的放置通常在图像的注释部分。一旦图像在浏览器中加载,取决于 Web 服务器声明的内容类型的严格性以及浏览器对内容类型的解释,XSS 内容可能会执行。

准备工作

如何做...

  1. 确保 owaspbwa 虚拟机正在运行。从虚拟机的初始登陆页面选择 OWASP WebGoat 应用程序。登陆页面将配置为与您的机器特定的 IP 地址。

  2. 点击 OWASP WebGoat 链接后,将提示您输入登录凭据。使用以下凭据:用户名:guest密码:guest

  3. 经过身份验证后,单击“启动 WebGoat”按钮以访问应用程序练习。

  4. 从左侧菜单中点击恶意执行 | 恶意文件执行。您将看到一个文件上传功能页面。说明中指出,只允许上传图像:

  1. 浏览到您从本食谱开头提到的 PortSwigger 博客页面下载的xss.jpg图像所保存的位置。

  2. 以下是图像的屏幕截图。正如你所看到的,很难检测到图像中包含的任何 XSS 漏洞。它被隐藏得很隐蔽。

  3. 点击浏览按钮选择xss.jpg文件:

  1. 切换到 Burp 的代理 | 选项。确保你正在捕获客户端响应并且已启用以下设置。这将允许我们捕获修改或拦截的 HTTP 响应:

  1. 切换到 Burp 的代理 | 拦截选项卡。通过单击拦截器打开按钮打开拦截器。

  2. 返回到 Firefox 浏览器,然后点击开始上传按钮。消息应该在 Burp 的拦截器中暂停。

  1. 在请求暂停时的拦截窗口中,在底部的搜索框中键入Burp rocks。你应该在图像中间看到一个匹配项。这是我们的多语言有效负载。它是一张图片,但它包含了图像注释中的隐藏 XSS 脚本:

  1. 点击转发按钮。现在通过单击拦截器关闭按钮关闭拦截器。

  2. 使用记事本或你喜欢的文本编辑器,创建一个名为poly.jsp的新文件,并在文件中写入以下代码:

  1. 返回到恶意文件执行页面,并浏览到你创建的poly.jsp文件,然后点击开始上传按钮。poly.jsp是一个可以在这个 Web 服务器上执行的 Java 服务器页面文件。根据说明,我们必须在提供的路径中创建一个guest.txt文件。此代码在 JSP 脚本标记代码中创建该文件:

  1. 右键单击未识别的图像,然后选择复制图像位置

  2. 在与 WebGoat 相同的 Firefox 浏览器中打开一个新标签,并在新标签中粘贴图像位置。按Enter执行脚本,并在转到下一步之前给脚本几秒钟在后台运行。

  3. 切换回第一个标签,F5,刷新页面,你应该收到成功完成的消息。如果你的脚本运行缓慢,尝试在上传页面上再次上传poly.jsp。成功消息应该出现:

它是如何工作的...

由于不受限制的文件上传漏洞,我们可以上传恶意文件,如多语言文件,而不会被 Web 服务器检测到。许多网站允许上传图片,因此开发人员必须确保这些图片不携带其中的 XSS 有效负载。在这方面的保护可以采用魔术数字检查或特殊代理服务器筛选所有上传。

还有更多...

要了解更多关于多语言的信息,请参考 Portswigger 博客:portswigger.net/blog/bypassing-csp-using-polyglot-jpegs

第八章:评估输入验证检查

在本章中,我们将涵盖以下操作步骤:

  • 测试反射型跨站脚本

  • 测试存储型跨站脚本

  • 测试 HTTP 动词篡改

  • 测试 HTTP 参数污染

  • 测试 SQL 注入

  • 测试命令注入

介绍

在使用应用程序代码之前未验证从客户端接收的任何输入,是在 Web 应用程序中发现的最常见的安全漏洞之一。这个缺陷是导致主要安全问题的根源,比如 SQL 注入和跨站脚本(XSS)。Web 渗透测试人员必须评估并确定应用程序是否反射回任何输入或执行。我们将学习如何使用 Burp 来执行这样的测试。

软件工具要求

为了完成本章的操作步骤,您需要以下内容:

  • OWASP Broken Web Applications(VM)

  • OWASP Mutillidae 链接

  • Burp Proxy Community 或 Professional (portswigger.net/burp/)

测试反射型跨站脚本

当恶意 JavaScript 被注入到输入字段、参数或标头中,并在从 Web 服务器返回后在浏览器中执行时,就会发生反射型跨站脚本。反射型 XSS 发生在 JavaScript 的执行仅在浏览器中反映,而不是网页的永久部分。渗透测试人员需要测试发送到 Web 服务器的所有客户端值,以确定是否可能发生 XSS。

准备工作

使用 OWASP Mutillidae II,让我们确定应用程序是否防范了反射型跨站脚本(XSS)。

操作步骤...

  1. 从 OWASP Mutilliae II 菜单中,通过导航到 OWASP 2013 | A3 - 跨站脚本(XSS)| 反射(一级)| 渗透测试工具查找,选择登录:

  1. 从下拉列表中选择一个工具,然后点击查找工具按钮。下拉列表中的任何值都适用于此操作:

  1. 切换到 Burp Proxy | HTTP 历史记录,并通过选择查找工具来找到您刚刚创建的 HTTP 消息。请注意,在请求中有一个名为ToolID的参数。在下面的示例中,值为16

  1. 切换到响应选项卡,并注意从请求返回的 JSON。您可以通过在底部的搜索框中输入PenTest来更容易地找到响应中的 JavaScript 函数。请注意,tool_id在名为toolIDRequested的响应参数中反射。这可能是 XSS 的攻击向量:

  1. 将请求发送到 Repeater。在数字后面的ToolID参数中添加一个 XSS 有效负载。使用一个简单的有效负载,比如<script>alert(1);</script>

  1. 点击“Go”并检查返回的 JSON 响应,搜索PenTest。注意我们的有效负载正好如输入的那样返回。看起来开发人员在使用之前没有对任何输入数据进行消毒。让我们利用这个缺陷:

  1. 由于我们使用的是 JSON 而不是 HTML,我们需要调整有效负载以匹配返回的 JSON 的结构。我们将欺骗 JSON,使其认为有效负载是合法的。我们将原始的<script>alert(1);</script>有效负载修改为"}} )%3balert(1)%3b//

  2. 切换到 Burp Proxy | 拦截选项卡。通过打开“拦截器打开”按钮打开拦截器。

  3. 返回到 Firefox,从下拉列表中选择另一个工具,然后点击查找工具按钮。

  4. 在代理|拦截器暂停请求时,在“工具 ID”号之后立即插入新的有效负载"}} )%3balert(1)%3b//

  1. 点击前进按钮。通过切换到拦截器关闭拦截器。

  2. 返回到 Firefox 浏览器,查看弹出的警报框。您已成功展示了反射型 XSS 漏洞的概念证明(PoC):

工作原理...

由于在使用来自客户端接收的数据之前未进行充分的输入清理。在这种情况下,渗透测试工具标识符会在从客户端接收到的响应中反射,为 XSS 攻击提供了攻击向量。

测试存储的跨站脚本

存储的跨站脚本发生在恶意 JavaScript 被注入输入字段、参数或标头后,从 Web 服务器返回后在浏览器中执行并成为页面的永久部分。当恶意 JavaScript 存储在数据库中并稍后用于填充网页的显示时,就会发生存储的 XSS。渗透测试人员需要测试发送到 Web 服务器的所有客户端值,以确定是否可能发生 XSS。

准备工作

使用 OWASP Mutillidae II,让我们确定应用程序是否防范存储的跨站脚本。

如何做...

  1. 从 OWASP Mutilliae II 菜单中,通过导航到 OWASP 2013 | A3 - 跨站脚本(XSS)| 持久(一级)| 添加到您的博客,选择登录:

  1. 在文本区域中放入一些文字。在点击保存博客条目按钮之前,让我们尝试一个带有该条目的有效负载:

  1. 切换到 Burp 代理|拦截选项卡。使用拦截器按钮打开拦截器。

  2. 在代理|拦截器暂停请求时,立即插入新的有效负载<script>alert(1);</script>,并将其放在您添加到博客的文字后面:

  1. 单击转发按钮。通过切换到拦截器关闭拦截器。

  2. 返回到 Firefox 浏览器,查看显示的弹出警报框:

  1. 单击“确定”按钮关闭弹出窗口。重新加载页面,您将再次看到警报弹出窗口。这是因为您的恶意脚本已成为页面的永久部分。您已成功展示了存储 XSS 漏洞的概念证明(PoC)!

它是如何工作的...

存储型或持久型 XSS 之所以会发生,是因为应用程序不仅忽略对输入的消毒,而且还将输入存储在数据库中。因此,当重新加载页面并用数据库数据填充页面时,恶意脚本将与数据一起执行。

测试 HTTP 动词篡改

HTTP 请求可以包括除 GET 和 POST 之外的方法。作为渗透测试人员,确定 Web 服务器允许哪些其他 HTTP 动词(即方法)是很重要的。对其他动词的支持可能会泄露敏感信息(例如 TRACE)或允许危险地调用应用程序代码(例如 DELETE)。让我们看看 Burp 如何帮助测试 HTTP 动词篡改。

准备工作

使用 OWASP Mutillidae II,让我们确定应用程序是否允许除 GET 和 POST 之外的 HTTP 动词。

如何做...

  1. 导航到 OWASP Mutillidae II 的主页。

  2. 切换到 Burp 代理|HTTP 历史记录,并查找您在浏览 Mutillidae 主页时创建的 HTTP 请求。注意使用的方法是 GET。右键单击并将请求发送到入侵者:

  1. 在入侵者|位置选项卡中,清除所有建议的有效负载标记。突出显示GET动词,并单击添加$按钮将有效负载标记放在动词周围:

  1. 在入侵者|有效负载选项卡中,将以下值添加到有效负载选项[简单列表]文本框中:
  • 选项

  • 发布

  • 放置

  • 删除

  • 跟踪

  • 跟踪

  • 连接

  • PROPFIND

  • PROPPATCH

  • MKCOL

  • 复制

  1. 取消 Payloads 页面底部的 Payload Encoding 复选框,然后单击开始攻击按钮。

  2. 当攻击结果表出现并攻击完成时,请注意所有返回状态码为 200 的动词。这是令人担忧的,因为大多数 Web 服务器不应该支持这么多动词。特别是对 TRACE 和 TRACK 的支持将包括在调查结果和最终报告中作为漏洞:

它是如何工作...

测试 HTTP 动词篡改包括使用不同的 HTTP 方法发送请求并分析接收到的响应。测试人员需要确定是否对任何测试的动词返回了状态码 200,这表明 Web 服务器允许此动词类型的请求。

测试 HTTP 参数污染

HTTP 参数污染HPP)是一种攻击,其中多个 HTTP 参数以相同的名称发送到 Web 服务器。其目的是确定应用程序是否以意想不到的方式响应,从而进行利用。例如,在 GET 请求中,可以向查询字符串添加额外的参数,如此:“&name=value”,其中 name 是应用程序代码已知的重复参数名称。同样,HPP 攻击也可以在 POST 请求中执行,方法是在 POST 主体数据中重复参数名称。

准备工作

使用 OWASP Mutillidae II,让我们确定应用程序是否容易受到 HPP 攻击。

如何做...

  1. 从 OWASP Mutilliae II 菜单中,通过导航到 OWASP 2013 | A1 - Injection (Other) | HTTP Parameter Pollution | Poll Question 选择登录:

  1. 从单选按钮中选择一个工具,添加你的缩写,然后点击提交投票按钮:

  1. 切换到 Burp 代理|HTTP 历史选项卡,并找到刚刚从用户投票页面执行的请求。注意名为choice的参数。该参数的值是 Nmap。右键单击并将此请求发送到 Repeater:

  1. 切换到 Burp Repeater 并在查询字符串中添加另一个具有相同名称的参数。让我们从用户投票列表中选择另一个工具,并将其附加到查询字符串,例如“&choice=tcpdump”。单击 Go 发送请求:

  1. 检查响应。应用程序代码接受了哪个选择?通过搜索Your choice was字符串很容易找到。显然,应用程序代码接受了重复的选择参数值来计入用户投票:

它是如何工作的...

应用程序代码未能检查传递给函数的具有相同名称的多个参数。结果是应用程序通常对最后一个参数匹配进行操作。这可能导致奇怪的行为和意外的结果。

测试 SQL 注入

SQL 注入攻击涉及攻击者向数据库提供输入,而数据库在没有任何验证或净化的情况下接收和使用该输入。结果是泄露敏感数据,修改数据,甚至绕过身份验证机制。

准备工作

使用 OWASP Mutillidae II 登录页面,让我们确定应用程序是否容易受到SQL 注入SQLi)攻击。

如何做...

  1. 从 OWASP Mutilliae II 菜单中,通过导航到 OWASP 2013 | A1-Injection (SQL) | SQLi – Bypass Authentication | Login 选择登录:

  1. 在登录屏幕上,将无效的凭据放入usernamepassword文本框中。例如,usernametesterpasswordtester。在点击登录按钮之前,让我们打开代理|拦截器。

  2. 切换到 Burp 代理|拦截器选项卡。通过切换到拦截器打开拦截器。

  3. 在代理|拦截器暂停请求时,在用户名参数中插入新的有效负载' or 1=1--<space>,然后点击登录按钮:

  1. 点击前进按钮。通过切换到拦截器关闭拦截器。

  2. 返回到 Firefox 浏览器,注意你现在已经以管理员身份登录!

它是如何工作的...

测试账户在数据库中不存在;然而,' or 1=1--<space>有效负载导致绕过身份验证机制,因为 SQL 代码基于未经净化的用户输入构造了查询。管理员账户是数据库中创建的第一个账户,因此数据库默认使用该账户。

还有更多...

我们在 Burp Intruder 中使用了 wfuzz 的 SQLi wordlist 来测试同一用户名字段中的许多不同 payloads。检查结果表中每次攻击的响应,以确定 payload 是否成功执行了 SQL 注入。

构建 SQL 注入 payload 需要一些对后端数据库和特定语法的了解。

测试命令注入

命令注入涉及攻击者尝试在 HTTP 请求中调用系统命令,通常在终端会话中执行。许多 Web 应用程序允许通过 UI 进行系统命令以进行故障排除。Web 渗透测试人员必须测试网页是否允许在通常应受限制的系统上执行进一步的命令。

准备工作

对于这个示例,您将需要 Unix 命令的 SecLists Payload:

使用 OWASP Mutillidae II DNS Lookup 页面,让我们确定应用程序是否容易受到命令注入攻击。

如何操作...

  1. 从 OWASP Mutilliae II 菜单中,通过导航到 OWASP 2013 | A1-Injection (Other) | Command Injection | DNS Lookup 来选择 DNS Lookup:

  1. 在 DNS Lookup 页面,将 IP 地址127.0.0.1输入到文本框中,然后点击 Lookup DNS 按钮:

  1. 切换到 Burp Proxy | HTTP history 标签,并查找您刚刚执行的请求。右键单击 Send to Intruder:

  1. 在 Intruder | Positions 标签中,使用 Clear $按钮清除所有建议的 payload 标记。在target_host参数中,在127.0.0.1 IP 地址后面放置一个管道符号(|)。在管道符号后面放置一个X。突出显示X,然后点击 Add $按钮将X用 payload 标记包装起来:

  1. 在 Intruder | Payloads 标签中,点击 Load 按钮。浏览到您从 GitHub 下载 SecLists-master wordlists 的位置。导航到FUZZDB_UnixAttacks.txt wordlist 的位置,并使用以下内容填充 Payload Options [Simple list]框:SecLists-master | Fuzzing | FUZZDB_UnixAttacks.txt

  1. 在 Payloads 标签页的底部取消选中 Payload Encoding 框,然后点击 Start Attack 按钮。

  2. 允许攻击继续,直到达到 payload 50。注意在 payload 45左右的 Render 标签周围的响应。我们能够在操作系统上执行命令,比如id,它会在网页上显示命令的结果:

工作原理...

未能定义和验证用户输入是否符合可接受的系统命令列表可能导致命令注入漏洞。在这种情况下,应用程序代码未限制通过 UI 可用的系统命令,允许在操作系统上查看和执行应该受限制的命令。

第九章:攻击客户端

在本章中,我们将涵盖以下示例:

  • 测试点击劫持

  • 测试基于 DOM 的跨站脚本

  • 测试 JavaScript 执行

  • 测试 HTML 注入

  • 测试客户端资源操纵

介绍

在浏览器中执行的客户端可用代码需要测试以确定是否存在敏感信息或允许用户输入而没有经过服务器端验证。学习如何使用 Burp 执行这些测试。

软件工具要求

要完成本章的示例,您需要以下内容:

  • OWASP 破损 Web 应用(VM)

  • OWASP Mutillidae 链接

  • Burp 代理社区或专业版(portswigger.net/burp/

测试点击劫持

点击劫持也被称为UI 重定向攻击。这种攻击是一种欺骗性技术,可以诱使用户与透明 iframe 进行交互,并可能向受攻击者控制的网站发送未经授权的命令或敏感信息。让我们看看如何使用 Burp Clickbandit 来测试网站是否容易受到点击劫持攻击。

做好准备

使用 OWASP Mutillidae II 应用程序和 Burp Clickbandit,让我们确定该应用程序是否能够防御点击劫持攻击。

如何做...

  1. 导航到 OWASP Mutillidae II 的主页。

  2. 切换到 Burp,并从顶级菜单中选择 Burp Clickbandit:

  1. 一个弹出框解释了该工具。单击名为复制 Clickbandit 到剪贴板的按钮:

  1. 返回到 Firefox 浏览器,按下F12以打开开发者工具。从开发者工具菜单中,选择控制台,并查找底部的提示:

  1. 在控制台提示(例如,>>),粘贴到提示中您复制到剪贴板的 Clickbandit 脚本:

  1. 在提示中粘贴脚本后,按Enter键。您应该看到 Burp Clickbandit 记录模式。单击开始按钮开始:

  1. 出现后,开始在应用程序上四处点击。单击 Mutillidae 菜单顶部的可用链接,单击侧边菜单上的可用链接,或浏览 Mutillidae 内的页面。点击了一圈后,在 Burp Clickbandit 菜单上按完成按钮。

  2. 您应该注意到大红色块透明地出现在 Mutillidae 网页的顶部。每个红色块表示恶意 iframe 可能出现的位置。随意单击每个红色块,以查看下一个红色块出现,依此类推:

  1. 一旦您希望停止并保存您的结果,请单击保存按钮。这将保存 Clickjacking PoC 在一个 HTML 文件中,供您放在您的渗透测试报告中。

它是如何工作的...

由于 Mutillidae 应用程序没有使用设置为DENY的 X-FRAME-OPTIONS 标头,因此可以将恶意 iframe 注入到 Mutillidae 网页中。Clickbandit 增加了 iframe 的不透明度,以便查看,并创建了一个概念验证PoC)来说明漏洞如何被利用。

测试基于 DOM 的跨站脚本

文档对象模型DOM)是浏览器中捕获的所有 HTML 网页的树状结构表示。开发人员使用 DOM 在浏览器中存储信息以方便使用。作为 Web 渗透测试人员,确定是否存在基于 DOM 的跨站脚本XSS)漏洞非常重要。

做好准备

使用 OWASP Mutillidae II HTML5 Web 存储练习,让我们确定该应用程序是否容易受到基于 DOM 的 XSS 攻击。

如何做...

  1. 导航到 OWASP 2013 | HTML5 Web Storage | HTML5 Storage:

  1. 注意使用 HTML5 Web 存储位置存储的 DOM 中的名称/值对。Web 存储包括会话和本地变量。开发人员使用这些存储位置方便地在用户的浏览器中存储信息:

  1. 切换到 Burp 代理拦截选项卡。通过点击拦截器打开按钮来打开拦截器。

  2. 通过按下F5或点击重新加载按钮在 Firefox 浏览器中重新加载 HTML 5 Web 存储页面。

  3. 切换到 Burp 代理 HTTP 历史选项卡。找到刚刚执行的重新加载创建的暂停请求。注意User-Agent字符串被高亮显示,如下截图所示:

  1. 用以下脚本替换前面高亮显示的User-Agent
<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>
  1. 点击“Forward”按钮。现在,通过点击拦截器关闭按钮来关闭拦截器。

  2. 注意弹出的警报显示 DOM 存储的内容:

工作原理...

注入的脚本说明了跨站脚本漏洞的存在,结合 DOM 中存储的敏感信息,可以允许攻击者窃取敏感数据。

测试 JavaScript 执行

JavaScript 注入是跨站脚本攻击的一个子类型,特指对 JavaScript 的任意注入。该领域的漏洞可能影响浏览器中保存的敏感信息,如用户会话 cookie,或者可能导致页面内容的修改,允许来自攻击者控制站点的脚本执行。

准备工作

使用 OWASP Mutillidae II 密码生成器练习,让我们确定应用程序是否容易受到 JavaScript XSS 攻击。

如何操作...

  1. 导航到 OWASP 2013 | A1 – 注入(其他)| JavaScript 注入 | 密码生成器:

  1. 注意点击“生成密码”按钮后,会显示一个密码。还要注意 URL 中提供的用户名值原样反映在网页上:http://192.168.56.101/mutillidae/index.php?page=password-generator.php&username=anonymous。这意味着页面可能存在潜在的 XSS 漏洞:

  1. 切换到 Burp 代理 HTTP 历史选项卡,并找到与密码生成器页面相关的 HTTP 消息。切换到消息编辑器中的响应选项卡,并在字符串catch上执行搜索。注意返回的 JavaScript 具有一个 catch 块,其中显示给用户的错误消息。我们将使用这个位置来放置一个精心制作的 JavaScript 注入攻击:

  1. 切换到 Burp 代理拦截选项卡。通过点击拦截器打开按钮来打开拦截器。

  2. 通过按下F5或点击重新加载按钮在 Firefox 浏览器中重新加载密码生成器页面。

  3. 切换到 Burp 代理拦截器选项卡。在请求暂停时,注意username参数值如下所示高亮显示:

  1. 用以下精心制作的 JavaScript 注入脚本替换前面高亮显示的anonymous值:
canary";}catch(e){}alert(1);try{a="
  1. 点击“Forward”按钮。现在,通过点击拦截器关闭按钮来关闭拦截器。

  2. 注意弹出的警报。您已成功演示了 JavaScript 注入 XSS 漏洞的存在!

工作原理...

canary and ending the statement with a semicolon, a specially crafted *new* catch block was created, which contained the malicious JavaScript payload.

测试 HTML 注入

HTML 注入是将任意 HTML 代码插入易受攻击的网页。该领域的漏洞可能导致敏感信息的泄露,或者出于社会工程目的修改页面内容。

准备工作

使用 OWASP Mutillidae II 捕获数据页面,让我们确定应用程序是否容易受到 HTML 注入攻击。

如何操作...

  1. 导航到 OWASP 2013 | A1 – 注入(其他)| 通过 Cookie 注入的 HTMLi | 捕获数据页面:

  1. 注意攻击前页面的外观:

  1. 切换到 Burp 代理拦截选项卡,并通过点击拦截器打开按钮来打开拦截器。

  2. 在请求暂停时,记下最后一个 cookie 的值,acgroupswitchpersist=nada

  1. 在请求暂停时,用这个 HTML 注入脚本替换最后一个 cookie 的值:
<h1>Sorry, please login again</h1><br/>Username<input type="text"><br/>Password<input type="text"><br/><input type="submit" value="Submit"><h1>&nbsp;</h1>
  1. 点击“Forward”按钮。现在通过单击拦截器按钮将拦截器关闭。

  2. 注意 HTML 现在包含在页面中!

工作原理...

由于缺乏输入验证和输出编码,可能存在 HTML 注入漏洞。利用这个漏洞的结果是插入任意 HTML 代码,这可能导致 XSS 攻击或社会工程学方案,就像前面的示例中所看到的那样。

测试客户端资源操纵

如果应用程序根据客户端 URL 信息或资源路径执行操作(即,AJAX 调用,外部 JavaScript,iframe 源),则结果可能导致客户端资源操纵漏洞。这种漏洞涉及攻击者控制的 URL,例如 JavaScript 位置属性中找到的位置标头,或者控制重定向的 HTTP 响应中找到的位置标头,或者 POST 主体参数。这种漏洞的影响可能导致跨站脚本攻击。

准备工作

使用 OWASP Mutillidae II 应用程序,确定是否可能操纵客户端暴露的任何 URL 参数,以及操纵这些值是否会导致应用程序行为不同。

如何做...

  1. 导航到 OWASP 2013 | A10 – 未经验证的重定向和转发 | Credits:

  1. 点击 Credits 页面上的 ISSA Kentuckiana 链接:

  1. 切换到 Burp 代理 HTTP 历史选项卡,并找到您对 Credits 页面的请求。注意有两个查询字符串参数:pageforwardurl。如果我们操纵用户被发送的 URL 会发生什么?

  1. 切换到 Burp 代理拦截选项卡。使用按钮“Intercept is on”打开拦截器。

  2. 在请求暂停时,注意fowardurl参数的当前值:

  1. forwardurl参数的值替换为https://www.owasp.org,而不是原始选择的http://www.issa-kentuckiana.org

  1. 点击“Forward”按钮。现在通过单击拦截器按钮将拦截器关闭。

  2. 注意我们是如何被重定向到一个原本没有点击的网站!

工作原理...

应用程序代码决策,例如将用户重定向到何处,不应依赖于客户端可用的值。这些值可能被篡改和修改,以将用户重定向到攻击者控制的网站或执行攻击者控制的脚本。

第十章:使用 Burp 宏和扩展

在本章中,我们将涵盖以下示例:

  • 创建会话处理宏

  • 被抓到手深处

  • 添加优秀的渗透测试插件

  • 通过手动扫描问题扩展创建新问题

  • 使用 Active Scan++扩展

介绍

本章涵盖了两个可以混合在一起的独立主题:宏和扩展。Burp 宏使渗透测试人员能够自动化事件,例如登录或参数读取,以克服潜在的错误情况。扩展,也称为插件,扩展了 Burp 中找到的核心功能。

软件工具要求

为了完成本章的示例,您需要以下内容:

  • OWASP 破损的 Web 应用程序(VM)

  • OWASP Mutillidae (http://<Your_VM_Assigned_IP_Address>/mutillidae)

  • GetBoo (http://<Your_VM_Assigned_IP_Address>/getboo)

  • Burp Proxy Community or Professional (portswigger.net/burp/)

创建会话处理宏

在 Burp 中,项目选项卡允许测试人员设置会话处理规则。会话处理规则允许测试人员指定 Burp 在进行 HTTP 请求时将采取的一组操作。在范围内为 Spider 和 Scanner 设置了默认的会话处理规则。但是,在本示例中,我们将创建一个新的会话处理规则,并使用宏来帮助我们在使用 Repeater 时从未经认证的会话中创建一个经过认证的会话。

做好准备

使用 OWASP Mutilliae II 应用程序,我们将创建一个新的 Burp 会话处理规则,并使用相关的宏,在使用 Repeater 时从未经认证的会话中创建一个经过认证的会话。

如何做…

  1. 在 Mutillidae 的登录页面中导航。使用用户名ed和密码pentest登录应用程序。

  2. 立即点击“注销”按钮退出应用程序,并确保应用程序确认您已注销。

  3. 切换到 Burp 代理 HTTP 历史选项卡。查找您刚刚进行的注销请求以及随后的未经认证的GET请求。选择未经认证的请求,即第二个GET。右键单击并将该请求发送到 Repeater,如下所示:

  1. 切换到 Burp Repeater,然后单击“Go”按钮。在响应的渲染选项卡上,确保您收到“未登录”消息。我们将使用这种情况来构建一个会话处理规则,以解决未经认证的会话,并将其变为经过认证的会话,如下所示:

  1. 切换到 Burp 项目选项卡,然后切换到会话选项卡,并在会话处理规则部分下单击“添加”按钮,如下所示:

  1. 单击“添加”按钮后,将弹出一个框。给您的新规则取一个名字,比如LogInSessionRule,在规则操作下选择运行宏,如下所示:

  1. 另一个弹出框出现,这是会话处理操作编辑器。在“选择宏”下的第一部分,单击“添加”按钮,如下所示:

  1. 单击“添加”按钮后,宏编辑器将出现,同时还会出现另一个宏记录器的弹出框,如下所示:

注意:1.7.35 版本存在一个禁用宏记录器的错误。因此,在单击“添加”按钮后,如果记录器没有出现,请升级 Burp 版本至 1.7.36 或更高版本。

  1. 在宏记录器中,查找您以 Ed 身份登录的POST请求以及以下的GET请求。在宏记录器窗口中突出显示这两个请求,然后单击“确定”,如下所示:

  1. 在上一个对话框中突出显示的这两个请求现在出现在宏编辑器窗口中。给宏一个描述,比如LogInMacro,如下所示:

  1. 单击“配置”按钮验证用户名和密码值是否正确。完成后单击“确定”,如下所示:

  1. 单击“确定”关闭宏编辑器。您应该在会话处理操作编辑器中看到新创建的宏。单击“确定”关闭此对话框窗口,如下所示:

  1. 关闭会话处理操作编辑器后,您将返回到会话处理规则编辑器,在那里您现在可以看到规则操作部分填充了您的宏名称。单击此窗口的范围选项卡,以定义哪个工具将使用此规则:

  1. 在会话处理规则编辑器的范围选项卡中,取消选中其他框,只保留 Repeater 选中。在 URL 范围下,单击“包括所有 URL”单选按钮。单击“确定”关闭此编辑器,如下所示:

  1. 现在您应该在会话处理规则窗口中看到新的会话处理规则,如下所示:

  1. 返回到 Repeater 选项卡,在那里您之前未登录到应用程序。单击“Go”按钮,以显示您现在以 Ed 的身份登录!这意味着您的会话处理规则和相关的宏起作用了:

它是如何工作的...

在这个示例中,我们看到如何通过重放登录过程将未经身份验证的会话更改为经过身份验证的会话。宏的创建允许手动步骤被脚本化并分配给 Burp 套件中的各种工具。

Burp 允许测试人员配置会话处理规则,以解决工具套件可能遇到的各种条件。当满足这些条件时,规则提供额外的操作。在这个示例中,我们通过创建一个新的会话处理规则来解决未经身份验证的会话,该规则调用了一个宏。我们将此规则的范围限定为仅用于 Repeater,仅用于演示目的。

陷入困境

在针对应用程序时,Burp 会捕获代理和爬虫 HTTP 流量时遇到的所有 cookie。Burp 将这些 cookie 存储在一个名为cookie jar的缓存中。这个 cookie jar 在默认会话处理规则中使用,并且可以在 Burp 工具套件中共享,比如 Proxy、Intruder 和 Spider。在 cookie jar 中,有一个请求的历史表。该表详细说明了每个 cookie 的域和路径。可以编辑或删除 cookie jar 中的 cookie。

准备就绪

我们将打开 Burp Cookie Jar 并查看内部。然后,使用 OWASP GetBoo 应用程序,我们将识别添加到 Burp Cookie Jar 的新 cookie。

如何做...

  1. 关闭并重新启动 Burp,以清除任何历史记录。切换到 Burp 项目选项卡,然后切换到会话选项卡。在 Cookie Jar 部分,单击“打开 cookie jar”按钮,如下所示:

  1. 出现一个新的弹出框。由于我们还没有代理流量,cookie jar 是空的。让我们针对一个应用程序并捕获一些 cookie,如下所示:

  1. 从 OWASP 登陆页面,单击链接以访问 GetBoo 应用程序,如下所示:

  1. 单击“登录”按钮。在登录屏幕上,输入用户名和密码为demo,然后单击“登录”按钮。

  2. 返回到 Burp Cookie Jar。现在有三个可用的 cookie。每个 cookie 都有一个域、路径、名称和值,如下所示:

  1. 选择列表中的最后一个 cookie,然后单击“编辑 cookie”按钮。将值从nada修改为thisIsMyCookie,然后单击“确定”,如下所示:

  1. 现在值已更改,如下所示:

  1. Burp Cookie Jar 的默认范围是 Proxy 和 Spider。但是,您可以扩展范围以包括其他工具。单击 Repeater 的复选框,如下所示:

现在,如果您创建一个新的会话处理规则并使用默认的 Burp Cookie Jar,您将看到该 cookie 的新值被用于请求。

它是如何工作的...

当自动化针对目标应用程序的请求时,Burp Cookie Jar 用于会话处理规则的 cookie 处理。在本教程中,我们查看了 Cookie Jar,了解了其内容,甚至修改了捕获的 cookie 值之一。使用默认的 Burp Cookie Jar 的任何后续会话处理规则都将在请求中看到修改后的值。

添加优秀的渗透测试插件

作为 Web 应用程序测试人员,您会发现一些方便的工具,可以增加到您的工具库中,使您的评估更加高效。Burp 社区提供了许多出色的扩展。在本教程中,我们将添加其中的一些,并解释它们如何使您的评估更好。Retire.js 和软件漏洞扫描器是两个插件,这两个插件与被动扫描器一起使用。

注意:这两个插件都需要 Burp 专业版。

准备工作

使用 OWASP Mutilliae II 应用程序,我们将添加两个方便的扩展,以帮助我们在目标中找到更多漏洞。

如何做…

  1. 切换到 Burp 扩展选项卡。转到 BApp Store 并找到两个插件—Retire.js和“软件漏洞扫描器”。为每个插件单击“安装”按钮,如下所示:

  1. 安装这两个插件后,转到“扩展”选项卡,然后转到“扩展”,然后转到 Burp 扩展部分。确保两个插件都启用,并在复选框内有检查标记。还要注意,软件漏洞扫描器有一个新选项卡,如下所示:

  1. 返回到 Firefox 浏览器,浏览到 Mutillidae 首页。右键单击并选择“被动扫描此分支”,执行轻量级、非侵入式的被动扫描,如下所示:

  1. 注意从这两个插件创建的额外发现。软件漏洞扫描器插件发现了许多 CVE 问题,Retire.js识别了五个易受攻击版本的 jQuery 实例,如下所示:

它是如何工作的…

通过 PortSwigger API 可以扩展 Burp 功能,以创建自定义扩展,也称为插件。在本教程中,我们安装了两个插件,用于识别应用程序中包含的已知漏洞的旧版本软件。

通过手动扫描问题扩展创建新问题

尽管 Burp 提供了许多常见的 Web 应用程序中发现的安全漏洞列表,但偶尔您会发现一个问题并需要创建一个自定义扫描发现。这可以使用手动扫描问题扩展来完成。

注意:此插件需要 Burp 专业版。

准备工作

使用 OWASP Mutillidae II 应用程序,我们将添加手动扫描问题扩展,创建显示发现的步骤,然后使用扩展创建自定义问题。

如何做…

  1. 切换到 Burp 扩展选项卡。转到 BApp Store 并找到标有“手动扫描问题”的插件。单击“安装”按钮:

  1. 返回到 Firefox 浏览器,浏览到 Mutillidae 首页。

  2. 切换到 Burp 代理| HTTP 历史选项卡,并找到您刚刚浏览到首页的请求。单击“响应”选项卡。注意过于冗长的服务器标头,指示所使用的 Web 服务器类型和版本以及操作系统和编程语言。攻击者可以利用这些信息来识别技术堆栈并确定可利用的漏洞:

  1. 由于这是一个发现,我们需要手动创建一个新问题,以便在报告中捕获它。在查看请求时,右键单击并选择“添加问题”,如下所示:

  1. 弹出对话框出现。在“常规”选项卡中,我们可以创建一个名为“服务器响应中的信息泄露”的新问题名称。显然,您可以在问题详细信息、背景和补救领域添加更多措辞,如下所示:

  1. 如果我们切换到 HTTP 请求选项卡,我们可以复制并粘贴请求选项卡中消息编辑器中找到的内容到文本区域中,如下所示:

  1. 如果我们切换到 HTTP 响应选项卡,我们可以复制并粘贴响应选项卡中消息编辑器中找到的内容到文本区域中。

  2. 完成后,切换回“常规”选项卡,然后单击“导入发现”按钮。您应该看到新创建的扫描问题已添加到问题窗口,如下所示:

工作原理...

在 Burp 核心问题列表中没有可用问题的情况下,测试人员可以使用手动扫描问题扩展创建自己的问题。在这个示例中,我们为服务器响应中的信息泄露创建了一个问题。

另请参阅

要查看 Burp 识别的所有问题定义,请转到portswigger.net/kb/issues

使用 Active Scan++扩展

一些扩展可以帮助找到具有特定有效负载的漏洞,比如 XML,或者帮助找到隐藏的问题,比如缓存投毒和 DNS 重绑定。在这个示例中,我们将添加一个名为Active Scan++的主动扫描器扩展,它有助于识别这些更专业的漏洞。

注意:此插件需要 Burp 专业版。

准备工作

使用 OWASP Mutillidae II 应用程序,我们将添加 Active Scan++扩展,然后针对目标运行主动扫描。

操作步骤...

  1. 切换到 Burp Extender | BApp Store 并选择Active Scan++扩展。单击“安装”按钮安装扩展,如下所示:

  1. 返回到 Firefox 浏览器并浏览 Mutillidae 主页。

  2. 切换到 Burp 目标选项卡,然后切换到站点地图选项卡,在mutillidae文件夹上右键单击,并选择“主动扫描此分支”,如下所示:

  1. 当 Active 扫描向导出现时,您可以保留默认设置并单击“下一步”按钮,如下所示:

按照提示点击“确定”开始扫描过程。

  1. 在主动扫描器完成后,浏览到问题窗口。注意任何新添加的扩展发现的额外问题。您可以通过查找“This issue was generated by the Burp extension: Active Scan++”消息来确定扩展发现了哪些问题,如下所示:

工作原理...

Burp 功能可以通过使用扩展来扩展核心发现之外的功能。在这个示例中,我们安装了一个插件,它扩展了 Active Scanner 功能,以帮助识别额外的问题,比如任意头部注入,就像在这个示例中看到的那样。

第十一章:实施高级主题攻击

在本章中,我们将涵盖以下内容:

  • 执行XML 外部实体XXE)攻击

  • 使用JSON Web TokenJWT)进行工作

  • 使用 Burp Collaborator 来确定服务器端请求伪造SSRF

  • 测试跨源资源共享CORS

  • 执行 Java 反序列化攻击

介绍

本章涵盖了中级到高级的主题,如使用 JWT、XXE 和 Java 反序列化攻击,以及如何使用 Burp 来协助进行此类评估。对于一些高级攻击,Burp 插件在简化测试人员所需的任务方面提供了巨大的帮助。

软件工具要求

为了完成本章中的示例,您需要以下内容:

  • OWASP Broken Web ApplicationsBWA

  • OWASP Mutillidae 链接

  • Burp 代理社区或专业版(portswigger.net/burp/

执行 XXE 攻击

XXE 是针对解析 XML 的应用程序的漏洞。攻击者可以使用任意命令操纵 XML 输入,并将这些命令作为 XML 结构中的外部实体引用发送。然后,由弱配置的解析器执行 XML,从而使攻击者获得所请求的资源。

准备工作

使用 OWASP Mutillidae II XML 验证器页面,确定应用程序是否容易受到 XXE 攻击。

如何做...

  1. 导航到 XML 外部实体注入页面,即通过其他| XML 外部实体注入| XML 验证器:

  1. 在 XML 验证器页面上,执行页面上提供的示例 XML。单击“验证 XML”按钮:

  1. 切换到 Burp 代理| HTTP 历史选项卡,并查找您刚刚提交的用于验证 XML 的请求。右键单击并将请求发送到重复器:

  1. 注意xml参数中提供的值:

  1. 使用 Burp 代理拦截器,将此 XML 参数值替换为以下有效负载。这个新的有效负载将对操作系统上应该被限制查看的文件发出请求,即/etc/passwd文件:
<?xml version="1.0"?>
    <!DOCTYPE change-log[
        <!ENTITY systemEntity SYSTEM "../../../../etc/passwd">
    ]>
    <change-log>
        <text>&systemEntity;</text>
    </change-log>

由于新的 XML 消息中有奇怪的字符和空格,让我们在将其粘贴到xml参数之前,将此有效负载输入到解码器部分并进行 URL 编码。

  1. 切换到解码器部分,输入或粘贴新的有效负载到文本区域。单击“编码为…”按钮,并从下拉列表中选择 URL 选项。然后,使用Ctrl + C复制 URL 编码的有效负载。确保通过向右滚动复制所有有效负载:

  1. 切换到 Burp 代理拦截选项卡。使用“拦截已打开”按钮打开拦截器。

  2. 返回到 Firefox 浏览器并重新加载页面。由于请求被暂停,将xml参数的当前值替换为新的 URL 编码的有效负载:

  1. 点击“转发”按钮。通过切换按钮关闭拦截器,使拦截器处于关闭状态。

  2. 请注意,返回的 XML 现在显示了/etc/passwd文件的内容!XML 解析器授予我们对操作系统上/etc/passwd文件的访问权限:

工作原理...

在这个示例中,不安全的 XML 解析器接收了 XML 中对服务器上/etc/passwd文件的请求。由于由于弱配置的解析器未对 XML 请求执行验证,因此资源自由地提供给攻击者。

使用 JWT

随着越来越多的网站提供客户端 API 访问,JWT 通常用于身份验证。这些令牌包含与用户在目标网站上被授予访问权限的资源相关的身份和声明信息。Web 渗透测试人员需要读取这些令牌并确定它们的强度。幸运的是,有一些方便的插件可以使在 Burp 中处理 JWT 令牌变得更容易。我们将在本章中了解这些插件。

准备工作

在这个教程中,我们需要生成 JWT 令牌。因此,我们将使用 OneLogin 软件来协助完成这项任务。为了完成这个教程,请浏览 OneLogin 网站:www.onelogin.com/。点击顶部的开发人员链接,然后点击获取开发人员帐户链接(www.onelogin.com/developer-signup)。

注册后,您将被要求验证您的帐户并创建密码。请在开始这个教程之前执行这些帐户设置任务。

使用 OneLogin SSO 帐户,我们将使用两个 Burp 扩展来检查网站分配的 JWT 令牌作为身份验证。

如何操作...

  1. 切换到 Burp BApp Store 并安装两个插件—JSON Beautifier 和 JSON Web Tokens:

  1. 在 Firefox 浏览器中,转到您的 OneLogin 页面。URL 将特定于您创建的开发人员帐户。在开始这个教程之前,请使用您设置帐户时建立的凭据登录帐户:

  1. 切换到 Burp 代理 | HTTP 历史选项卡。找到 URL 为/access/auth的 POST 请求。右键单击并单击发送到 Repeater 选项。

  2. 您的主机值将特定于您设置的 OneLogin 帐户:

  1. 切换到 Repeater 选项卡,注意您有两个与您安装的两个扩展相关的额外选项卡:

  1. 单击 JSON Beautifier 选项卡,以更可读的方式查看 JSON 结构:

  1. 单击 JSON Web Tokens 选项卡,以显示一个与jwt.io上可用的非常相似的调试器。此插件允许您阅读声明内容并操纵各种暴力测试的加密算法。例如,在下面的屏幕截图中,请注意您可以将算法更改为nOnE,以尝试创建一个新的 JWT 令牌放入请求中:

它是如何工作的...

两个扩展,JSON Beautifier 和 JSON Web Tokens,通过提供方便地与 Burp UI 一起使用的调试器工具,帮助测试人员更轻松地处理 JWT 令牌。

使用 Burp Collaborator 来确定 SSRF

SSRF 是一种漏洞,允许攻击者强制应用程序代表攻击者进行未经授权的请求。这些请求可以简单到 DNS 查询,也可以疯狂到来自攻击者控制的服务器的命令。

在这个教程中,我们将使用 Burp Collaborator 来检查 SSRF 请求的开放端口,然后使用 Intruder 来确定应用程序是否会通过 SSRF 漏洞向公共 Burp Collaborator 服务器执行 DNS 查询。

准备工作

使用 OWASP Mutillidae II DNS 查询页面,让我们确定应用程序是否存在 SSRF 漏洞。

如何操作...

  1. 切换到 Burp 项目选项 | 杂项选项卡。注意 Burp Collaborator 服务器部分。您可以选择使用私人 Burp Collaborator 服务器的选项,您可以设置,或者您可以使用 PortSwigger 提供的公共互联网可访问的服务器。在这个教程中,我们将使用公共的。

  1. 勾选标有在未加密的 HTTP 上轮询并单击运行健康检查...按钮的框:

  1. 弹出框出现以测试各种协议,以查看它们是否会连接到互联网上可用的公共 Burp Collaborator 服务器。

  2. 检查每个协议的消息,看看哪些是成功的。完成后,单击关闭按钮:

  1. 从顶级菜单中,选择 Burp | Burp Collaborator 客户端:

  1. 弹出框出现。在标有生成协作者有效负载的部分,将 1 更改为 10:

  1. 单击复制到剪贴板按钮。保持所有其他默认设置不变。不要关闭 Collaborator 客户端窗口。如果关闭窗口,您将丢失客户端会话:

  1. 返回 Firefox 浏览器,并导航到 OWASP 2013 | A1 – Injection(其他)| HTML Injection(HTMLi)| DNS Lookup:

  1. 在 DNS Lookup 页面上,输入 IP 地址,然后单击查找 DNS 按钮:

  1. 切换到 Burp Proxy | HTTP 历史选项卡,并找到刚刚在 DNS Lookup 页面上创建的请求。右键单击并选择发送到 Intruder 选项:

  1. 切换到 Burp Intruder |位置选项卡。清除所有建议的有效负载标记,并突出显示 IP 地址,单击添加§按钮,将有效负载标记放置在target_host参数的 IP 地址值周围:

  1. 切换到 Burp Intruder |有效负载选项卡,并使用粘贴按钮将从 Burp Collaborator 客户端复制到剪贴板的 10 个有效负载粘贴到有效负载选项[简单列表]文本框中:

确保取消选中有效负载编码复选框。

  1. 单击开始攻击按钮。攻击结果表将在处理有效负载时弹出。允许攻击完成。请注意,burpcollaborator.net URL 放置在target_host参数的有效负载标记位置:

  1. 返回 Burp Collaborator 客户端,单击立即轮询按钮,查看是否有任何 SSRF 攻击成功通过任何协议。如果任何请求泄漏到网络之外,则这些请求将显示在此表中,并显示使用的特定协议。如果在此表中显示任何请求,则需要将 SSRF 漏洞报告为发现。从这里显示的结果可以看出,应用程序代表攻击者提供的有效负载进行了大量 DNS 查询:

工作原理...

网络泄漏和过于宽松的应用程序参数可以允许攻击者代表应用程序通过各种协议进行未经授权的调用。在这个案例中,该应用程序允许 DNS 查询泄漏到本地机器之外并连接到互联网。

另请参阅

有关 SSRF 攻击的更多信息,请参阅 PortSwigger 博客条目portswigger.net/blog/cracking-the-lens-targeting-https-hidden-attack-surface

测试 CORS

实现 HTML5 CORS 的应用程序意味着该应用程序将与位于不同来源的另一个域共享浏览器信息。按设计,浏览器保护阻止外部脚本访问浏览器中的信息。此保护称为同源策略SOP)。但是,CORS 是一种绕过 SOP 的手段。如果应用程序希望与完全不同的域共享浏览器信息,则可以通过正确配置的 CORS 标头实现。

网络渗透测试人员必须确保处理 AJAX 调用(例如 HTML5)的应用程序没有配置错误的 CORS 标头。让我们看看 Burp 如何帮助我们识别这种配置错误。

准备就绪

使用 OWASP Mutillidae II AJAX 版本的 Pen Test Tool Lookup 页面,确定应用程序是否包含配置错误的 CORS 标头。

如何做...

  1. 导航到 HTML5 |异步 JavaScript 和 XML | Pen Test Tool Lookup(AJAX):

  1. 从列表中选择一个工具,然后单击查找工具按钮:

  1. 切换到 Burp Proxy | HTTP 历史选项卡,并找到刚刚从 AJAX 版本 Pen Test Tool Lookup 页面进行的请求。切换到响应选项卡:

  1. 让我们通过选择相同响应选项卡的标题选项卡来更仔细地检查标题。虽然这是一个 AJAX 请求,但该调用是应用程序内部的,而不是跨源域的。因此,由于不需要,没有 CORS 标头。但是,如果对外部域进行调用(例如 Google APIs),则需要 CORS 标头:

  1. 在 AJAX 请求中,会调用外部 URL(例如,跨域)。为了允许外部域接收来自用户浏览器会话的 DOM 信息,必须存在 CORS 标头,包括Access-Control-Allow-Origin: <跨域的名称>

  2. 如果 CORS 标头未指定外部域的名称,而是使用通配符(*),则存在漏洞。Web 渗透测试人员应将此包括在其报告中,作为配置错误的 CORS 标头漏洞。

它是如何工作的...

由于此示例中使用的 AJAX 调用源自同一位置,因此无需 CORS 标头。但是,在许多情况下,AJAX 调用是向外部域进行的,并且需要通过 HTTP 响应Access-Control-Allow-Origin标头明确许可。

另请参阅

有关配置错误的 CORS 标头的更多信息,请参阅 PortSwigger 博客条目portswigger.net/blog/exploiting-cors-misconfigurations-for-bitcoins-and-bounties

执行 Java 反序列化攻击

序列化是各种语言中提供的一种机制,允许以二进制格式保存对象的状态。它用于加快速度和混淆。将对象从二进制转换回对象的过程称为反序列化。在使用用户输入创建对象并将该对象序列化后,会为任意代码注入和可能的远程代码执行创建攻击向量。我们将看一下 Burp 扩展,它将帮助 Web 渗透测试人员评估 Java 反序列化漏洞的应用程序。

准备工作

Java Serial Killer Burp extension to assist in performing Java deserialization attacks.

如何操作...

  1. 切换到 Burp BApp Store 并安装 Java Serial Killer 插件:

为了创建一个使用序列化对象的场景,我们将采用标准请求,并向其添加一个序列化对象,以演示您如何使用扩展程序向序列化对象添加受攻击者控制的命令。

  1. 请注意,您的 Burp UI 菜单顶部添加了一个新的选项卡,专门用于新安装的插件。

  2. 导航到 Mutillidae 主页。

  3. 切换到 Burp Proxy| HTTP 历史选项卡,并查找刚刚创建的请求,方法是浏览到 Mutillidae 主页:

不幸的是,Mutillidae 中没有序列化对象,所以我们必须自己创建一个。

  1. 切换到解码器选项卡并复制以下序列化对象的片段:
AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
  1. 将十六进制数粘贴到解码器选项卡,单击“编码为...”按钮,然后选择 base 64:

  1. 从解码器选项卡复制 base-64 编码的值,并将其粘贴到您发送到 Java Serial Killer 选项卡底部的请求中。使用Ctrl + C从解码器复制,Ctrl + V粘贴到请求的白色空间区域中的任何位置:

  1. 在 Java Serial Killer 选项卡中,从下拉列表中选择一个 Java 库。对于这个示例,我们将使用 CommonsCollections1。勾选 Base64 编码框。添加一个命令嵌入到序列化对象中。在这个示例中,我们将使用 nslookup 127.0.0.1 命令。突出显示有效载荷并单击“序列化”按钮:

  1. 单击“序列化”按钮后,注意有效载荷已更改,现在包含您的任意命令并且已进行 base-64 编码:

  1. 单击 Java Serial Killer 选项卡中的“Go”按钮以执行有效载荷。即使您可能会收到响应中的错误,理想情况下,您将拥有一个侦听器,例如tcpdump,用于监听端口53上的任何 DNS 查询。从侦听器中,您将看到对 IP 地址的 DNS 查询,该 IP 地址是您在nslookup命令中指定的。

它是如何工作的...

在应用程序代码接收用户输入并将其直接放入对象而不对输入进行消毒的情况下,攻击者有机会提供任意命令。然后对输入进行序列化并在应用程序所在的操作系统上运行,从而为远程代码执行创建可能的攻击向量。

还有更多...

由于这个示例场景有点牵强,您可能无法在nslookup命令的网络监听器上收到响应。在下载已知存在 Java 反序列化漏洞的应用程序的易受攻击版本(即 Jenkins、JBoss)后,再尝试此示例。重复此处显示的相同步骤,只需更改目标应用程序。

另请参阅

posted @ 2024-05-03 21:40  绝不原创的飞龙  阅读(74)  评论(0编辑  收藏  举报