diff --git a/lib/core/common.py b/lib/core/common.py index 944f88962..78a00bb77 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -8,6 +8,7 @@ See the file 'doc/COPYING' for copying permission """ import codecs +import cookielib import copy import ctypes import httplib @@ -3194,3 +3195,15 @@ def hashDBRetrieve(key, unserialize=False, checkConf=False): _ = "%s%s" % (conf.url or "%s%s" % (conf.hostname, conf.port), key) return conf.hashDB.retrieve(_, unserialize) if kb.resumeValues and not (checkConf and any([conf.flushSession, conf.freshQueries])) else None + +def resetCookieJar(cookieJar): + if not conf.loC: + cookieJar.clear() + else: + try: + cookieJar.load(conf.loC) + cookieJar.clear_expired_cookies() + except cookielib.LoadError, msg: + errMsg = "there was a problem loading " + errMsg += "cookies file ('%s')" % msg + raise sqlmapGenericException, errMsg diff --git a/lib/core/option.py b/lib/core/option.py index 4c13ffc4e..9f3d34863 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -44,6 +44,7 @@ from lib.core.common import paths from lib.core.common import randomRange from lib.core.common import randomStr from lib.core.common import readInput +from lib.core.common import resetCookieJar from lib.core.common import runningAsAdmin from lib.core.common import sanitizeStr from lib.core.common import setOptimize @@ -152,12 +153,7 @@ def __urllib2Opener(): conf.cj = cookielib.CookieJar() else: conf.cj = cookielib.MozillaCookieJar() - try: - conf.cj.load(conf.loC) - except cookielib.LoadError, msg: - errMsg = "there was a problem loading " - errMsg += "cookies file ('%s')" % msg - raise sqlmapGenericException, errMsg + resetCookieJar(conf.cj) handlers.append(urllib2.HTTPCookieProcessor(conf.cj)) diff --git a/lib/core/target.py b/lib/core/target.py index eb6915146..598dde670 100644 --- a/lib/core/target.py +++ b/lib/core/target.py @@ -18,6 +18,7 @@ from lib.core.common import hashDBRetrieve from lib.core.common import intersect from lib.core.common import paramToDict from lib.core.common import readInput +from lib.core.common import resetCookieJar from lib.core.convert import urldecode from lib.core.data import cmdLineOptions from lib.core.data import conf @@ -409,7 +410,7 @@ def initTargetEnv(): conf.hashDB.close() if conf.cj: - conf.cj.clear() + resetCookieJar(conf.cj) conf.paramDict = {} conf.parameters = {} diff --git a/lib/request/basic.py b/lib/request/basic.py index 24fecfa27..d23672ef3 100644 --- a/lib/request/basic.py +++ b/lib/request/basic.py @@ -19,6 +19,7 @@ from lib.core.common import extractErrorMessage from lib.core.common import extractRegexResult from lib.core.common import getUnicode from lib.core.common import readInput +from lib.core.common import resetCookieJar from lib.core.common import singleTimeLogMessage from lib.core.data import conf from lib.core.data import kb @@ -71,7 +72,7 @@ def forgeHeaders(items=None): headers[HTTPHEADER.COOKIE] += "%s %s=%s" % (DEFAULT_COOKIE_DELIMITER, cookie.name, cookie.value) if kb.testMode: - conf.cj.clear() + resetCookieJar(conf.cj) if kb.redirectSetCookie and not conf.dropSetCookie: if HTTPHEADER.COOKIE in headers: