【THM】Burp Suite:Other Modules(Burp Suite其他模块·更新版)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/burpsuiteom
本文相关内容:了解 Burp Suite 中一些可能鲜为人知的模块。
简介
除了著名的Repeater模块和Intruder模块之外,Burp Suite还内置了几个可能不太常用的功能模块。
具体而言,本文将介绍Burp Suite中的解码器工具(Decoder)、对比器工具(Compared)和定序器工具(Sequencer),这几个工具使我们能够对文本内容进行编码和解码、比较不同的文本集、分析所捕获的令牌(tokens)样本的随机性,直接在Burp Suite中执行这些相对简单的任务可以节省大量时间,因此学习如何简单使用以上三个功能模块是非常值得的。
事不宜迟,让我们开始研究Decoder(解码器)功能模块。
Decoder(解码器)-概述
Burp Suite的Decoder模块为用户提供了数据操作功能,顾名思义,Decoder不仅可以解码攻击期间所截获的数据,还能提供对我们自己的数据进行编码的功能。
此外,Decoder还允许我们创建数据的哈希和,而且能够提供Smart Decode(智能解码)功能,Smart Decode功能将尝试递归地解码所提供的数据,直到数据恢复为纯文本为止(这类似于Cyberchef的"Magic"功能)。
让我们从Burp Suite顶部菜单导航至Decoder选项卡以查看可用选项:
Decoder选项卡界面为我们提供了以下几个选项:
- Decoder选项卡界面左侧的方框是我们用于输入/粘贴需要编码或解码的数据的工作区,我们可以在其他Burp模块中单击右键并选择"Send to Decoder"——将数据从其他模块中发送到此处。
- 在Decoder选项卡界面右侧列表的顶部,我们可以选择将输入内容视为文本(Text)或者将输入内容视为十六进制字节值(Hex)来处理。
- 在Decoder选项卡界面右侧列表的中间部分,我们有一个下拉菜单可对输入内容进行编码、解码或Hash计算。
- 最后,在Decoder选项卡界面右侧列表的底部,我们可以看到有一个"Smart Decode-智能解码"功能,使用该功能将会尝试自动解码已输入的内容。
当我们在上图的输入框中输入数据并执行格式转换时,上图所示的框体界面将复制自身并会在新生成的输入框中包含经过格式转换之后的输出内容,然后我们可以继续选择使用相同的选项来对新框体中的数据执行进一步的格式转换操作:
答题
阅读本小节内容并回答以下问题。
Decoder(解码器)-编码/解码
编码和解码选项
我们仔细查看Decoder的编码和解码选项,可以发现,无论我们选择编码菜单还是解码菜单,以下选项都是一样的:
-
Plain:明文格式(纯文本),指我们在应用任何转换之前的原始文本。
-
URL:URL编码用于确保在web请求的URL中的数据能够安全传输,它会将输入数据表示为对应ASCII字符代码的十六进制格式,并会在处理后的数据前面加上一个百分号(
%
),URL编码对于测试任何类型的web应用程序而言都是非常有用的编码方法。
例如,我们可以对正斜杠字符(/
)进行URL编码,正斜杠的ASCII字符代码是47
,以十六进制表示是2F
,所以正斜杠字符的URL编码为%2F
;我们可以用解码器确认这一点,在输入框中输入正斜杠字符,然后选择Encode as -> URL
即可。 -
HTML:如果要将输入文本编码为HTML实体,那么就需要按规则替换输入文本中的特殊字符——开头为
&
符号,然后是一个十六进制数或者是对被转义字符的引用,最后以一个分号(;
)结尾;例如,双引号的HTML编码实体是""
",当该HTML编码实体被插入到web页面中时,它将会被双引号("
)符号取代;HTML编码方法允许HTML语言中的特殊字符在HTML页面中安全地呈现,这种编码方法在一定程度上可用于防止XSS(跨站点脚本)等攻击。
在Decoder中使用HTML编码/解码选项时,我们可以将任何字符编码为其HTML转义格式或者对捕获到的HTML编码实体进行解码处理;例如,如果我们现在要将一个HTML编码实体解码为双引号,我们可以先输入双引号的HTML编码实体,然后选择decode as -> HTML
即可。 -
Base64:base64是一种被广泛使用的编码方法,它可以将任何数据转换为ASCII兼容的格式;bsae64编码的设计目的是先获取二进制数据(例如图像、媒体、程序),然后将其编码为适合在几乎任何介质中进行传输的格式。如果你对base64编码背后的过程感兴趣,你可以参考相关博客文章进行了解。
-
ASCII Hex:此选项可将数据在ASCII表示和十六进制表示之间进行转换,例如,"
ASCII
"一词可以被转换成十六进制数"4153434949
";在转换过程中,原始数据中的每个字母都会被单独提取,并将从ASCII表示转换为十六进制表示,比如,"ASCII
"一词中的字母"A
"在ASCII 表中对应的十六进制表示是41
,类似地,字母"S
"对应的十六进制为53
,依此类推就能得到十六进制数"4153434949
"。 -
Hex、Octal和Binary:十六进制、八进制和二进制,这些编码选项都只适用于内容为数字的输入,使用这些选项之后,输入内容将在十进制、十六进制、八进制(以8为基数)和二进制表示形式之间进行转换。
-
Gzip:该选项提供了一种压缩数据的方法,它被广泛用于在将文件和页面发送到浏览器之前压缩文件和页面的大小;发送更小的页面意味着更快的加载时间,这对于希望提高SEO得分并避免给客户带来不便的开发人员来说是非常可取的。Decoder允许我们手动编码和解码gzip数据,这些数据可能很难处理,因为gzip数据通常不是有效的ASCII/Unicode格式。
我们可以连续(堆叠)使用以上编码/解码选项,例如,我们可以输入一个短语("Burp Suite Decoder"),先将其转换为ASCII Hex,然后再转换为Octal(八进制):
通过组合使用编码/解码选项,能够让我们对正在编码或解码的数据实现更丰富的格式转换处理。
我们可以从以上内容以及示例中注意到:每个编码/解码方法的输出结果都是以不同颜色区分的,通过比对数据的显示颜色,我们就可以快速地知道某个数据应用了什么格式的转换选项。
Hex Format(十六进制格式)
虽然以ASCII格式(文本格式)输入数据很方便,但是有时我们也需要逐字节编辑输入内容,为此,我们可以通过在解码选项上方选择"Hex"来使用"Hex视图":
如上图所示,这个视图(Hex视图)允许我们以十六进制字节格式查看和更改数据,如果我们想处理二进制文件或者其他非ASCII数据,这会是一个非常有用的技巧。
Smart Decode(智能解码)
最后,让我们来看看"Smart Decode-智能解码"选项,应用Decoder(解码器)的这个选项将会尝试自动解码已编码的文本。
例如,我们在输入框中输入Burp Suite
并应用"Smart Decode-智能解码",那么输入框中的数据内容将会被自动识别为HTML编码实体并能进行相应的解码处理。
Burp Suite中的"Smart Decode-智能解码"功能虽然并不完美,但是此功能可以成为解码未知数据块的快速解决方案。
答题
关于知识学习,最好的内化方法就是付诸实践,接下来我们将尝试使用Burp Suite中的Decoder功能模块并回答相关问题。
使用Burp Suite的Decoder模块,以Base64格式编码短语:Let's Start Simple
。
给定文本的Base64编码版本是:TGV0J3MgU3RhcnQgU2ltcGxl
使用URL选项解码此数据:%4e%65%78%74%3a%20%44%65%63%6f%64%69%6e%67
。
返回的明文内容是:Next: Decoding
使用智能解码选项对此数据进行处理:%34%37
。
解码后的文本是:47
先对文本Encoding Challenge
进行base64编码,得到编码结果之后再将其转换为"ASCII Hex"格式,最后再继续以"Octal"编码选项转换数据格式,我们将得到一个八进制值。
最终得到的字符串内容为:24034214a720270024142d5413574712322502535521162d1206C
Decoder(解码器)-哈希计算
除了编码/解码功能外,Decoder还提供了为输入的数据生成哈希和(hashsums)的选项。
理论
哈希计算是一个单向过程,它主要用于将数据转换为唯一的数字签名,一个函数要想成为哈希算法,那么它所生成的输出结果必须是不可逆转的。
在实际运用中,一个好的哈希算法能够确保每个输入的数据都会对应生成完全唯一的哈希值。例如,使用MD5算法为文本"MD5sum"生成一个哈希和,会返回一个结果"4ae1a02de5bd02a5515f583f4fca5e8c";而使用相同的算法处理文本"MD5SUM",则将生成一个完全不同的哈希值"13b436b09172400c9eb2f69fbd20adad"。
哈希计算经常被用于验证文件和文档的完整性,因为即使对文件进行非常小的更改也会导致最后得到的Hash(哈希)值发生显著变化。
注意:MD5算法的安全性并不高,它在现代应用程序中可能不会被使用。
此外,哈希计算也可用于安全地存储密码值,由于哈希计算过程是单向的,这意味着通过计算得到的密码哈希值也是不可逆转的,因此,即使发生数据库泄露事件,密码哈希值也将会是(相对)安全的。
当用户创建密码时,应用程序可以选择对原始密码值进行哈希计算,然后以hash值的形式将密码存储在数据库中;然后,当用户尝试登录时,应用程序将对用户所提交的密码进行哈希计算,并会把得到的计算结果与存储在数据库中已有的密码哈希值进行比对,如果哈希值匹配,那么用户输入的登录密码就会被认为是正确的。
当一个应用程序选择使用哈希算法来处理密码值时,那么相关的数据库就不必存储原始(明文)密码,只需要存储密码所对应的哈希值即可。
Decoder中的Hash选项
Decoder(解码器)允许我们直接在Burp Suite内生成数据的哈希和,这与我们在前文中提到的编码/解码选项的工作方式大致相同。具体而言,我们可以在Decoder界面的右侧边栏中点击"Hash"下拉菜单,然后从列表中选择一个hash算法来对输入数据进行哈希和计算:
注意:这是一个比编码/解码选项长得多的列表——我们可以向下滚动列表以查看更多可用的哈希算法。
例如,我们先在Decoder的输入框中输入"MD5sum",然后点击"Hash"下拉菜单并向下滚动算法列表,找到"MD5"算法选项并点击应用,这会将我们带入一个"Hex视图"(其中包含了我们的哈希计算结果):
如上图所示,以上哈希计算的输出结果并不会返回一个纯ASCII/Unicode文本,因此,我们通常可以将哈希算法的输出结果继续转换为十六进制字符串,这将是我们能够经常看到的"哈希值"格式,我们可以通过对已经得到的"哈希和"应用"ASCII Hex"编码选项来完成这项工作,从而得到一个整洁的十六进制字符串。
答题
使用Burp Suite的Decoder模块。
在Decoder模块中使用SHA-256算法计算Let's get Hashing!
的哈希值,然后使用ASCII Hex
编码选项——将得到的hash值转换为十六进制字符串:
6b72350e719a8ef5af560830164b13596cb582757437e21d1879502072238abe
使用MD4算法计算Insecure Algorithms
的哈希值,然后使用base64
编码选项——将得到的hash值转换为base64格式:
TcV4QGZZN7y7lwYFRMMoeA==
下载由本文相关的TryHackMe实验房间所提供的任务文件,对文件中的四个密钥进行hash计算,找到哈希和值为3166226048d6ad776370dc105d40d9f8
的密钥(此处使用的hash算法为MD5算法):
tips:wget http://MACHINE_IP:9999/AlteredKeys.zip
验证:使用MD5算法计算key3密钥的哈希和值,然后使用ASCII Hex
编码选项——将得到的hash值转换为十六进制字符串。
Comparer(对比器)-概述
顾名思义,Comparer允许我们通过ASCII字符或通过字节对比两段数据。
让我们先来看看Comparer的界面:
如上图所示,Comparer界面可分为三个主要部分:
- 在界面左侧,会显示要比较的项目,当我们将数据加载到Comparer中时,数据将按行显示在表中,然后我们就可以选择两个数据集进行对比。
- 在界面右上角,我们可以选择从剪贴板中粘贴数据(
Paste
)、从文件中加载数据(Load
)、删除当前行(Remove
)、以及清除所有数据集(Clear
)。 - 最后,在界面右下角,我们可以选择通过字符或通过字节来比较已经加载的数据集,当我们准备好对比所选数据时,就可以单击这两个按钮中的一个。
与大多数Burp Suite功能模块一样,我们也可以通过右键单击并选择“发送到Comparer”来将数据从其他模块加载到对比器中。
当我们加载好数据(添加了至少 2 个数据集)并使用Comparer进行比较时,我们会得到一个弹出窗口,该窗口会显示数据对比的结果:
同样,上图的窗口也由三个不同的部分组成:
-
正在对比的数据占据了上图窗口的大部分,我们可以选择以文本格式或十六进制格式来查看这些数据,窗口中的初始数据格式将根据我们在前一个窗口中选择按字符还是按字节对比来决定,但是我们也可以在上图窗口中通过点击按钮来覆盖格式。
-
用于数据集对比的Key位于上图窗口的左下角,此处显示了在两个数据集之间将使用哪些颜色来表示存在修改、删除和添加的数据。
-
在上图窗口的右下角是"Sync views-同步视图"复选框,当我们选中该复选框时,意味着两组对比数据将同步格式——即,如果你将其中一组数据更改为十六进制视图,那么另一组数据也将发生对应的变化从而形成格式同步。
上图窗口的标题处还会显示已找到的差异总数。
Comparer(对比器)-示例
我们现在知道Comparer是做什么的了,但是它有什么用呢?
在许多情况下,Comparer能够快速比较两个(可能非常大的)数据块。
例如,在使用Burp Intruder执行登录框暴力破解攻击或者凭据填充攻击(撞库攻击)时,我们可能希望对比两个长度不同的响应以查看差异,而这些差异通常能够表明是否登录成功。
实际示例
部署目标虚拟机,并在攻击机上使用浏览器导航至: http://10.10.197.32/support/login
在浏览器中尝试使用无效的用户名和密码进行登录尝试——并使用Burp Proxy捕获这个登录请求。
使用Ctrl + R将请求发送到Repeater,或者通过右键单击Proxy模块中的请求消息并选择“发送到 Repeater”。
在Repeater中点击"Sent"发送请求,然后右键单击得到的响应消息并选择“发送到Comparer”。
在Repeater选项卡中,将登录凭据更改为:
- 用户名:
support_admin
- 密码:
w58ySK4W
再次在Repeater中点击"Sent"发送请求,然后将得到的新响应消息再次转发给Comparer,最后进行数据对比(按字符对比前后两个响应,查看数据集之间的区别)。
如上图所示,我们可以看到前后两个响应消息有9处差异。
Sequencer(定序器)-概述
Sequencer允许我们评估“token-令牌”的熵(即随机性程度)——“令牌”是用于识别某些内容的字符串,理论情况下应该以加密安全的方式生成;通常我们会希望分析会话cookie的随机性或者保护表单提交的跨站请求伪造(CSRF)令牌的随机性。如果事实证明这些令牌并不是安全生成的,那么我们(理论上)可以预测之后将生成的令牌的值,想象一下,如果这个令牌是用于密码重置的,这意味着什么……
让我们先查看一下Sequencer界面:
我们有以下两种主要的方法来使用Sequencer进行token分析:
- Live capture(实时捕获):实时捕获是分析令牌的两种方法中更常见的一种,也是Sequencer的默认子选项卡,实时捕获允许我们将能够生成令牌的特殊请求传递给Sequencer以供分析。例如,我们可能希望将一个传递到登录端点的POST请求转发到Sequencer,并知道服务器会使用cookie来进行响应;成功传入请求到Sequencer之后,我们就可以指示Sequencer开始实时捕获:这将自动发出数千次相同的请求,从而存储生成的大量令牌样本以供分析。一旦我们积累了足够的令牌样本,我们就可以停止Sequencer的捕获操作,并开始分析我们所捕获到的令牌。
- Manual load(手动加载): 手动加载允许我们将预先生成的令牌样本列表直接加载到Sequencer中进行分析,使用Manual Load意味着我们不需要向目标发出数千个请求(这既会产生大量流量记录又十分耗费资源),但是这也意味着我们必须要获得一个包含大量预先生成的令牌的列表。
在本文内容中,我们将专注于使用Live capture(实时捕获)来进行令牌分析。
答题
阅读本小节内容并回答以下问题。
Sequencer(定序器)-实时捕获
最好的学习方法就是实践,让我们通过对admin登录表单中所使用的"反暴力破解令牌"执行熵分析(随机性程度分析)来学习如何使用Sequencer实时捕获。
实践
首先部署目标实验虚拟机,然后再使用Burp Proxy捕获一个针对http://10.10.197.32/admin/login/的请求,随后右键单击该请求并选择“发送到Sequencer”:
注意,在“Token Location Within Response”部分,我们可以选择Cookie、Form field(表单字段)和Custom location(自定义位置);在这个例子中,我们需要测试loginToken
,所以选择“Form field”:
在本例情况下,我们可以安全地将所有其他选项设置为默认值,然后我们直接单击“Start live capture”按钮即可:
Sequencer界面将会弹出一个新窗口,以告诉我们正在执行实时捕获,并会显示到目前为止我们已经捕获了多少个令牌;我们需要持续等待一段时间,直到我们已经捕获到了足够多数量的令牌为止(大约10,000个就可以了),一般而言,我们得到的令牌样本越多,我们的熵分析(随机性程度分析)就会越准确。
当已经捕获到了大约10,000个令牌之后,我们就可以点击“Pause-暂停”,然后选择“Analyze now-立即分析”按钮进行令牌分析:
注意:我们也可以选择点击“Stop-停止”按钮来停止捕获,但是,最好的选择还是使用“Pause-暂停”按钮,这样做如果Sequencer报告"没有足够的样本来准确计算令牌的熵",那么我们还可以立即恢复捕获选项。
如果我们想要接收令牌分析的定期结果更新,我们还可以选中“Auto analyze”复选框,这样做会告诉Burp每2000个请求左右就执行一次熵分析,然后Burp将频繁更新令牌的分析结果,这样随着更多的令牌样本被加载到Sequencer中,我们所得到的令牌分析结果也会越来越准确。
此外,还值得注意的是,我们可以选择复制或保存已经捕获到的令牌,以供我们稍后做进一步分析。
在我们点击“Analyze now-立即分析”按钮后,Burp将开始分析令牌样本的熵并生成一个报告。
答题
阅读分析报告并回答以下问题。
Sequencer(定序器)-分析
承接上一小节的操作,现在我们有了一个关于"令牌-token"熵分析(随机性程度分析)的报告,是时候对其进行分析了。
tips:Burp会对已经捕获到的令牌样本执行数十个测试,但是我们在此不考虑这些测试背后的过程,我们将主要关注最终生成的报告摘要。
Sequencer所生成的"令牌-token"熵分析报告可分为四个主要部分,其中第一部分是对分析结果的摘要,它能为我们提供以下内容:
- Overall result(总体结果):对令牌生成机制的安全性进行广泛评估,在本例中,熵的水平表明了相关token可能是安全生成的。
- Effective entropy(有效熵):衡量令牌的随机性, 99位的有效熵相对较高,表明令牌具有足够的随机性,因此可以抵御预测或暴力攻击。
- Reliability(可靠性):1%的显著性水平意味着对结果的准确性有99%的置信度,这种置信度水平已经相当高,在一定程度上为有效熵估计的准确性提供了保证。
- Sample(样本):这将为我们提供在熵测试过程中所分析的令牌样本的详细信息,包括令牌的数量及其特征。
总的来说,上述这些摘要内容通常足以确定令牌是否是安全生成的,然而在某些情况下,我们也可能需要做进一步调查,这可以通过"字符级分析"和"位级分析"来完成(在此不做赘述)。
由上述熵分析报告的摘要内容可知:最终的显著性水平为1%(有1%的错误几率),令牌具有99位的有效熵,对于一个安全令牌来说,这会是一个很好的熵水平,我们可以说这个令牌生成机制是非常安全的。
Organizer(组织者)-概述
Burp Suite的Organizer模块旨在帮助我们存储和注释稍后可能想要重新访问的 HTTP 请求的副本,这个工具对于组织渗透测试工作流特别有用,以下是它的一些主要特性:
-
使用Organizer模块,能够存储我们稍后想调查的请求、保存我们确定会感兴趣的请求或者保存我们稍后想要添加到报告中的请求。
-
我们可以从其他Burp模块中向Burp Organizer发送HTTP请求,该操作可通过在其他Burp模块中右键单击请求并选择点击"Send to Organizer"按钮或者使用默认的快捷键
Ctrl + O
来完成,每个发送到Organizer中的HTTP请求都是原始请求的只读副本,并且相关请求还会在我们将其发送给Organizer时自动保存。 -
发送到Organizer中的请求会存储在一个表中,其中包含了很多列,例如请求索引号、发出请求的时间、工作流状态、请求所来自的Burp模块、HTTP方法、服务器主机名、URL文件路径、URL查询字符串、请求中的参数数量、响应消息的HTTP状态码、响应消息的长度(以字节为单位)以及我们所做的任何注释。
我们可以在Organizer界面中查看具体的请求消息和对应的响应消息:
- 首先单击Organizer中的任意项目;
- 然后我们将看到请求视图和响应视图有对应的填充内容,此处的请求和响应都是只读的,我们还可以在请求或响应中搜索想要的信息,例如选中请求消息并使用请求视图下方的搜索栏即可。
答题
阅读本小节内容并回答以下问题。