Parses Burp logs
(content)
| 5315 | yield (url, method, None, cookie, tuple()) |
| 5316 | |
| 5317 | def _parseBurpLog(content): |
| 5318 | """ |
| 5319 | Parses Burp logs |
| 5320 | """ |
| 5321 | |
| 5322 | if not re.search(BURP_REQUEST_REGEX, content, re.I | re.S): |
| 5323 | if re.search(BURP_XML_HISTORY_REGEX, content, re.I | re.S): |
| 5324 | reqResList = [] |
| 5325 | for match in re.finditer(BURP_XML_HISTORY_REGEX, content, re.I | re.S): |
| 5326 | port, request = match.groups() |
| 5327 | try: |
| 5328 | request = decodeBase64(request, binary=False) |
| 5329 | except (binascii.Error, TypeError): |
| 5330 | continue |
| 5331 | _ = re.search(r"%s:.+" % re.escape(HTTP_HEADER.HOST), request) |
| 5332 | if _: |
| 5333 | host = _.group(0).strip() |
| 5334 | if not re.search(r":\d+\Z", host) and int(port) != 80: |
| 5335 | request = request.replace(host, "%s:%d" % (host, int(port))) |
| 5336 | reqResList.append(request) |
| 5337 | else: |
| 5338 | reqResList = [content] |
| 5339 | else: |
| 5340 | reqResList = re.finditer(BURP_REQUEST_REGEX, content, re.I | re.S) |
| 5341 | |
| 5342 | for match in reqResList: |
| 5343 | request = match if isinstance(match, six.string_types) else match.group(1) |
| 5344 | request = re.sub(r"\A[^\w]+", "", request) |
| 5345 | schemePort = re.search(r"(http[\w]*)\:\/\/.*?\:([\d]+).+?={10,}", request, re.I | re.S) |
| 5346 | |
| 5347 | if schemePort: |
| 5348 | scheme = schemePort.group(1) |
| 5349 | port = schemePort.group(2) |
| 5350 | request = re.sub(r"\n=+\Z", "", request.split(schemePort.group(0))[-1].lstrip()) |
| 5351 | else: |
| 5352 | scheme, port = None, None |
| 5353 | |
| 5354 | if "HTTP/" not in request: |
| 5355 | continue |
| 5356 | |
| 5357 | if re.search(r"^[\n]*%s[^?]*?\.(%s)\sHTTP\/" % (HTTPMETHOD.GET, "|".join(CRAWL_EXCLUDE_EXTENSIONS)), request, re.I | re.M): |
| 5358 | if not re.search(r"^[\n]*%s[^\n]*\*[^\n]*\sHTTP\/" % HTTPMETHOD.GET, request, re.I | re.M): |
| 5359 | continue |
| 5360 | |
| 5361 | getPostReq = False |
| 5362 | forceBody = False |
| 5363 | url = None |
| 5364 | host = None |
| 5365 | method = None |
| 5366 | data = None |
| 5367 | cookie = None |
| 5368 | params = False |
| 5369 | newline = None |
| 5370 | lines = request.split('\n') |
| 5371 | headers = [] |
| 5372 | |
| 5373 | for index in xrange(len(lines)): |
| 5374 | line = lines[index] |
no test coverage detected
searching dependent graphs…