From 120b0d756ea4534c3ff614154d548eeb7b410126 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Tue, 10 May 2011 21:33:06 +0000 Subject: [PATCH] unfix --- lib/controller/checks.py | 13 +--------- lib/controller/controller.py | 18 +++---------- lib/core/session.py | 50 +++++------------------------------- 3 files changed, 12 insertions(+), 69 deletions(-) diff --git a/lib/controller/checks.py b/lib/controller/checks.py index 68c7deb72..77146bfc7 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -80,7 +80,6 @@ def checkSqlInjection(place, parameter, value): if kb.endDetection: break - proceed = True title = test.title stype = test.stype clause = test.clause @@ -103,6 +102,7 @@ def checkSqlInjection(place, parameter, value): else: title = title.replace("[COLSTART]", str(conf.uColsStart)) title = title.replace("[COLSTOP]", str(conf.uColsStop)) + elif conf.uCols is not None: debugMsg = "skipping test '%s' because the user " % title debugMsg += "provided custom column range %s" % conf.uCols @@ -211,17 +211,6 @@ def checkSqlInjection(place, parameter, value): logger.debug(debugMsg) continue - if len(kb.tested) > 0 and stype in kb.tested: - debugMsg = "skipping test '%s' because this " % title - debugMsg += "technique has already been detected " - debugMsg += "in a previous run" - logger.debug(debugMsg) - - proceed = False - - if not proceed: - continue - infoMsg = "testing '%s'" % title logger.info(infoMsg) diff --git a/lib/controller/controller.py b/lib/controller/controller.py index 034473ca7..a30051df5 100644 --- a/lib/controller/controller.py +++ b/lib/controller/controller.py @@ -43,7 +43,6 @@ from lib.core.exception import sqlmapSilentQuitException from lib.core.exception import sqlmapValueException from lib.core.exception import sqlmapUserQuitException from lib.core.session import setInjection -from lib.core.session import setTestedTechniques from lib.core.settings import EMPTY_FORM_FIELDS_REGEX from lib.core.settings import IGNORE_PARAMETERS from lib.core.settings import REFERER_ALIASES @@ -198,7 +197,6 @@ def start(): initTargetEnv() parseTargetUrl() - proceed = False testSqlInj = False if PLACE.GET in conf.parameters: @@ -319,15 +317,9 @@ def start(): # TODO: consider the following line in __setRequestParams() # __testableParameters = True - if len(kb.tested) > 0: - for t in conf.tech: - if t not in kb.tested: - proceed = True - break - else: - proceed = True + if (len(kb.injections) == 0 or (len(kb.injections) == 1 and kb.injections[0].place is None)) \ + and (kb.injection.place is None or kb.injection.parameter is None): - if proceed: if not conf.string and not conf.regexp: # NOTE: this is not needed anymore, leaving only to display # a warning message to the user in case the page is not stable @@ -435,8 +427,6 @@ def start(): warnMsg += "injectable" logger.warn(warnMsg) - setTestedTechniques() - if len(kb.injections) == 0 or (len(kb.injections) == 1 and kb.injections[0].place is None): if not conf.realTest: errMsg = "all parameters are not injectable." @@ -457,8 +447,8 @@ def start(): if not conf.string and not conf.regexp: errMsg += " Rerun by providing either a valid --string " - errMsg += "or a valid --regexp (refer to the user's " - errMsg += "manual for details)" + errMsg += "or a valid --regexp, refer to the user's " + errMsg += "manual for details" elif conf.string: errMsg += " Rerun by providing a valid --string, perhaps " errMsg += "the string that you have choosen does not match " diff --git a/lib/core/session.py b/lib/core/session.py index 0e05510d3..e13b92d5e 100644 --- a/lib/core/session.py +++ b/lib/core/session.py @@ -41,23 +41,6 @@ def unSafeFormatString(value): retVal = retVal.replace("__LEFT_SQUARE_BRACKET__", "[").replace("__RIGHT_SQUARE_BRACKET__", "]") return retVal -def setTestedTechniques(): - """ - Save information retrieved about dynamic markings to the - session file. - """ - - condition = ( - ( not kb.resumedQueries - or ( kb.resumedQueries.has_key(conf.url) and - not kb.resumedQueries[conf.url].has_key("Tested techniques")) ) - or ( kb.resumedQueries[conf.url].has_key("Tested techniques") - and base64unpickle(kb.resumedQueries[conf.url]["Tested techniques"][:-1]) != conf.tech - ) ) - - if condition: - dataToSessionFile("[%s][%s][%s][Tested techniques][%s]\n" % (conf.url, None, None, base64pickle(conf.tech))) - def setInjection(inj): """ Save information retrieved about injection place and parameter in the @@ -68,9 +51,9 @@ def setInjection(inj): or ( kb.resumedQueries.has_key(conf.url) and not kb.resumedQueries[conf.url].has_key("Injection data")) or ( kb.resumedQueries[conf.url].has_key("Injection data") - and intersect(base64unpickle(kb.resumedQueries[conf.url]["Injection data"][:-1]).data.keys(), \ + and intersect(base64unpickle(kb.resumedQueries[conf.url]["Injection data"][:-1]).data.keys(),\ inj.data.keys()) != inj.data.keys() - ) ) + ) ) if condition: dataToSessionFile("[%s][%s][%s][Injection data][%s]\n" % (conf.url, inj.place, safeFormatString(conf.parameters[inj.place]), base64pickle(inj))) @@ -182,40 +165,21 @@ def setXpCmdshellAvailability(available): dataToSessionFile("[%s][%s][%s][xp_cmdshell availability][%s]\n" % (conf.url, kb.injection.place, safeFormatString(conf.parameters[kb.injection.place]), str(available).lower())) def resumeConfKb(expression, url, value): - if expression == "Tested techniques" and url == conf.url: - kb.tested.extend(base64unpickle(value[:-1])) - kb.tested = list(set(kb.tested)) - kb.tested.sort() - - elif expression == "Injection data" and url == conf.url: + if expression == "Injection data" and url == conf.url: injection = base64unpickle(value[:-1]) + infoMsg = "resuming injection data from session file" + logger.info(infoMsg) + if injection.place in conf.paramDict and \ injection.parameter in conf.paramDict[injection.place]: if not conf.tech or intersect(conf.tech, injection.data.keys()): - # Strip not required techniques (--technique switch) if intersect(conf.tech, injection.data.keys()): injection.data = dict(filter(lambda (key, item): key in conf.tech, injection.data.items())) - infoMsg = "resuming injection data for technique%s " % ("s" if len(injection.data.keys()) > 1 else "") - infoMsg += "%s " % " & ".join([PAYLOAD.SQLINJECTION[k] for k in injection.data.keys()]) - infoMsg += "from session file" - logger.info(infoMsg) - - if len(kb.injections) == 0: + if injection not in kb.injections: kb.injections.append(injection) - else: - for resumedInj in kb.injections: - for inj, data in injection.data.items(): - if inj not in resumedInj.data: - kb.injections[kb.injections.index(resumedInj)].data[inj] = data - else: - warnMsg = "not resuming injection data for technique%s " % ("s" if len(injection.data.keys()) > 1 else "") - warnMsg += "%s " % " & ".join([PAYLOAD.SQLINJECTION[k] for k in injection.data.keys()]) - warnMsg += "from session file because you provided " - warnMsg += "different technique(s) to be tested on this run" - logger.warn(warnMsg) else: warnMsg = "there is an injection in %s parameter '%s' " % (injection.place, injection.parameter) warnMsg += "but you did not provided it this time"