def _process_request(self, reqinfo, reqbody): """ Process request and extract key values :param reqinfo: :param reqbody: :return: """ url = str(reqinfo.getUrl()) if is_query(reqbody[reqinfo.getBodyOffset():].tostring()): for h in reqinfo.getHeaders(): if h.lower().startswith("host:"): domain = h[5:].strip() method = reqinfo.getMethod() try: self._requests[domain] except KeyError: self._requests[domain] = { 'POST': None, 'PUT': None, 'GET': None, 'url': None } self._requests[domain][method] = (reqinfo, reqbody) self._requests[domain]['url'] = url
def createMenuItems(self, invocation): """ Overrides IContextMenuFactory callback :param invocation: handles menu selected invocation :return: """ try: r = invocation.getSelectedMessages()[0] info = self._helpers.analyzeRequest(r) url = str(info.getUrl()) body = r.getRequest()[info.getBodyOffset():].tostring() if not is_query(body): return None for h in info.getHeaders(): if h.lower().startswith("host:"): domain = h[5:].strip() self._action_listener.ctx(fname='dummy.query', host=domain, payload=body) mymenu = [] mymenu.append(self._burp_menuitem) except Exception as ex: return None return mymenu
def processHttpMessage(self, toolFlag, messageIsRequest, requestResponse): if self.isRunning: if self.toolFilter == 0 or self.toolFilter == toolFlag: messageInfo = self._helpers.analyzeRequest(requestResponse) url = messageInfo.getUrl() requestBody = requestResponse.getRequest( )[messageInfo.getBodyOffset():].tostring() if not is_query(requestBody): return # exit early qobj = json.loads(requestBody) queryBody = "" operationName = "" if 'query' in qobj: queryBody = qobj['query'] if 'operationName' in qobj: operationName = qobj['operationName'] if messageIsRequest: self.reqResMap.put(url, System.currentTimeMillis()) elif self.reqResMap.containsKey(url): time = System.currentTimeMillis() - self.reqResMap.get(url) self.reqResMap.remove(url) # create a new log entry with the message details synchronize.apply_synchronized( self.panel.getLogTableModel().getLogArray(), self.syncProcessHttpMessage, (toolFlag, requestResponse, time, queryBody, operationName))