burp插件再次二开,实现python热更新和IDE集成

醉酒当歌 提交于 2020-02-27 18:31:02

最近花了时间对比了zap、xray、burp三个工具的细节,和实际工作项目中产生的表现,发现还是burp测的最细致入微

所以想在burp上增加一些自己想要的功能

https://github.com/portswigger/python-scripter

这个插件是一个在burp上创建一个tab以提供写入python代码的地方,并且以执行。

但是这个插件不适用于中文,而且反复加载特别的麻烦,我对他做了一些修改,注意这两个文件需要放在一起

我制作了darkhold.py版本的修改后代码,darkhold可以热加载learn.py,也就是每一次burp处理http数据时都会重新读取learn.py并执行

# -*- coding: utf-8 -*-
# Author:k4n5ha0
# Blog:https://my.oschina.net/9199771

# Python Import
from java.awt import Font
from javax.swing import JScrollPane, JTextPane
from javax.swing.text import SimpleAttributeSet

from burp import IBurpExtender, IExtensionStateListener, IHttpListener, ITab

import base64
import traceback
import os
import time

class BurpExtender(IBurpExtender, IExtensionStateListener, IHttpListener, ITab):
    def registerExtenderCallbacks(self, callbacks):
        self.callbacks = callbacks
        self.helpers = callbacks.helpers
        callbacks.setExtensionName("darkhold")

        self._code = compile('', '<string>', 'exec')
        self._script = ''

        callbacks.registerExtensionStateListener(self)
        callbacks.registerHttpListener(self)
        print 'loaded success!'

    def extensionUnloaded(self):
        return

    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        try:
            globals_ = {}
            locals_ = {'extender': self,
                       'callbacks': self.callbacks,
                       'helpers': self.helpers,
                       'toolFlag': toolFlag,
                       'messageIsRequest': messageIsRequest,
                       'messageInfo': messageInfo
                       }
            exec(self.code, globals_, locals_)
            time.sleep(0.1)
        except Exception:
            traceback.print_exc(file=self.callbacks.getStderr())
        return

    @property
    def code(self):
        path_script = os.path.abspath('.') + os.sep + 'learn.py'
        if os.path.exists(path_script):
            f = open(path_script, 'r')
            self._script = f.read().decode('utf-8')
            f.close()
            self._code = compile(self._script, '<string>', 'exec')
            return self._code
        return ''

这样就可以用vscode方便编程:

不知道为何还是有点bug,后续会加强,未来逐渐增加点新功能。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!