diff --git a/lib/controller/checks.py b/lib/controller/checks.py index 1359389b1..48b73be99 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -259,7 +259,13 @@ def checkSqlInjection(place, parameter, value): # provided DBMS if conf.dbms is not None and not intersect(payloadDbms, conf.dbms, True): debugMsg = "skipping test '%s' because " % title - debugMsg += "the provided DBMS is %s" % conf.dbms + debugMsg += "it is different than provided" + logger.debug(debugMsg) + continue + + if kb.dbmsFilter is not None and not intersect(payloadDbms, kb.dbmsFilter, True): + debugMsg = "skipping test '%s' because " % title + debugMsg += "it is different than provided" logger.debug(debugMsg) continue @@ -618,7 +624,9 @@ def checkSqlInjection(place, parameter, value): configUnion(test.request.char, test.request.columns) - if not Backend.getIdentifiedDbms(): + if len(kb.dbmsFilter or []) == 1: + Backend.forceDbms(kb.dbmsFilter[0]) + elif not Backend.getIdentifiedDbms(): if kb.heuristicDbms is None: warnMsg = "using unescaped version of the test " warnMsg += "because of zero knowledge of the " diff --git a/lib/controller/handler.py b/lib/controller/handler.py index 1aa418560..f8ea27501 100644 --- a/lib/controller/handler.py +++ b/lib/controller/handler.py @@ -82,6 +82,10 @@ def setHandler(): else: kb.dbms = conf.dbms = conf.forceDbms = dbms + if kb.dbmsFilter: + if dbms not in kb.dbmsFilter: + continue + handler = Handler() conf.dbmsConnector = Connector() diff --git a/lib/core/option.py b/lib/core/option.py index 6d341565e..558854a8b 100755 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -1700,7 +1700,13 @@ def _cleanupOptions(): conf.dbms = conf.forceDbms if conf.dbms: - conf.dbms = conf.dbms.capitalize() + kb.dbmsFilter = [] + for _ in conf.dbms.split(','): + for dbms, aliases in DBMS_ALIASES: + if _.strip().lower() in aliases: + kb.dbmsFilter.append(dbms) + conf.dbms = dbms if conf.dbms and ',' not in conf.dbms else None + break if conf.testFilter: conf.testFilter = conf.testFilter.strip('*+') @@ -1905,6 +1911,7 @@ def _setKnowledgeBaseAttributes(flushAll=True): # Active back-end DBMS fingerprint kb.dbms = None + kb.dbmsFilter = [] kb.dbmsVersion = [UNKNOWN_DBMS_VERSION] kb.delayCandidates = TIME_DELAY_CANDIDATES * [0] diff --git a/lib/core/settings.py b/lib/core/settings.py index c12021956..ca6353983 100755 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) -VERSION = "1.1.8.14" +VERSION = "1.1.8.15" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/txt/checksum.md5 b/txt/checksum.md5 index 6f4671e55..0e751d00c 100644 --- a/txt/checksum.md5 +++ b/txt/checksum.md5 @@ -21,9 +21,9 @@ c55b400b72acc43e0e59c87dd8bb8d75 extra/shellcodeexec/windows/shellcodeexec.x32. 310efc965c862cfbd7b0da5150a5ad36 extra/sqlharvest/__init__.py 7713aa366c983cdf1f3dbaa7383ea9e1 extra/sqlharvest/sqlharvest.py 7afe836fd97271ccba67b4c0da2482ff lib/controller/action.py -979909f798bfcd346d72089d72234b74 lib/controller/checks.py +20ec996d592a09f0b4607ddd231586f7 lib/controller/checks.py a66093c734c7f94ecdf94d882c2d8b89 lib/controller/controller.py -76ecef480eef54d4599b8fc44decb639 lib/controller/handler.py +926bdaf98d082a41fdd57bb41c1692d1 lib/controller/handler.py 310efc965c862cfbd7b0da5150a5ad36 lib/controller/__init__.py ca0a4eba91d73c9d7adedabf528ca4f1 lib/core/agent.py 6cc95a117fbd34ef31b9aa25520f0e31 lib/core/bigarray.py @@ -40,13 +40,13 @@ a44d7a4cc6c9a67a72d6af2f25f4ddac lib/core/exception.py 310efc965c862cfbd7b0da5150a5ad36 lib/core/__init__.py 9ba39bf66e9ecd469446bdbbeda906c3 lib/core/log.py 9d7069d81e4a520ed3fbcac584c1e86e lib/core/optiondict.py -106ed715de3e616df28fcc600b724db2 lib/core/option.py +c5f09788ee8ff9c9d12a052986875bc6 lib/core/option.py 5f2f56e6c5f274408df61943f1e080c0 lib/core/profiling.py 40be71cd774662a7b420caeb7051e7d5 lib/core/readlineng.py d8e9250f3775119df07e9070eddccd16 lib/core/replication.py 785f86e3f963fa3798f84286a4e83ff2 lib/core/revision.py 40c80b28b3a5819b737a5a17d4565ae9 lib/core/session.py -ba13dfc439f93ae49f8146416bf47f7d lib/core/settings.py +35c5e25bc24da66bf3df549e1f1db1ab lib/core/settings.py d91291997d2bd2f6028aaf371bf1d3b6 lib/core/shell.py 2ad85c130cc5f2b3701ea85c2f6bbf20 lib/core/subprocessng.py 4a6ecdd8a6e44bb4737bd9bc7f9b5743 lib/core/target.py