mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-03-03 11:45:46 +03:00
update
This commit is contained in:
parent
b6dcbcef5b
commit
d5e7a8d305
|
@ -1684,10 +1684,12 @@ def isNumPosStrValue(value):
|
||||||
|
|
||||||
def aliasToDbmsEnum(value):
|
def aliasToDbmsEnum(value):
|
||||||
retVal = None
|
retVal = None
|
||||||
|
|
||||||
for key, item in dbmsDict.items():
|
for key, item in dbmsDict.items():
|
||||||
if value in item[0]:
|
if value in item[0]:
|
||||||
retVal = key
|
retVal = key
|
||||||
break
|
break
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|
||||||
def removeDynamicContent(page):
|
def removeDynamicContent(page):
|
||||||
|
@ -1702,3 +1704,15 @@ def removeDynamicContent(page):
|
||||||
page = getCompiledRegex('(?s)%s.+%s' % (prefix, suffix)).sub('%s%s' % (prefix, suffix), page)
|
page = getCompiledRegex('(?s)%s.+%s' % (prefix, suffix)).sub('%s%s' % (prefix, suffix), page)
|
||||||
|
|
||||||
return page
|
return page
|
||||||
|
|
||||||
|
|
||||||
|
def isDBMSVersionAtLeast(version):
|
||||||
|
retVal = None
|
||||||
|
|
||||||
|
if version:
|
||||||
|
if not isinstance(version, basestring):
|
||||||
|
version = str(version)
|
||||||
|
if kb.dbmsVersion and kb.dbmsVersion[0] != "Unknown" and kb.dbmsVersion[0] != None:
|
||||||
|
retVal = kb.dbmsVersion[0] >= version
|
||||||
|
|
||||||
|
return retVal
|
||||||
|
|
|
@ -130,13 +130,10 @@ class Fingerprint(GenericFingerprint):
|
||||||
|
|
||||||
setDbms(DBMS.FIREBIRD)
|
setDbms(DBMS.FIREBIRD)
|
||||||
|
|
||||||
self.getBanner()
|
|
||||||
|
|
||||||
if not conf.extensiveFp:
|
|
||||||
return True
|
|
||||||
|
|
||||||
kb.dbmsVersion = [self.__sysTablesCheck()]
|
kb.dbmsVersion = [self.__sysTablesCheck()]
|
||||||
|
|
||||||
|
self.getBanner()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
warnMsg = "the back-end DBMS is not Firebird"
|
warnMsg = "the back-end DBMS is not Firebird"
|
||||||
|
|
|
@ -7,6 +7,8 @@ Copyright (c) 2006-2010 sqlmap developers (http://sqlmap.sourceforge.net/)
|
||||||
See the file 'doc/COPYING' for copying permission
|
See the file 'doc/COPYING' for copying permission
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from lib.core.data import kb
|
||||||
|
from lib.core.common import isDBMSVersionAtLeast
|
||||||
from lib.core.exception import sqlmapSyntaxException
|
from lib.core.exception import sqlmapSyntaxException
|
||||||
|
|
||||||
from plugins.generic.syntax import Syntax as GenericSyntax
|
from plugins.generic.syntax import Syntax as GenericSyntax
|
||||||
|
@ -21,57 +23,58 @@ class Syntax(GenericSyntax):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def unescape(expression, quote=True):
|
def unescape(expression, quote=True):
|
||||||
#if quote:
|
if isDBMSVersionAtLeast('2.1'):
|
||||||
#while True:
|
if quote:
|
||||||
#index = expression.find("'")
|
while True:
|
||||||
#if index == -1:
|
index = expression.find("'")
|
||||||
#break
|
if index == -1:
|
||||||
|
break
|
||||||
|
|
||||||
#firstIndex = index + 1
|
firstIndex = index + 1
|
||||||
#index = expression[firstIndex:].find("'")
|
index = expression[firstIndex:].find("'")
|
||||||
|
|
||||||
#if index == -1:
|
if index == -1:
|
||||||
#raise sqlmapSyntaxException, "Unenclosed ' in '%s'" % expression
|
raise sqlmapSyntaxException, "Unenclosed ' in '%s'" % expression
|
||||||
|
|
||||||
#lastIndex = firstIndex + index
|
lastIndex = firstIndex + index
|
||||||
#old = "'%s'" % expression[firstIndex:lastIndex]
|
old = "'%s'" % expression[firstIndex:lastIndex]
|
||||||
#unescaped = ""
|
unescaped = ""
|
||||||
|
|
||||||
#for i in range(firstIndex, lastIndex):
|
for i in range(firstIndex, lastIndex):
|
||||||
#unescaped += "ASCII_CHAR(%d)" % (ord(expression[i]))
|
unescaped += "ASCII_CHAR(%d)" % (ord(expression[i]))
|
||||||
#if i < lastIndex - 1:
|
if i < lastIndex - 1:
|
||||||
#unescaped += "||"
|
unescaped += "||"
|
||||||
|
|
||||||
#expression = expression.replace(old, unescaped)
|
expression = expression.replace(old, unescaped)
|
||||||
#else:
|
else:
|
||||||
#unescaped = "".join("ASCII_CHAR(%d)||" % ord(c) for c in expression)
|
unescaped = "".join("ASCII_CHAR(%d)||" % ord(c) for c in expression)
|
||||||
#if unescaped[-1] == "||":
|
if unescaped[-1] == "||":
|
||||||
#unescaped = unescaped[:-1]
|
unescaped = unescaped[:-1]
|
||||||
|
|
||||||
#expression = unescaped
|
expression = unescaped
|
||||||
|
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def escape(expression):
|
def escape(expression):
|
||||||
#while True:
|
while True:
|
||||||
#index = expression.find("ASCII_CHAR(")
|
index = expression.find("ASCII_CHAR(")
|
||||||
#if index == -1:
|
if index == -1:
|
||||||
#break
|
break
|
||||||
|
|
||||||
#firstIndex = index
|
firstIndex = index
|
||||||
#index = expression[firstIndex:].find(")")
|
index = expression[firstIndex:].find(")")
|
||||||
|
|
||||||
#if index == -1:
|
if index == -1:
|
||||||
#raise sqlmapSyntaxException, "Unenclosed ) in '%s'" % expression
|
raise sqlmapSyntaxException, "Unenclosed ) in '%s'" % expression
|
||||||
|
|
||||||
#lastIndex = firstIndex + index + 1
|
lastIndex = firstIndex + index + 1
|
||||||
#old = expression[firstIndex:lastIndex]
|
old = expression[firstIndex:lastIndex]
|
||||||
#oldUpper = old.upper()
|
oldUpper = old.upper()
|
||||||
#oldUpper = oldUpper.lstrip("ASCII_CHAR(").rstrip(")")
|
oldUpper = oldUpper.lstrip("ASCII_CHAR(").rstrip(")")
|
||||||
#oldUpper = oldUpper.split("||")
|
oldUpper = oldUpper.split("||")
|
||||||
|
|
||||||
#escaped = "'%s'" % "".join([chr(int(char)) for char in oldUpper])
|
escaped = "'%s'" % "".join([chr(int(char)) for char in oldUpper])
|
||||||
#expression = expression.replace(old, escaped).replace("'||'", "")
|
expression = expression.replace(old, escaped).replace("'||'", "")
|
||||||
|
|
||||||
return expression
|
return expression
|
||||||
|
|
|
@ -93,17 +93,14 @@ class Fingerprint(GenericFingerprint):
|
||||||
logger.warn(warnMsg)
|
logger.warn(warnMsg)
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
else:
|
||||||
|
result = inject.checkBooleanExpression("RANDOMBLOB(-1)>0")
|
||||||
|
kb.dbmsVersion = [ '3' if result else '2' ]
|
||||||
|
|
||||||
setDbms(DBMS.SQLITE)
|
setDbms(DBMS.SQLITE)
|
||||||
|
|
||||||
self.getBanner()
|
self.getBanner()
|
||||||
|
|
||||||
if not conf.extensiveFp:
|
|
||||||
return True
|
|
||||||
|
|
||||||
version = inject.getValue("SELECT SUBSTR((SQLITE_VERSION()), 1, 1)", unpack=False, charsetType=2, suppressOutput=True)
|
|
||||||
kb.dbmsVersion = [ version ]
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
warnMsg = "the back-end DBMS is not SQLite"
|
warnMsg = "the back-end DBMS is not SQLite"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user