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参数
实战应用:
修改参数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表单:
请求的主机名xxxx.aliyuncs.com和表单的OSSAccessKeyId参数,基本可以确认系统使用 OSS 作为上传文件存储,即使上传恶意脚本文件也无法成功解析。
通过查阅相关文件,我们可以知道使用表单上传文件到 OSS的技术方案里,有三种实现方式: OSS产品文档:https://help.aliyun.com/document_detail/31923.html
- 在客户端通过JavaScript代码完成签名,然后通过表单直传数据到OSS。
- 在服务端完成签名,然后通过表单直传数据到OSS。
- 在服务端完成签名,并且服务端设置了上传后回调,然后通过表单直传数据到OSS。OSS回调完成后,再将应用服务器响应结果返回给客户端。
当采用JavaScript客户端直接签名时,AccessKeyID和AcessKeySecret会暴露在前端页面,存在严重的安全隐患。
通过翻找js文件,可发现AccessKey就写在js文件里面。
参考文章:由OSS AccessKey泄露引发的思考 - Bypass - 博客园 (cnblogs.com)
(5) 其他
①Create Script规则
匹配响应报文中createElement(常见script标签)的内容
例子:
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、使用方法
加密
(1) Quick Crypto(全局调用)
当在BurpCryto
有定义某种加密方式时,在Proxy
、Intruder
、Repeater
模块选中要加密的部分,右击拓展
找到Quick Crypto
即可
解密
(1) Intruder模块:
①先判断相关接口的加密算法,这里以以AES的CBC模式为例
②在页面添加密钥(Key)和参数(IV)后点击【Add processor】,输入名称后点击【确定】,显示“Apply processor success!”标识添加成功
③在【Intruder】–>【paylaod】–>【Payload处理】–>【添加】–>【调用Burp拓展】然后选择刚刚命名的加密方式
(2) Exec JS(自定义JS加密代码还原)
①找到加密函数后把整个代码复制粘贴过来,在下方的【Js Method Name】中填写入口函数(以该加密函数为例,该加密函数需实例化md5Code
类后调用其getValue
函数,而本插件仅支持单参数的函数调用,于是需要编写一个中间函数calc
,将核心加密函数直接暴露出来供插件调用。)
此处填写需要让插件调用的加密函数的函数名称,在这个例子中就是calc
函数。
(或者知道怎么加密之后,在此处编写加密代码,这里右击有快捷键【Append Simple Function】)
然后点击【Add processor】取个名字然后保存
同上面常规使用方法在Intruder模块使用。
把待处理的内容传递给入口函数的第一个参数,然后返回处理后的结果。
(3) 直接解密单个字段(查询原文)
由于部分算法产生的结果有不可逆性(哈希、自定义JS等),插件产生的所有结果被保存在本地的K/V数据库中,可以通过下图方法获取Get PlainText
功能获取原始密文
e.g.:RSA公钥加密后通过密文查询原始明文
3、数据库清理
本插件中使用了本地持久化的K/V数据库(leveldb),由于在爆破等使用场景时会写入大量的数据,长时间使用后将有可能会拖慢插件的响应速度。为了保证用户爆破数据不会丢失,插件将不会主动清理数据,所以建议用户确定不再需要陈旧的数据的时候,及时清理数据库。
K/V数据库清理较为简单,首先需将BurpSuite完全退出,然后手动删除BurpSuite的jar文件同目录下的BurpCrypto.ldb
文件夹即可
三、jsEncrypter
项目地址:https://github.com/c0ny1/jsEncrypter/releases
1、介绍
前端加密Fuzz插件
本插件使用phantomjs
启动前端加密函数对数据进行加密,方便对加密数据输入点进行fuzz,比如可以使用于前端加密传输爆破等场景。
2、使用方法
提供了七种加密算法
(1)以md5为例
把webapp/js/md5.js复制
在目录下创建md5.js文件,写入加密代码
(2)在phantomjs_server.js文件中引入文件,并调用md5.js中的主函数
(3)启动
1
phantomjs.exe phantomjs_server.js
(4)connect
—>Test
,成功把字符加密
(5)在Intruder模块加载插件,然后测试会在cmd中显示
(6)目录下会生成日志文件jsEncrypter.log,可以根据密文搜索对应的明文
四、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模块
①可以提取响应包中的信息字段:
②在Current
下,右键Copy Payload
—>Raw
使用当前响应包中的参数进行测试:
返回包中没有变化
③在All
下,用127.0.0.1路径下的所有参数进行测试
可以看到返回包发生了改变,多了WJPPqe,这里可能存在JSONP和反射XSS漏洞
(2) 自动-Intruder
①右击,Send to Payload GGenerator
,增删改查参数,然后发送给Payload生成器,然后把数据包发送到Intruder模块
②在Intruder模块,将整个数据包作为参数,然后在Payload
进行如下图配置
这里是各个参数的自由组合(两个、三个….),还有GET、POST请求方式,还有XML、JSON、上传表单形式的,然后筛选有问题的数据包即可
五、BurpJSLinkFinder
项目地址:https://github.com/InitRoot/BurpJSLinkFinder?tab=readme-ov-file
1、介绍
用于被动扫描 JS 文件的端点链接
2、使用方法
(1)配置要爬取的主机/IP(输入关键字就行)
(2)在仪表盘
的设置中,配置URL范围
(3)访问相应的网站爬取到js文件
六、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、模式介绍
有三种模式:Parameters、Links 和 Words
(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 变量和常量。检索使用 var
、let
或 const
设置的 javascript 变量。
此外,如果有一个变量集了其中一个设置为嵌套对象的关键字,则该对象的键也将作为参数返回。除此之外,还会返回 dataLayer.push
的任何键值嵌套对象。
需要改进才能检索更多变量,因为可以通过多种方式声明这些变量,并且很难从正则表达式中检索所有变量。
- Params from links found
从链接中寻找 - 仅当还使用链接模式时,才会启用此选项。
只有 URL 明显在范围内,或者只有一个路径而无法确定它是否在范围内时,才会检索潜在 Links found 中的任何 URL 查询字符串参数。
(2) Links
当选择 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/html
、application/xml
、application/json
、text/plain
、application/xhtml+xml
、application/ld+json
、text/xml
- 来自
<meta>
标签内容的字词,其中:
属性为 og:title
、og:description
、title
、og:site_name
或 fb: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 是 alternate
、index
、start
、prev
、next
或 search
来自页面内部 HTML 其余部分的单词,不包括标签 <style>
、<script>
和 <link>
(4) GAP Output
①Potential Parameters
这里将显示所有唯一潜在参数
- Show origin
显示源
- Show “sus”
仅显示为 “sus” 的潜在参数,后跟关联的漏洞类型(在方括号中)
- Show query string with value
显示带值的查询字符串
给参数加上了值,和CaA相似
- Param Value
参数值。举例:参数赋值规则为XNLV+唯一编号。
此查询字符串可用于手动附加到 URL 并检查反射。
②Potential Links
文本区域将显示找到的潜在链接
- Show origin endpoint
方括号里显示潜在链接的来源
- 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.txt
, target_20230416_133700_parans.txt
target_20230416_133700_words.txt
其中 20230416
是 YYYYMMDD
格式的当前日期,133700
是 HHMMSS
格式的当前时间。这些文件将包含为所选的所有根找到的内容。