BurpSuite实战指南(七)

关注 2016-11-19 13:12:40 查看数 10542 ,评论数 0 专题

上期回顾:

[专题] burpsuite实战指南(六)

本期内容

  • Burp Suite应用商店插件的使用
  • 如何编写自己的Burp Suite插件

第十五章 Burp Suite应用商店插件的使用

Burp在软件中提供了支持第三方拓展插件的功能,方便使用者编写自己的自定义插件或从插件商店中安装拓展插件。Burp扩展程序可以以多种方式支持自定义Burp的行为,例如:修改HTTP请求和响应,自定义UI,添加自定义扫描程序检查以及访问关键运行时信息,包括代理历史记录,目标站点地图和扫描程序问题等。 本章讲述的主要内容有:
  • 应用商店插件的安装使用(BApp Store)
  • 管理和加载Burp 插件(Extension)
  • 其他选项设置(Options)

应用商店插件的安装使用

在Burp Extender 面板中,有一个BApp Store的Tab页,这就是Burp的应用商店,内容是提供各种Burp的插件。 默认情况下,当你点击【BApp Store】的Tab页时,界面列表会显示插件明细,若你的环境是通过代理访问外网的,则需要在【Options】->【Connections】->【Upstream Proxy Servers】进行设置,具体如下图所示: 15_02 其中代理服务器的host和port为你本地的网络环境访问外网的代理主机和端口,更详细的设置请参加Connections章节相关内容。 如果你的网络设置没有问题,则应用商店的界面显示大体如下: 15_01 从图中我们可以看出,左边为各个插件的应用列表,当选中某个插件后,右侧显示的为该插件的描述信息和安装信息。 如果我们需要使用某个插件,则点击右侧下方的【install】按钮,进行安装。 15_03 此时,安装按钮置为灰色,同时显示为【installing】,右下角也显示安装中,如上图。安装完成后,界面会显示重新安装【Reinstall】和插件评分按钮【Submit rating】,作为插件商店的用户推荐。 15_04 安装完毕后,在Burp Extender 的Extension的Tab页面中,会自动显示已加载的插件列表。通过插件列表的管理,我们可以对插件进行后期的维护。 15_05 当然,除了从应用商店自动安装插件外,我们也可以下载插件,进行手工安装。如下图: 15_06 当我们点击图中1处的手工安装按钮,则弹出插件安装文件存储的盘符,选择指定的插件文件,点击打开即可进行安装。

管理和加载Burp 插件(Extension)

从上一章节我们已经了解到,安装完成的插件,都会显示在插件列表中。 15_051 如果我们想对某个插件的配置信息进行编辑,则如上图中所示,选中插件,其下方的【Details】标签页会显示插件的拓展信息,如:拓展的插件类型(java/Python/Ruby)、插件的文件名、存储的位置。 除了【Details】标签页外,【Output】和【Errors】两个页面分别可以设置此插件的标准输出和错误信息输出信息。 15_07 从上图中我们可以看出,日志信息的输出有三种方式: a)系统控制台输出 b)存储到指定的文件中 c)Burp的界面输出 默认情况下,会选择Burp的界面输出。在实际应用中,我们可以根据自己的需要,对日志的存储方式进行调整。

其他选项设置

Burp插件的其他选项设置主要是指Options 的Tab页中的相关设置。 15_08 从图中我们可以看出,【Setting】的设置是指:是否启动时自动重新加载burp插件,当我们选择此项时,Burp在重启时,会自动加载Burp在上次关闭时加载的插件内容;而剩下的三项设置是根据插件类型的不同时所需要的运行环境的配置。我们先来看第一个运行环境【Java Environment】。 15_09 Burp Suite是基于Java语言开发的软件,通常情况下,当你运行此软件时,系统中的JAVA_HOME、CLASS_PATH、LIB_PATH变量均已正确地配置完成,否则你是难以运行Burp Suite的,所以,通常情况下你是无须再配置此参数;如果实在需要配置,你的插件需要特殊的jdk版本要求或者其他ja,则选择将jar添加即可。 15_10 而 【Python Environment】和【Ruby Environment】是Burp插件的Python运行环境和Ruby运行环境的配置。前文我们已经知道,Burp是java语言编写的软件,所以运行Python和Ruby需要配置兼容Java与Python、Java与Ruby的jar,默认情况下,Burp支持的为JPython和JRuby,这两个软件的地址分别是 :http://www.jython.org/http://jruby.org.其安装方式非常简单,此处以JPython为例: 1.下载JPython的安装包,Jpython的安装分jython-installer-2.7.0.jar和jython-standalone-2.7.0.jar两个。如果使用jython-installer,则下载完毕后,双击此jar,按照安装向导,一路【Next】到如下图的界面,记录安装路径。然后一直默认,直至安装结束。 15_11 如果使用jython-standalone-2.7.0.jar,则直接进行第2步。 2.在Burp的Python Environment环境中配置Jpython,如果使用的jython-standalone-2.7.0.jar,则如下图指定jar存放的位置即可;如果是使用jython-installer方式,则指定安装的文件夹,由软件自己加载(此处为了说明使用的方式,两个输入域均输入了,实际使用时,Jpython之输入其中之一即可)。 15_12 至于JRuby的配置与JPython类似,此处就不再赘述。配置完插件运行的可依赖环境之后,当我们使用插件时就能正常使用,否则,在插件的【Errors】标签页中会有错误的提示信息,我们可以根据错误提示来修改自己的配置。 15_13 ++值得注意的是,当我们使用Burp插件功能,对于Burp运行时所需要的JVM内存占用比较大,一般建议设置为1G,具体设置请参考第一章节。++

第十六章 如何编写自己的Burp Suite插件

Burp Suite的强大除了自身提供了丰富的可供测试人员使用的功能外,其提供的支持第三方拓展插件的功能也极大地方便使用者编写自己的自定义插件。从上一章节我们已经了解到,Burp Suite支持的插件类型有Java、Python、Ruby三种。无论哪种语言的实现,开发者只要选择自己熟悉的语言,按照接口规范去实现想要的功能即可。下面我们就来看看如何开发一个Burp Extender的插件。 本章讲述的主要内容有:
  • API简述
  • Burp插件的编写前准备
  • Burp插件的编写(Java语言版)

API简述

打开Burp Extender的APIs的Tab页,看到的界面如下图所示: 16_01 界面由左边的接口类和右边的接口定义和描述构成,其中左边的最下端有两个按钮,图中1按钮为保存接口类,当我们点击保存后,在指定的存储目录下,会生成一系列的java文件,如下图: 16_02 这些文件的内容即为前一张图中右边所示的内容,按照java语言的源文件格式存放的,在编写插件时,可直接将burp包引入Project中使用。而前一张图中2按钮为保存Javadocs,点击保存后,会在存储目录中存放与API相对应的JavaDocs文件。用浏览器打开则如下图所示: 16_03 除了上文说的,我们能导出JavaDocs到本地外,Burp官方也提供了一份在线文档,地址为:https://portswigger.net/burp/extender/api/index.html 下面我们根据接口功能的不同对API进行分类。 1.插件入口和帮助接口类:IBurpExtender、IBurpExtenderCallbacks、IExtensionHelpers、IExtensionStateListener
IBurpExtender接口类是Burp插件的入口,所有Burp的插件均需要实现此接口,并且类命名为BurpExtender。 IBurpExtenderCallbacks接口类是IBurpExtender接口的实现类与Burp其他各个组件(Scanner、Intruder、Spider......)、各个通信对象(HttpRequestResponse、HttpService、SessionHandlingAction)之间的纽带。 IExtensionHelpers、IExtensionStateListener这两个接口类是插件的帮助和管理操作的接口定义。
2.UI相关接口类:IContextMenuFactory、IContextMenuInvocation、ITab、ITextEditor、IMessageEditor、IMenuItemHandler
这类接口类主要是定义Burp插件的UI显示和动作的处理事件,主要是软件交互中使用。
3.Burp工具组件接口类:IInterceptedProxyMessage、IIntruderAttack、IIntruderPayloadGenerator、IIntruderPayloadGeneratorFactory、IIntruderPayloadProcessor、IProxyListener、IScanIssue、IScannerCheck、IScannerInsertionPoint、IScannerInsertionPointProvider、IScannerListener、IScanQueueItem、IScopeChangeListener
这些接口类的功能非常好理解,Burp在接口定义的命名中使用了的见名知意的规范,看到接口类的名称,基本就能猜测出来这个接口是适用于哪个工具组件。+
4.HTTP消息处理接口类:ICookie、IHttpListener、IHttpRequestResponse、IHttpRequestResponsePersisted、IHttpRequestResponseWithMarkers、IHttpService、IRequestInfo、IParameter、IResponseInfo
这些接口的定义主要是围绕HTTP消息通信过程中涉及的Cookie、Request、Response、Parameter几大消息对象,通过对通信消息头、消息体的数据处理,来达到控制HTTP消息传递的目的。
通过对Burp插件 API的功能划分,我们对API的接口有一个初步的认知,知道在使用某个功能时,可以去哪个接口类中寻找相应的接口定义来做自己的实现。例如。我们想显示一个Tab页界面,那么肯定是要实现ITab接口;如果需要对消息进行编辑修改,则需要实现IMessageEditor接口;需要使用payload生成器,则需要实现IIntruderPayloadGenerator接口。通过接口分类后再找具体的接口定义的方法,可以帮助我们在不太熟悉Burp 插件API的情况下,更快地开发出自己需要的插件。

Burp插件的编写前准备

编写一个完整的Burp插件的大体过程可分为如下三步:+ 1. 导入Burp插件接口,即通过APIs界面上的【save interface files】的保存动作,将生成的文件连同burp目录一下添加你自己的Java Project中。 2. 编写Burp插件,即通过自己的代码编写,完成自己想实现的功能插件的编码过程。 3. 加载Burp插件,即将上一步编写完成的插件,打包后导入Burp Extensions中,进行试用测试的过程。 其中第一步和第三步对大多数来说,没有难度,主要难度在于如何编码实现Burp的插件。在Burp Suite的官方网站上,插件编写网址:https://portswigger.net/burp/extender/。当我们打开这个网页,会发现网站上有一系列Demo,包含各个编程语言的实现的源代码,这些Demo,按照开发的难度逐步增加的,我们可以点击【Download】链接下载源码进行分析和学习(网页截图如下所示)。 16_04 除了这些Demo外,网站还有一篇插件编写入门的文章。网址:http://blog.portswigger.net/2012/12/writing-your-first-burp-extension.html。文章中以Java和Python语言为例,编写一个最简单的Burp插件来熟悉插件的编写流程,阅读这些文章,会给我们编写Burp插件带来极大的帮助。阅读完这篇文章之后,接着官方的归档文件中,会有一些由浅入深讲解插件编写的文章,E文好的同学也可以自己看看,网址点击:http://blog.portswigger.net/2012_12_01_archive.html 如果你没法读懂这些文章,那么我们一起先来看看编写Burp插件的准备工作有哪些,下一章以实例学习如何编写一个Burp插件。通常编写Burp插件的准备工作有:
  1. 安装JDK------我相信会使用Burp Suite软件的同学都已经安装过JDK了,如果没有安装,请阅读此书的第一章第二章相关章节。
  2. 安装IDE------一款好的IDE能使得开发效率得到极大的提升,Java语言推荐使用Eclipse或者IntelliJ,Python推荐使用Pycharm或者PyDev,具体每一个IDE软件的安装,请读者自己查找学习。
  3. 熟悉编程语言的语法-----这是编写插件的基础,如果连基本的语法都不熟悉,编写Burp代码是有一定难度的,接下来的文章中,编者默认为阅读者对语法的掌握程度是熟悉的。
具备了以上三点,把你自己想要实现的插件功能按照软件需求分析的流程在图纸上简单地画出来,我们即可以进入插件开发环节。

Burp插件的编写(Java语言版)

Burp插件的编写语言有Java、Python、Ruby,此处我们以Java为例,来学习编写一个插件。插件要实现的功能是:在http和https请求的header部分添加一个X-Forward-For字段,而字段中的IP地址是随机生成或者指定的,用于绕过使用该字段来防护暴力破解等的场景。插件代码的编写是基于网友bit4woo的Burp插件源码进行二次开发的。源项目github地址:https://github.com/bit4woo/Burp_Extender_random_X-Forward-For,在此向网友bit4woo致谢! bit4woo网友的源码中实现的插件中仅有X-Forward-For的消息头添加,无插件的UI界面,我们无控制插件是否生效和跟踪http消息通信的直观查看。因此,我们需要实现的插件的功能如下:
  1. 对使用插件的HTTP请求消息头中添加X-Forward-For字段
  2. 添加UI界面,直观地感受插件的使用。
  3. 跟踪HTTP消息,在Burp中使用了哪些组件,请求的URL是什么,请求后的http状态码是否多少。
  4. 能在插件中控制本插件是否拦截所有的HTTP请求消息,即是否对请求消息头添加X-Forward-For字段。
  5. 添加的X-Forward-For字段是随机生成还是自己指定的值。
插件编写完成的消息跟踪界面(HistoryLog)如下图: 16_05 插件的设置界面(Options)如下: 16_06 下面我们就来看看具体的编码实现(此处仅仅谈Burp插件的编写,Swing组件的使用不涉及,默认编写者对Swing已熟练掌握)。 1.首先在burp包中定义了一个名称为BurpExtender的java类,必须继承IBurpExtender接口。这个上一个章节已经阐述过了。 16_07 2.因为要在Burp中添加一个tab页作为我们自定义的UI,所以我们需要实现ITab接口;因为要显示请求和响应消息,所以需要实现IMessageEditorController接口;因为要拦截请求的报文,添加X-Forward-For,所以需要实现IHttpListener接口。如上图所示。类定义完成后,导入未实现的方法,则类的UML图如下: 16_08 3.接着就是对接口类的方法实现,在UML中,下面两个是需要实现的主要函数: registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) 这个函数是Burp插件的入口,在这里主要做了如下工作:1)初始化插件和组件对象 2)设置自定义的UI界面原型。 16_09 其中创建自定义UI的run函数代码如下: 16_10 其次是processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) 这个函数的功能主要是对HTTP消息的处理和添加HTTP消息到History列表中。其代码如下: 16_11 除了这两个函数,其他函数的功能主要是为了UI展示做的各种逻辑操作,此处就不再叙述了,想要了解的同学可以下载本章后面附的源码进行阅读。 4.完成了主要函数的编码之后,插件开发的部分就已经结束了,这时候,我们只需要把代码导出成jar把,加载到Burp Extensions中测试运行即可。 16_12 5.本插件和其源码下载地址 点击下载插件jar 点击下载源码 下载完毕后,你可以把src中的两个java类放入从APIs 标签页中导入的接口类所在的burp包中,编译后打包jar运行;也可以直接把下载的X-forward-For.jar导入Burp拓展插件中,即可看到插件的运行界面。
交流评论(0)
Loading...
点击 ,就能发表评论哦~如果您还没有账号,请 一个吧

广告

关注我们 查看更多精彩文章

css.php
正在加载中...