from burp import IBurpExtender
from burp import IHttpListener
from burp import IHttpRequestResponse
from burp import IResponseInfo
from burp import IRequestInfo
from burp import IHttpService
from burp import IScannerCheck
from burp import IScannerInsertionPointProvider
from burp import IParameter
from burp import IScanIssue
from urlparse import urlparse
sys.path.append('C:/Python27/Lib/site-packages')class BurpExtender(IBurpExtender, IScannerCheck):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
self._callbacks.registerScannerCheck(self)
self._callbacks.setExtensionName("DIR") "http":"http://127.0.0.1:9090",
"https":"https://127.0.0.1:9090"
def doPassiveScan(self, baseRequestResponse):
Request = baseRequestResponse.getRequest()
Response = baseRequestResponse.getResponse()
analyzedRequest, reqHeaders, reqBodys, reqMethod, reqParameters = self.get_request_info(Request)
ResHeaders, ResBodys, ResStatusCode, resLength = self.get_response_info(Response)
httpService = baseRequestResponse.getHttpService()
host, port, protocol, ishttps, = self.get_server_info(httpService)
targetHost = ['saicmaxus', 'saicmotor', 'maxuscloud', 'rv2go', '224', '226', '129', '130', '91', 'sxc', 'bihuo',
'100', 'bihuoedu', 'islefoundation']
if (host.split('.')[-3] in targetHost) or ( host.split('.')[-2] in targetHost): newReqUrl = self.get_request_url(protocol, reqHeaders)
newHeaders = reqHeaders[1:]
for header in newHeaders:
heaers[header.split(':')[0]] = header.split(':')[1].strip() response = requests.get(newReqUrl, headers=heaers, proxies=self.proxies,verify=False,allow_redirects=True)
elif reqMethod == "POST":
response = requests.post(newReqUrl, headers=heaers, data=reqBodys,proxies=self.proxies,verify=False,allow_redirects=True)
response = requests.put(newReqUrl, headers=heaers, data=reqBodys, proxies=self.proxies, verify=False,
elif reqMethod == "DELETE":
response = requests.delete(newReqUrl, headers=heaers, data=reqBodys, proxies=self.proxies, verify=False,
response = requests.options(newReqUrl, headers=heaers, data=reqBodys, proxies=self.proxies, verify=False,
def consolidateDuplicateIssues(self, existingIssue, newIssue):
def doActiveScan(self, baseRequestResponse, insertionPoint):
def get_server_info(self, httpService):
host = httpService.getHost()
port = httpService.getPort()
protocol = httpService.getProtocol()
return host, port, protocol, ishttps
def get_response_info(self, response):
analyzedResponse = self._helpers.analyzeResponse(
resHeaders = analyzedResponse.getHeaders()
analyzedResponse.getBodyOffset():].tostring()
resStatusCode = analyzedResponse.getStatusCode()
for header in resHeaders:
if 'Content-Length' in header:
resLength = int(header.split(':')[1].strip()) return resHeaders, resBodys, resStatusCode, resLength
def get_parameter_Name_Value_Type(self, parameter):
parameterName = parameter.getName()
parameterValue = parameter.getValue()
parameterType = parameter.getType()
return parameterName, parameterValue, parameterType
def get_request_url(self, protocol, reqHeaders):
link = reqHeaders[0].split(' ')[1] host = reqHeaders[1].split(' ')[1] return protocol + '://' + host + link
f = open('burp_lfi.txt', 'at') f.writelines(content + '\n\n')
def saveUrl(self, content):
f = open('burp_url.txt', 'at') f.writelines(content + '\n\n')
def get_request_info(self, request):
analyzedRequest = self._helpers.analyzeRequest(
reqHeaders = analyzedRequest.getHeaders()
reqBodys = request[analyzedRequest.getBodyOffset():].tostring()
reqMethod = analyzedRequest.getMethod()
reqParameters = analyzedRequest.getParameters()
return analyzedRequest, reqHeaders, reqBodys, reqMethod, reqParameters