如何在特定的渗透测试中使用正确的Burp扩展插件
写在前面的话
Burp Suite是很多渗透测试人员会优先选择使用的一款强大的平台,而且安全社区中也有很多研究人员开发出了大量的功能扩展插件并将它们免费提供给大家使用。这些插件不仅能够简化渗透测试的过程,而且还能够以各种非常有趣的方式进一步增强Burp Suite的功能。
实际上,其中的很多扩展插件都是为解决特定问题而存在的。换个角度来看,我们如何能够选择和调整特定的扩展插件以更好地满足我们的需求呢?这就是本文想要跟大家分享的东西了。
一般来说,想要修改第三方Burp扩展往往是非常困难的,不过整个安全社区也在努力让所有的Burp扩展实现开源,并使用类似的扩展构建方法来设计这些扩展插件。在这篇文章中,我们将简单地告诉大家如何自定义修改一款Burp扩展,并且根据自己的渗透测试和安全审计的需求来搭建出一个高效的Burp环境。
接下来,我会对著名的Collaborator Everywhere扩展进行个性化修改,并让它能够注入额外的查询参数以尝试检测出SSRF漏洞,最后通过HUNT扩展来进行漏洞验证。
开发环境搭建
首先,我们要创建出自己的开发环境。为了使用Java来编辑扩展插件,我们要安装Java JDK以及Gradle。如果扩展使用的是Python或Ruby,那你就不用安装Java相关的组件了,不过 Git还是会使用到的。
获取代码
接下来我们要获取目标扩展的源代码。访问https://portswigger.net/bappstore搜索你的目标扩展,然后点击页面的“View Source Code”按钮。点击之后你将跳转到扩展的GitHub页面(以Collaborator Everywhere为例-【GitHub主页】),然后你可以选择下载ZIP包或直接在终端使用Git命令将项目代码克隆到本地。例如:
git clonehttps://github.com/portswigger/collaborator-everywhere
验证环境(Java only)
在你开始修改之前,你要确保你已经成功构建了jar包并将其加载进了Burp。如果你不知道如何构建jar包的话,你可以查看BappManifest.bmf文件中的BuildCommand相关内容。就CollaboratorEverywhere来说,我们可以直接使用命令gradle fatJar来完成构建。
采用&测试修改
如果你成功将新构建的jar文件加载进了Burp并且能正常工作的话,你就可以准备开始修改代码并进行重构了。
Collaborator Everywhere会从项目目录resources/injections中读取payload,所以我可以在没一个参数后面添加一行我想要注入的内容即可。比如说,下面这行代码会添加一个名叫‘feed’的GET参数,并以HTTP URL的形式呈现:
param,feed,http://%s/
如果哪一个特定的Payload触发了错误异常的话,你可以直接用#将其注释掉之后再慢慢调试。
接下来,我们可以通过观察扩展的流数据(请求和响应)来判断修改操作是否成功。下图显示的是修改后的扩展运行情况,表明我们自定义的扩展已经能够正常工作了:
最后需要提醒大家的是,不必要的修改很可能会带来负面影响噢!
后话
如果你想与安全社区分享你自定义的增强版扩展,你可以向PortSwigger库提交扩展插件(pull request),或单独建立一个GitHub代码库。
某些扩展插件可能修改起来会非常的困难,但是考虑到开发环境的搭建并不难,所以我建议大家可以尝试去个性化修改一些Burp扩展,因为这也是一个学习和积累经验的过程嘛!
- linux学习第四十七篇:Nginx负载均衡,ssl原理,生产ssl密钥对,Nginx配置ssl
- linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
- linux学习第五十一篇:NFS介绍,NFS服务端安装配置,NFS配置选项
- linux学习第五十二篇: exportfs命令,NFS客户端问题,FTP介绍,使用vsftpd搭建ftp服务
- linux学习第五十四篇:Tomcat介绍,安装jdk,安装Tomcat
- linux学习第五十九篇:LVS DR模式搭建,keepalived lvs
- linux学习第五十四篇:配置Tomcat监听80端口,配置Tomcat的虚拟主机,Tomcat日志
- linux学习第五十六篇:集群介绍,keepalived介绍,用keepalived配置高可用集群
- linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建
- Python中eval带来的潜在风险,你知道吗?
- React Native自定义导航条
- android混淆那些坑
- 微信小程序开发入门篇
- Support Annotation Library使用详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 建议收藏 哭着喊着 从C语言转向C++刷算法
- Spring的事务管理
- 面向切面的Spring
- 搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
- Spring对JDBC的模板支持——JdbcTemplate
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
- Hadoop集成Spring的使用
- 通过Jenkins部署java项目
- Spring使用注解配置依赖注入
- Spring的依赖注入
- 通过Jenkins发布php代码
- 初识Spring
- 使用Python的BeautifulSoup库实现一个可以爬取1000条百度百科数据的爬虫
- 初识Spark
- 初识SpringBoot