# Author: Emmanuel Law # Version: 1.0 # License: MIT License from burp import IBurpExtender from burp import IHttpListener from burp import IProxyListener from burp import IInterceptedProxyMessage from burp import IContextMenuFactory from javax.swing import JMenuItem from java.awt.event import ActionListener from java.io import PrintWriter class BurpExtender(IBurpExtender,IProxyListener, IContextMenuFactory,ActionListener): def registerExtenderCallbacks( self, callbacks): # keep a reference to our callbacks and helper object self._callbacks=callbacks self._helpers=callbacks.getHelpers() self.stdout = PrintWriter(callbacks.getStdout(), True) # Keep Track of Browsers self._browser={} # Colors for different browsers self.colors=["red", "pink", "green","magenta","cyan", "gray", "yellow"] self._callbacks.setExtensionName("Multi-Browser Highlighting") self.isEnabled=False #IExtensionHelpers helpers = callbacks.getHelpers() callbacks.registerProxyListener(self) callbacks.registerContextMenuFactory(self) return def processProxyMessage(self, messageIsRequest, message): if self.isEnabled == False: return # self._stdout.println(("Proxy request to " if messageIsRequest else "Proxy response from ") + message.getMessageInfo().getHttpService().toString()) if messageIsRequest == False: return browser_agent=None headers=self._helpers.analyzeRequest(message.getMessageInfo()).getHeaders() for x in headers: if x.lower().startswith("user-agent:"): browser_agent=x break if browser_agent not in self._browser: self._browser[browser_agent]={"id":len(self._browser)+1, "agent":browser_agent, "color":self.colors.pop()} self.stdout.println(self._browser[browser_agent]["agent"]) message.getMessageInfo().setHighlight(self._browser[browser_agent]["color"]) def createMenuItems(self, invocation): if invocation.getInvocationContext() == invocation.CONTEXT_PROXY_HISTORY: mymenu=[] if self.isEnabled: item=JMenuItem("Multi-Browser Highlight (Running): Click to Disable ") else: item=JMenuItem("Multi-Browser Highlight (Stopped): Click to Enable ") item.addActionListener(self) mymenu.append(item) return mymenu else: return None def actionPerformed(self, actionEvent): self.isEnabled= not self.isEnabled