文章

Burp suite插件使用方法集合

本文是关于Burp Suite的插件的介绍、用法和技巧。

一、HaE

项目地址:https://github.com/gh0stkey/HaE

作者视频讲解:从0到1认识实战攻防工具HaE_哔哩哔哩_bilibili

1、介绍

HaE是基于 BurpSuite JavaAPl 开发的请求高亮标记与信息提取的辅助型框架式插件,该插件可以通过自定义正则的方式匹配响应报文或请求报文,可以自行决定符合该自定义正则匹配的相应请求是否需要高亮标记、信息提取。

2、优点

在流量多而杂的场景下,不免会浪费很多时间去看请求,借助HaE插件可以有效的减少测试的时间,以高亮的方式标记出你所需要的请求或响应,高效的进行漏洞挖掘和测试。

3、应用场景

①信息收集

内网API接口、网站指纹、页面注释…

②敏感信息

手机号、身份证号码、邮箱、银行卡号、用户账号密码、OSS存储密钥…

③漏洞发现

命令/代码执行、拒绝服务、SSRF、URL跳转、反序列化…

4、规则

(1) Fingerprint

指纹信息

(2) Maybe Vulnerability

脆弱性

①DoS Paramters

拒绝服务参数规则,匹配请求中的size、page、num参数

实战应用:

image-20241014133543423

修改参数pageSize和pageNum为一个较大的值,页面会返回大量数据。

注意

谨慎测试,容易影响正常业务

②Debug Logic Parameters

逻辑调试函数

③Java Deserialization

Java反序列化

(3) Basic Information

基本信息

Email、Chinese IDCard、Chinese Mobile Number、Internal IP Address、MAC Address

(4) Sensitive Information

敏感信息

①AccessKey

AccessKey包括AccessKeyID和AcessKeySecret两部分,AccessKeyID用于标识用户,AcessKeySecret用于验证用户的密钥,主要用于程序方式调用云服务API。

②OSS

对象存储

解释:

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

例子:

当测试某个上传点时,获取到一个HTML表单:

image-20241014172515289

请求的主机名xxxx.aliyuncs.com和表单的OSSAccessKeyId参数,基本可以确认系统使用 OSS 作为上传文件存储,即使上传恶意脚本文件也无法成功解析。

破局办法:

通过查阅相关文件,我们可以知道使用表单上传文件到 OSS的技术方案里,有三种实现方式: OSS产品文档:https://help.aliyun.com/document_detail/31923.html

  1. 在客户端通过JavaScript代码完成签名,然后通过表单直传数据到OSS。
  2. 在服务端完成签名,然后通过表单直传数据到OSS。
  3. 在服务端完成签名,并且服务端设置了上传后回调,然后通过表单直传数据到OSS。OSS回调完成后,再将应用服务器响应结果返回给客户端。

当采用JavaScript客户端直接签名时,AccessKeyID和AcessKeySecret会暴露在前端页面,存在严重的安全隐患。

通过翻找js文件,可发现AccessKey就写在js文件里面。

image-20241014172716741

参考文章:由OSS AccessKey泄露引发的思考 - Bypass - 博客园 (cnblogs.com)

(5) 其他

①Create Script规则

匹配响应报文中createElement(常见script标签)的内容

image-20241014133130636

例子:

image-20241014130817837

JS文件/JS路径 的拼接

访问xxx/static/js/chunk-079f2fa8.e2fd14e5.js

②Linkfinder

匹配响应报文中的链接、请求路径等信息

实战应用:

把链接/路径可以跑一遍

二、BurpCrypto

1、介绍

AES/DES/RSA加密:

①对称加密算法:

AES和DES加密都属于对称加密算法,既加解密使用同一套密钥的加密算法,同时也是目前前端加密中较为常见的加密算法,目前插件支持的AES加密算法有:

查看详细
  • AES/CBC/PKCS5Padding
  • AES/CBC/NoPadding
  • AES/CBC/ZeroPadding
  • AES/ECB/PKCS5Padding
  • AES/ECB/NoPadding
  • AES/ECB/ZeroPadding
  • AES/OFB/PKCS5Padding
  • AES/OFB/NoPadding
  • AES/OFB/ZeroPadding
  • AES/CFB/PKCS5Padding
  • AES/CFB/NoPadding
  • AES/CFB/ZeroPadding
  • AES/CTR/PKCS5Padding
  • AES/CTR/NoPadding
  • AES/CTR/ZeroPadding

DES加密算法有:

查看详细
  • DES/CBC/PKCS5Padding
  • DES/CBC/ZeroPadding
  • DES/CBC/NoPadding
  • DES/ECB/PKCS5Padding
  • DES/ECB/ZeroPadding
  • DES/ECB/NoPadding
  • DES/OFB/PKCS5Padding
  • DES/OFB/ZeroPadding
  • DES/OFB/NoPadding
  • DES/CFB/PKCS5Padding
  • DES/CFB/ZeroPadding
  • DES/CFB/NoPadding
  • DESede/CBC/PKCS5Padding
  • DESede/CBC/ZeroPadding
  • DESede/CBC/NoPadding
  • DESede/ECB/PKCS5Padding
  • DESede/ECB/ZeroPadding
  • DESede/ECB/NoPadding
  • DESede/OFB/PKCS5Padding
  • DESede/OFB/ZeroPadding
  • DESede/OFB/NoPadding
  • DESede/CFB/PKCS5Padding
  • DESede/CFB/ZeroPadding
  • DESede/CFB/NoPadding
  • strEnc
提示

在前端JS中常常会使用PKCS7Padding,在本模块中可使用PKCS5Padding代替,不影响使用。

DES加密中的strEnc算法是取自作者Guapo的一种3DES的模块,在少数系统中被使用,此处为了方便使用也引入了进来。

②非对称加密算法

RSA算法则属于非对称加密算法,密钥分为公钥与私钥,暂时仅支持公钥加密,RSA加密支持两种公钥格式的输入,分别为

  • X509
  • ModulusAndExponent

X509密钥格式表现为一串由Base64编码后的字符串,常常以MIG开头。ModulusAndExponent(模数,指数)则表现为两个HEX编码的参数,Modulus是模数,常常较长,Exponent是指数,常常只有6位,以下为密钥示例:

查看详细

X509: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCC0hrRIjb3noDWNtbDpANbjt5Iwu2NFeDwU16Ec87ToqeoIm2KI+cOs81JP9aTDk/jkAlU97mN8wZkEMDr5utAZtMVht7GLX33Wx9XjqxUsDfsGkqNL8dXJklWDu9Zh80Ui2Ug+340d5dZtKtd+nv09QZqGjdnSp9PTfFDBY133QIDAQAB

ModulusAndExponent: Modulus: A1E4D93618B8B240530853E87738403851E15BBB77421F9B2377FB0B4F1C6FC235EAEC92EA25BB76AC221DCE90173A2E232FE1511909C76B15251D4059B288E709C1EF86BCF692757AAD736882DD1E98BEDFED9311A3C22C40657C9A52880BDC4B9E539041D44D52CB26AD13AB086F7DC294D144D6633A62EF91CA1775EB9A09 Exponent: 010001

2、使用方法

image加密

加密

(1) Quick Crypto(全局调用)

当在BurpCryto有定义某种加密方式时,在ProxyIntruderRepeater模块选中要加密的部分,右击拓展找到Quick Crypto即可

解密

(1) Intruder模块:

①先判断相关接口的加密算法,这里以以AES的CBC模式为例

②在页面添加密钥(Key)和参数(IV)后点击【Add processor】,输入名称后点击【确定】,显示“Apply processor success!”标识添加成功

image-20241014194509304

③在【Intruder】–>【paylaod】–>【Payload处理】–>【添加】–>【调用Burp拓展】然后选择刚刚命名的加密方式

image-20241014195453836

(2) Exec JS(自定义JS加密代码还原)

①找到加密函数后把整个代码复制粘贴过来,在下方的【Js Method Name】中填写入口函数(以该加密函数为例,该加密函数需实例化md5Code类后调用其getValue函数,而本插件仅支持单参数的函数调用,于是需要编写一个中间函数calc,将核心加密函数直接暴露出来供插件调用。)

image-20241014211812098

此处填写需要让插件调用的加密函数的函数名称,在这个例子中就是calc函数。

image-20241014211852289

(或者知道怎么加密之后,在此处编写加密代码,这里右击有快捷键【Append Simple Function】)

然后点击【Add processor】取个名字然后保存

同上面常规使用方法在Intruder模块使用。

原理

把待处理的内容传递给入口函数的第一个参数,然后返回处理后的结果。

(3) 直接解密单个字段(查询原文)

由于部分算法产生的结果有不可逆性(哈希、自定义JS等),插件产生的所有结果被保存在本地的K/V数据库中,可以通过下图方法获取Get PlainText功能获取原始密文

e.g.:RSA公钥加密后通过密文查询原始明文

image-20241014202117193

image-20241014202126115

3、数据库清理

本插件中使用了本地持久化的K/V数据库(leveldb),由于在爆破等使用场景时会写入大量的数据,长时间使用后将有可能会拖慢插件的响应速度。为了保证用户爆破数据不会丢失,插件将不会主动清理数据,所以建议用户确定不再需要陈旧的数据的时候,及时清理数据库。

K/V数据库清理较为简单,首先需将BurpSuite完全退出,然后手动删除BurpSuite的jar文件同目录下的BurpCrypto.ldb文件夹即可

三、jsEncrypter

项目地址:https://github.com/c0ny1/jsEncrypter/releases

1、介绍

前端加密Fuzz插件

本插件使用phantomjs启动前端加密函数对数据进行加密,方便对加密数据输入点进行fuzz,比如可以使用于前端加密传输爆破等场景。

2、使用方法

提供了七种加密算法

image-20241015194105898

(1)以md5为例

把webapp/js/md5.js复制

在目录下创建md5.js文件,写入加密代码

image-20241015193151065

(2)在phantomjs_server.js文件中引入文件,并调用md5.js中的主函数

image-20241015193056264

(3)启动

1
phantomjs.exe phantomjs_server.js

(4)connect —>Test,成功把字符加密

image-20241015194611762

(5)在Intruder模块加载插件,然后测试会在cmd中显示

image-20241015194800849

image-20241015194821333

(6)目录下会生成日志文件jsEncrypter.log,可以根据密文搜索对应的明文

image-20241015194843506

四、CaA

项目地址:https://github.com/gh0stkey/CaA

作者视频讲解:https://www.bilibili.com/video/BV1F8WzeFEu5/?spm_id_from=333.999.0.0&vd_source=35e0e710beb8b117ea7983818e72a436

1、介绍

主要用于分析、拆解HTTP协议报文,提取HTTP协议报文中的参数、路径、文件、参数值等信息,并统计出现的频次,帮助用户构建出具有实战应用价值的Fuzzing字典。除此之外CaA可以生成各类HTTP请求提供给BurpSuite Intruder用于Fuzzing工作。

CaA的设计思想来源于Web Fuzzing技术,皆在帮助用户发现隐藏的漏洞面,通过对信息的收集分析整理,让用户真正意义上的实现数据挖掘

2、使用方法

(1) 人工手动

在Repeater模块

①可以提取响应包中的信息字段:

image-20241015173526634

image-20241015173131219

②在Current下,右键Copy Payload —>Raw使用当前响应包中的参数进行测试:

image-20241015173055572

image-20241015173650085

返回包中没有变化

③在All下,用127.0.0.1路径下的所有参数进行测试

image-20241015173926072

可以看到返回包发生了改变,多了WJPPqe,这里可能存在JSONP和反射XSS漏洞

image-20241015174010958

(2) 自动-Intruder

①右击,Send to Payload GGenerator,增删改查参数,然后发送给Payload生成器,然后把数据包发送到Intruder模块

image-20241015174258804

image-20241015174557655

②在Intruder模块,将整个数据包作为参数,然后在Payload进行如下图配置

image-20241015174840647

image-20241015174807652

这里是各个参数的自由组合(两个、三个….),还有GET、POST请求方式,还有XML、JSON、上传表单形式的,然后筛选有问题的数据包即可

image-20241015175024376

image-20241015175311270

image-20241015175407912

image-20241015175416840

image-20241015175232371

五、BurpJSLinkFinder

项目地址:https://github.com/InitRoot/BurpJSLinkFinder?tab=readme-ov-file

1、介绍

用于被动扫描 JS 文件的端点链接

2、使用方法

(1)配置要爬取的主机/IP(输入关键字就行)

image-20241015205147143

(2)在仪表盘的设置中,配置URL范围

image-20241015205237704

image-20241015205307361

(3)访问相应的网站爬取到js文件

image-20241015205837559

六、BurpAPIFinder

项目地址:https://github.com/shuanx/BurpAPIFinder

1、介绍

我们可以:

1、发现通过某接口可以进行未授权/越权获取到所有的账号密码、私钥、凭证

2、发现通过某接口可以枚举用户信息、密码修改、用户创建接口

3、发现登陆后台网址

4、发现在html、JS中泄漏账号密码或者云主机的Access Key和SecretKey

5、自动提取js、html中路径进行访问,也支持自定义父路径访问 …

七、GAP

1、介绍

它不仅会找到更多潜在参数供您调查,还会找到用于尝试这些参数的潜在链接,并生成特定于目标的单词列表以用于模糊测试。

2、使用方法

在BP的目标模块下,右击选择拓展—>GAP

3、模式介绍

有三种模式:ParametersLinksWords

(1) Parameters

Include URL path words

如果 URL 在范围内,则响应 URL 路径中的单词将作为潜在参数包含在内。

①Request Parameters

这些主要是 Burp 本身从 HTTP 请求中识别的参数,并且是 Burp Extender API IParameter 接口的一部分

  • Query string params

查询URL中的字符串中的参数

  • Message body params

查询正文(body)中的参数

  • Param attribute in multi-part message body

多个部分组成的消息正文中 parameter 属性的值(例如已上传文件的名称)

  • JSON params

JSON结构中的数据项

  • Cookie names

HTTP Cookie名称

  • Items of data in XML structure

XML结构的数据项

  • Value of tag attribute in XML structure

XML结构中的tag属性的值

②Response Parameters

  • JSON params

如果响应的 MIME 类型为 JSON,则将检索 Key names

  • Value of tag attributes in XML structure

XML 结构中标记属性的值 - 如果响应的 MIME 类型为 XML,则检索 XML 属性

  • Name and Id attributes of HTML input fields

HTML 输入字段的 Name 和 Id 属性 - 如果响应的 MIME 类型为 HTML,则检索任何 INPUT 标记的 NAME 和 ID 属性的值

  • Javascript variables and constants

Javascript 变量和常量。检索使用 varletconst 设置的 javascript 变量。

此外,如果有一个变量集了其中一个设置为嵌套对象的关键字,则该对象的键也将作为参数返回。除此之外,还会返回 dataLayer.push 的任何键值嵌套对象。

注意

需要改进才能检索更多变量,因为可以通过多种方式声明这些变量,并且很难从正则表达式中检索所有变量。

  • Params from links found

从链接中寻找 - 仅当还使用链接模式时,才会启用此选项。

只有 URL 明显在范围内,或者只有一个路径而无法确定它是否在范围内时,才会检索潜在 Links found 中的任何 URL 查询字符串参数。

当选择 GAP Mode of Links 时,GAP 将尝试根据以下内容查找可能的链接。此外,仅检查特定 Content-Type 的请求是否有潜在链接。这是由代码中的常量CONTENTTYPE_EXCLUSIONS决定的(这些是图像、视频、音频、字体等类型)。

  • Prefix with selected target(s)

选中后,站点地图(Site Map)中的选中的每个目标,将作为所有没有域链接的前缀。

如果你在站点地图(Site Map)中选择了一些目标,并且启用了“为每个选中的目标根添加前缀”的选项,那么对于任何没有域名的链接(即相对路径的链接),系统会自动在这些链接前添加相应的根路径。例如,如果你选择了一个位于 https://example.com/app/ 下的目标,并且在该目标内有一个链接是 /api/user/1,那么系统会自动将这个链接转换为 https://example.com/app/api/user/1

  • Prefix with link(s)

如果选中此项,则文本字段中的值将作为找到的任何没有域的链接的前缀,例如 /api/user/1。可以提供多个域,用分号分隔,例如 http://example.com;https://sub.example.com

  • Also include un-prefixed links

如果选中了 Prefix with selected target(s)Prefix with link(s) 选项,则可以选中此选项,以除带前缀的链接外,还包括原始的无前缀链接。

  • Include site map endpoints

这将包括潜在链接列表中的 Burp Site 地图(所选内容)中的终端节点(如果它们在范围内)

  • Include relative links

如果选中,则找到以 ‘./’ 或 ‘../’ 将包含在结果中。

  • Link exclusions

链接排除 - 如果选择了该选项,它将在运行时应用。文本字段包含逗号分隔的值列表。如果找到的潜在链接中存在这些值中的任何一个,则它将被排除在最终列表中。有一个初始默认列表由 DEFAULT_EXCLUSIONS 常数确定,但您可以更改此列表并保存设置。如果未选择此选项,将返回所有链接。

(3) Words

  • Create lowercase words

任何大写字母变小写

  • Create singular/plural word

创建单数/复数单词 - 向输出中添加合适的单数或复数版本

  • Include HTML comments

考虑 HTML 注释中的所有单词

  • Include IMG ALT attribute

考虑所有具有 `IMG` 标签的 `ALT` 属性的单词

  • Include words with digits

任何带有数字的单词都将被包含在输出中。

  • Include URL path words

所选链接中的任何路径单词都将被添加为单词。

  • Include potential params

如果选中,则所有可能的参数也将被添加到单词列表中。

  • Maximum length of words

最大单词长度

  • Stop words

停用词 - 术语停用词来自自然语言处理,它们是将从内容中排除的常见词。如果某个单词在运行之前存在于此列表中,则该单词将从输出中排除。

除了上述选项之外,还将从具有特定条件的所有回复中获取单词:

  • 仅搜索具有内容类型的响应。默认值为 text/htmlapplication/xmlapplication/jsontext/plainapplication/xhtml+xmlapplication/ld+jsontext/xml
  • 来自 <meta> 标签内容的字词,其中:

属性为 og:titleog:descriptiontitleog:site_namefb:admins

名称是description, keywords, twitter:title, twitter:description,application-name, author, subject, copyright, abstract, topic, summary, owner, directory, category, og:title, og:type, og:site_name, og:description, csrf-param, apple-mobile-web-app-title, twitter:label1, twitter:data1, twitter:label2, twitter:data2 or twitter:title

  • 来自 <link> 标签标题的单词,其中:

Rel 是 alternateindexstartprevnextsearch

来自页面内部 HTML 其余部分的单词,不包括标签 <style><script><link>

(4) GAP Output

①Potential Parameters

image-20241016163326577

这里将显示所有唯一潜在参数

  • Show origin

显示源

  • Show “sus”

仅显示为 “sus” 的潜在参数,后跟关联的漏洞类型(在方括号中)

  • Show query string with value

显示带值的查询字符串

给参数加上了值,和CaA相似

image-20241016162827245

  • Param Value

参数值。举例:参数赋值规则为XNLV+唯一编号。

此查询字符串可用于手动附加到 URL 并检查反射。

image-20241016163315427

文本区域将显示找到的潜在链接

  • Show origin endpoint

方括号里显示潜在链接的来源

image-20241016163418413

  • In scope only

如果勾选了此功能,并且潜在链接包含主机,则将根据 Burp Target Scope 检查此链接。如果它不在范围内,则将从输出中删除该链接。

注意

如果无法确定范围(例如,它可能只是一个没有主机的路径),那么它将被包含在范围内,以避免遗漏任何可能有用的内容

  • Link filter

链接过滤器 - 在 Filter input 字段中输入的任何值,然后按 ENTER 或按 Apply filter 将确定将显示哪些链接。这可能取决于以下两个选项的值:

  • Negative match

否定匹配 - 如果选中,则不会显示包含过滤器文本的任何链接。

  • Case sensitive

区分大小写

技巧

如果您未选中 Show origin endpoint 选项,并且选中了 In scope only 选项,那么当您右键单击窗格时,您将获得另一个菜单选项 Request all prefixed URLs and send to Site Map。单击此按钮将请求当前窗格中显示的所有 URL(因此也可以使用 Link filter 进行过滤)并为每个 URL 发出 GET 请求。URL 将在 2 个单独的线程中请求,每个请求之间间隔 10 毫秒,并且它们将被添加到站点地图中。

(5) Other options

  • Show contextual help

显示上下文帮助- 如果选中,将鼠标悬停在 GAP 的任何功能上将提供该功能的上下文帮助。

  • Auto save output to directory

①如果选中将为在 Site Map 中选择的目标站点中的每个根创建一个子文件夹

②在主文件夹中创建一个文件,其中包含 Burp 项目的名称和时间戳,例如,如果项目名为 target,则文件可能是 target_20230416_133700_links.txttarget_20230416_133700_parans.txt target_20230416_133700_words.txt 其中 20230416YYYYMMDD 格式的当前日期,133700HHMMSS 格式的当前时间。这些文件将包含为所选的所有根找到的内容。

本文由作者按照 CC BY 4.0 进行授权