fix for proper Firebird resume of version

This commit is contained in:
Miroslav Stampar 2011-01-24 11:04:32 +00:00
parent eb33612736
commit a3e3387113
2 changed files with 19 additions and 19 deletions

View File

@ -23,10 +23,7 @@ from lib.core.datatype import injectionDict
from lib.core.enums import PAYLOAD from lib.core.enums import PAYLOAD
from lib.core.enums import PLACE from lib.core.enums import PLACE
from lib.core.settings import METADB_SUFFIX from lib.core.settings import METADB_SUFFIX
from lib.core.settings import MSSQL_ALIASES from lib.core.settings import SUPPORTED_DBMS
from lib.core.settings import MYSQL_ALIASES
from lib.core.settings import PGSQL_ALIASES
from lib.core.settings import ORACLE_ALIASES
from lib.core.settings import UNKNOWN_DBMS_VERSION from lib.core.settings import UNKNOWN_DBMS_VERSION
def safeFormatString(value): def safeFormatString(value):
@ -79,7 +76,6 @@ def setDbms(dbms):
base as fingerprint. base as fingerprint.
@type dbms: C{str} @type dbms: C{str}
""" """
condition = ( condition = (
not kb.resumedQueries not kb.resumedQueries
or ( kb.resumedQueries.has_key(conf.url) and or ( kb.resumedQueries.has_key(conf.url) and
@ -89,10 +85,7 @@ def setDbms(dbms):
if condition: if condition:
dataToSessionFile("[%s][%s][%s][DBMS][%s]\n" % (conf.url, kb.injection.place, safeFormatString(conf.parameters[kb.injection.place]), safeFormatString(dbms))) dataToSessionFile("[%s][%s][%s][DBMS][%s]\n" % (conf.url, kb.injection.place, safeFormatString(conf.parameters[kb.injection.place]), safeFormatString(dbms)))
firstRegExp = "(%s|%s|%s|%s)" % ("|".join([alias for alias in MSSQL_ALIASES]), firstRegExp = "(%s)" % ("|".join([alias for alias in SUPPORTED_DBMS]))
"|".join([alias for alias in MYSQL_ALIASES]),
"|".join([alias for alias in PGSQL_ALIASES]),
"|".join([alias for alias in ORACLE_ALIASES]))
dbmsRegExp = re.search("^%s" % firstRegExp, dbms, re.I) dbmsRegExp = re.search("^%s" % firstRegExp, dbms, re.I)
if dbmsRegExp: if dbmsRegExp:
@ -186,10 +179,7 @@ def resumeConfKb(expression, url, value):
logMsg += "from session file" logMsg += "from session file"
logger.info(logMsg) logger.info(logMsg)
firstRegExp = "(%s|%s|%s|%s)" % ("|".join([alias for alias in MSSQL_ALIASES]), firstRegExp = "(%s)" % ("|".join([alias for alias in SUPPORTED_DBMS]))
"|".join([alias for alias in MYSQL_ALIASES]),
"|".join([alias for alias in PGSQL_ALIASES]),
"|".join([alias for alias in ORACLE_ALIASES]))
dbmsRegExp = re.search("%s ([\d\.]+)" % firstRegExp, dbms) dbmsRegExp = re.search("%s ([\d\.]+)" % firstRegExp, dbms)
if dbmsRegExp: if dbmsRegExp:

View File

@ -22,6 +22,7 @@ from lib.core.enums import DBMS
from lib.core.session import setDbms from lib.core.session import setDbms
from lib.core.settings import FIREBIRD_ALIASES from lib.core.settings import FIREBIRD_ALIASES
from lib.core.settings import METADB_SUFFIX from lib.core.settings import METADB_SUFFIX
from lib.core.settings import UNKNOWN_DBMS_VERSION
from lib.request import inject from lib.request import inject
from lib.request.connect import Connect as Request from lib.request.connect import Connect as Request
@ -44,10 +45,11 @@ class Fingerprint(GenericFingerprint):
if dbmsOsFp: if dbmsOsFp:
value += "%s\n" % dbmsOsFp value += "%s\n" % dbmsOsFp
value += "back-end DBMS: " value += "back-end DBMS: "
actVer = format.getDbms()
if not conf.extensiveFp: if not conf.extensiveFp:
value += DBMS.FIREBIRD value += actVer
return value return value
actVer = format.getDbms() + " (%s)" % (self.__dialectCheck()) actVer = format.getDbms() + " (%s)" % (self.__dialectCheck())
@ -106,13 +108,20 @@ class Fingerprint(GenericFingerprint):
return retVal return retVal
def checkDbms(self): def checkDbms(self):
if not conf.extensiveFp and (backend.isDbmsWithin(FIREBIRD_ALIASES) or conf.dbms in FIREBIRD_ALIASES): if not conf.extensiveFp and (backend.isDbmsWithin(FIREBIRD_ALIASES) \
setDbms(DBMS.FIREBIRD) or conf.dbms in FIREBIRD_ALIASES) and backend.getVersion() and \
backend.getVersion() != UNKNOWN_DBMS_VERSION:
v = backend.getVersion().replace(">", "")
v = v.replace("=", "")
v = v.replace(" ", "")
backend.setVersion(v)
setDbms("%s %s" % (DBMS.FIREBIRD, backend.getVersion()))
self.getBanner() self.getBanner()
if not conf.extensiveFp: return True
return True
logMsg = "testing %s" % DBMS.FIREBIRD logMsg = "testing %s" % DBMS.FIREBIRD
logger.info(logMsg) logger.info(logMsg)
@ -141,6 +150,7 @@ class Fingerprint(GenericFingerprint):
if version is not None: if version is not None:
backend.setVersion(version) backend.setVersion(version)
setDbms("%s %s" % (DBMS.FIREBIRD, version))
self.getBanner() self.getBanner()